diff --git a/frontend/.env.example b/frontend/.env.example index 1e9dde6..62e47e2 100644 --- a/frontend/.env.example +++ b/frontend/.env.example @@ -9,9 +9,11 @@ NEXT_PUBLIC_FORWARDER_ADDRESS= NEXT_PUBLIC_CONTRACT_MINT_NFT_MANAGER= NEXT_PUBLIC_CONTRACT_EVENT_MANAGER= NEXT_PUBLIC_CONTRACT_OPERATION_CONTROLLER= +NEXT_PUBLIC_CONTRACT_MINT_POINT= # Openzeppelin Relayer API keys OZ_RELAYER_API_KEYS="[""]" OZ_RELAYER_API_SECRETS="[""]" +DEV_RELAYER_PRIVATE_KEY= # Chain Information NEXT_PUBLIC_CHAIN_ID= NEXT_PUBLIC_CHAIN_NAME= @@ -32,4 +34,7 @@ NEXT_PUBLIC_GA_MEASUREMENT_ID= NEXT_PUBLIC_THIRDWEB_CLIENT_ID= # Blacklist of event group and event by id NEXT_PUBLIC_EVENT_GROUP_BLACK_LIST="0" -NEXT_PUBLIC_EVENT_BLACK_LIST="0" \ No newline at end of file +NEXT_PUBLIC_EVENT_BLACK_LIST="0" +# Stripe setting +STRIPE_SK= +STRIPE_WEBHOOK_MINT_POINT_SECRET= \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index 10358ff..043039e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -62,6 +62,7 @@ "typescript": "4.7.4" }, "volta": { - "node": "18.17.1" + "node": "18.17.1", + "yarn": "1.22.19" } } diff --git a/frontend/src/contracts/MintPoint.json b/frontend/src/contracts/MintPoint.json new file mode 100644 index 0000000..b3053f6 --- /dev/null +++ b/frontend/src/contracts/MintPoint.json @@ -0,0 +1,790 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "MintPoint", + "sourceName": "contracts/MintPoint.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "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": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Mint", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "Register", + "type": "event" + }, + { + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "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": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "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": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "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": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "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": [], + "name": "tokenIds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "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": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061280d806100206000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c80638129fc1c116100de578063b390c0ab11610097578063d539139311610071578063d539139314610377578063d547741f1461039e578063e985e9c5146103b1578063f242432a146103c457600080fd5b8063b390c0ab14610331578063bd85b03914610344578063ca15c8731461036457600080fd5b80638129fc1c146102c85780639010d07c146102d057806391d14854146102fb57806395d89b411461030e578063a217fddf14610316578063a22cb4651461031e57600080fd5b8063248a9ca31161014b57806336568abe1161012557806336568abe146102695780634e1273f41461027c5780634f558e791461029c578063714cff56146102be57600080fd5b8063248a9ca3146102205780632eb2c2d6146102435780632f2ff15d1461025657600080fd5b8062fdd58e1461019257806301ffc9a7146101b857806306fdde03146101db5780630e89341c146101f0578063156e29f6146102035780631aa3a00814610218575b600080fd5b6101a56101a0366004611cf5565b6103d7565b6040519081526020015b60405180910390f35b6101cb6101c6366004611d35565b610472565b60405190151581526020016101af565b6101e361047d565b6040516101af9190611da2565b6101e36101fe366004611db5565b61050c565b610216610211366004611dce565b6105a0565b005b610216610643565b6101a561022e366004611db5565b600090815260c9602052604090206001015490565b610216610251366004611f4d565b610659565b610216610264366004611ff7565b6106a5565b610216610277366004611ff7565b6106cf565b61028f61028a366004612023565b61074d565b6040516101af9190612129565b6101cb6102aa366004611db5565b600090815260976020526040902054151590565b6101a561012d5481565b610216610877565b6102e36102de36600461213c565b610a3c565b6040516001600160a01b0390911681526020016101af565b6101cb610309366004611ff7565b610a5b565b6101e3610a86565b6101a5600081565b61021661032c36600461215e565b610a94565b61021661033f36600461213c565b610a9f565b6101a5610352366004611db5565b60009081526097602052604090205490565b6101a5610372366004611db5565b610b1e565b6101a57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102166103ac366004611ff7565b610b35565b6101cb6103bf36600461219a565b610b5a565b6102166103d23660046121c4565b610b8a565b60006001600160a01b0383166104475760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b5060008181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b600061046c82610bcf565b61012e805461048b90612229565b80601f01602080910402602001604051908101604052809291908181526020018280546104b790612229565b80156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b505050505081565b60606067805461051b90612229565b80601f016020809104026020016040519081016040528092919081815260200182805461054790612229565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b50505050509050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105ca81610bf4565b61012d5483106105ec5760405162461bcd60e51b815260040161043e90612263565b61060784848460405180602001604052806000815250610bfe565b60405183906001600160a01b038616907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688590600090a350505050565b600061064e81610bf4565b610656610d23565b50565b6001600160a01b03851633148061067557506106758533610b5a565b6106915760405162461bcd60e51b815260040161043e906122a8565b61069e8585858585610d7a565b5050505050565b600082815260c960205260409020600101546106c081610bf4565b6106ca8383610f68565b505050565b6001600160a01b038116331461073f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161043e565b6107498282610f8a565b5050565b606081518351146107b25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161043e565b6000835167ffffffffffffffff8111156107ce576107ce611e01565b6040519080825280602002602001820160405280156107f7578160200160208202803683370190505b50905060005b845181101561086f5761084285828151811061081b5761081b6122f7565b6020026020010151858381518110610835576108356122f7565b60200260200101516103d7565b828281518110610854576108546122f7565b602090810291909101015261086881612323565b90506107fd565b509392505050565b600054610100900460ff16158080156108975750600054600160ff909116105b806108b15750303b1580156108b1575060005460ff166001145b6109145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161043e565b6000805460ff191660011790558015610937576000805461ff0019166101001790555b61094f60405180602001604052806000815250610fac565b610957610fdc565b61095f610fdc565b61096a600033610f68565b6109947f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610f68565b604080518082019091526009815268135a5b9d141bda5b9d60ba1b602082015261012e906109c29082612382565b5060408051808201909152600381526213539560ea1b602082015261012f906109eb9082612382565b506109f4610d23565b8015610656576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600082815260fb60205260408120610a549083611005565b9392505050565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61012f805461048b90612229565b610749338383611011565b61012d548210610ac15760405162461bcd60e51b815260040161043e90612263565b80610acc33846103d7565b1015610b135760405162461bcd60e51b815260206004820152601660248201527526b4b73a2837b4b73a1d103737ba1036b4b73a32b21760511b604482015260640161043e565b6107493383836110f1565b600081815260fb6020526040812061046c90611285565b600082815260c96020526040902060010154610b5081610bf4565b6106ca8383610f8a565b6001600160a01b03808316600090815260666020908152604080832093851683529290529081205460ff16610a54565b6001600160a01b038516331480610ba65750610ba68533610b5a565b610bc25760405162461bcd60e51b815260040161043e906122a8565b61069e858585858561128f565b60006001600160e01b03198216635a05180f60e01b148061046c575061046c826113cb565b61065681336113f0565b6001600160a01b038416610c5e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161043e565b336000610c6a85611454565b90506000610c7785611454565b9050610c888360008985858961149f565b60008681526065602090815260408083206001600160a01b038b16845290915281208054879290610cba908490612442565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d1a83600089898989611618565b50505050505050565b61012d80549081906000610d3683612323565b919050555080610d433390565b6001600160a01b03167e7dc6ab80cc84c043b7b8d4fcafc802187470087f7ea7fccd2e17aecd0256a160405160405180910390a350565b8151835114610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161043e565b6001600160a01b038416610e025760405162461bcd60e51b815260040161043e90612455565b33610e1181878787878761149f565b60005b8451811015610efa576000858281518110610e3157610e316122f7565b602002602001015190506000858381518110610e4f57610e4f6122f7565b60209081029190910181015160008481526065835260408082206001600160a01b038e168352909352919091205490915081811015610ea05760405162461bcd60e51b815260040161043e9061249a565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610edf908490612442565b9250508190555050505080610ef390612323565b9050610e14565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f4a9291906124e4565b60405180910390a4610f60818787878787611773565b505050505050565b610f72828261182e565b600082815260fb602052604090206106ca90826118b4565b610f9482826118c9565b600082815260fb602052604090206106ca9082611930565b600054610100900460ff16610fd35760405162461bcd60e51b815260040161043e90612512565b61065681611945565b600054610100900460ff166110035760405162461bcd60e51b815260040161043e90612512565b565b6000610a548383611975565b816001600160a01b0316836001600160a01b0316036110845760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161043e565b6001600160a01b03838116600081815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166111535760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161043e565b33600061115f84611454565b9050600061116c84611454565b905061118c8387600085856040518060200160405280600081525061149f565b60008581526065602090815260408083206001600160a01b038a1684529091529020548481101561120b5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161043e565b60008681526065602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610d1a565b600061046c825490565b6001600160a01b0384166112b55760405162461bcd60e51b815260040161043e90612455565b3360006112c185611454565b905060006112ce85611454565b90506112de83898985858961149f565b60008681526065602090815260408083206001600160a01b038c168452909152902054858110156113215760405162461bcd60e51b815260040161043e9061249a565b60008781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611360908490612442565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46113c0848a8a8a8a8a611618565b505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061046c575061046c8261199f565b6113fa8282610a5b565b61074957611412816001600160a01b031660146119ef565b61141d8360206119ef565b60405160200161142e92919061255d565b60408051601f198184030181529082905262461bcd60e51b825261043e91600401611da2565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061148e5761148e6122f7565b602090810291909101015292915050565b6001600160a01b0385166115265760005b8351811015611524578281815181106114cb576114cb6122f7565b6020026020010151609760008684815181106114e9576114e96122f7565b60200260200101518152602001908152602001600020600082825461150e9190612442565b9091555061151d905081612323565b90506114b0565b505b6001600160a01b038416610f605760005b8351811015610d1a576000848281518110611554576115546122f7565b602002602001015190506000848381518110611572576115726122f7565b60200260200101519050600060976000848152602001908152602001600020549050818110156115f55760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161043e565b6000928352609760205260409092209103905561161181612323565b9050611537565b6001600160a01b0384163b15610f605760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061165c90899089908890889088906004016125d2565b6020604051808303816000875af1925050508015611697575060408051601f3d908101601f1916820190925261169491810190612617565b60015b611743576116a3612634565b806308c379a0036116dc57506116b7612650565b806116c257506116de565b8060405162461bcd60e51b815260040161043e9190611da2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161043e565b6001600160e01b0319811663f23a6e6160e01b14610d1a5760405162461bcd60e51b815260040161043e906126da565b6001600160a01b0384163b15610f605760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906117b79089908990889088908890600401612722565b6020604051808303816000875af19250505080156117f2575060408051601f3d908101601f191682019092526117ef91810190612617565b60015b6117fe576116a3612634565b6001600160e01b0319811663bc197c8160e01b14610d1a5760405162461bcd60e51b815260040161043e906126da565b6118388282610a5b565b61074957600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff191660011790556118703390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610a54836001600160a01b038416611b8b565b6118d38282610a5b565b1561074957600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610a54836001600160a01b038416611bda565b600054610100900460ff1661196c5760405162461bcd60e51b815260040161043e90612512565b61065681611ccd565b600082600001828154811061198c5761198c6122f7565b9060005260206000200154905092915050565b60006001600160e01b03198216636cdb3d1360e11b14806119d057506001600160e01b031982166303a24d0760e21b145b8061046c57506301ffc9a760e01b6001600160e01b031983161461046c565b606060006119fe836002612780565b611a09906002612442565b67ffffffffffffffff811115611a2157611a21611e01565b6040519080825280601f01601f191660200182016040528015611a4b576020820181803683370190505b509050600360fc1b81600081518110611a6657611a666122f7565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a9557611a956122f7565b60200101906001600160f81b031916908160001a9053506000611ab9846002612780565b611ac4906001612442565b90505b6001811115611b3c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611af857611af86122f7565b1a60f81b828281518110611b0e57611b0e6122f7565b60200101906001600160f81b031916908160001a90535060049490941c93611b3581612797565b9050611ac7565b508315610a545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161043e565b6000818152600183016020526040812054611bd25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561046c565b50600061046c565b60008181526001830160205260408120548015611cc3576000611bfe6001836127ae565b8554909150600090611c12906001906127ae565b9050818114611c77576000866000018281548110611c3257611c326122f7565b9060005260206000200154905080876000018481548110611c5557611c556122f7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c8857611c886127c1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061046c565b600091505061046c565b60676107498282612382565b80356001600160a01b0381168114611cf057600080fd5b919050565b60008060408385031215611d0857600080fd5b611d1183611cd9565b946020939093013593505050565b6001600160e01b03198116811461065657600080fd5b600060208284031215611d4757600080fd5b8135610a5481611d1f565b60005b83811015611d6d578181015183820152602001611d55565b50506000910152565b60008151808452611d8e816020860160208601611d52565b601f01601f19169290920160200192915050565b602081526000610a546020830184611d76565b600060208284031215611dc757600080fd5b5035919050565b600080600060608486031215611de357600080fd5b611dec84611cd9565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611e3d57611e3d611e01565b6040525050565b600067ffffffffffffffff821115611e5e57611e5e611e01565b5060051b60200190565b600082601f830112611e7957600080fd5b81356020611e8682611e44565b604051611e938282611e17565b83815260059390931b8501820192828101915086841115611eb357600080fd5b8286015b84811015611ece5780358352918301918301611eb7565b509695505050505050565b600082601f830112611eea57600080fd5b813567ffffffffffffffff811115611f0457611f04611e01565b604051611f1b601f8301601f191660200182611e17565b818152846020838601011115611f3057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611f6557600080fd5b611f6e86611cd9565b9450611f7c60208701611cd9565b9350604086013567ffffffffffffffff80821115611f9957600080fd5b611fa589838a01611e68565b94506060880135915080821115611fbb57600080fd5b611fc789838a01611e68565b93506080880135915080821115611fdd57600080fd5b50611fea88828901611ed9565b9150509295509295909350565b6000806040838503121561200a57600080fd5b8235915061201a60208401611cd9565b90509250929050565b6000806040838503121561203657600080fd5b823567ffffffffffffffff8082111561204e57600080fd5b818501915085601f83011261206257600080fd5b8135602061206f82611e44565b60405161207c8282611e17565b83815260059390931b850182019282810191508984111561209c57600080fd5b948201945b838610156120c1576120b286611cd9565b825294820194908201906120a1565b965050860135925050808211156120d757600080fd5b506120e485828601611e68565b9150509250929050565b600081518084526020808501945080840160005b8381101561211e57815187529582019590820190600101612102565b509495945050505050565b602081526000610a5460208301846120ee565b6000806040838503121561214f57600080fd5b50508035926020909101359150565b6000806040838503121561217157600080fd5b61217a83611cd9565b91506020830135801515811461218f57600080fd5b809150509250929050565b600080604083850312156121ad57600080fd5b6121b683611cd9565b915061201a60208401611cd9565b600080600080600060a086880312156121dc57600080fd5b6121e586611cd9565b94506121f360208701611cd9565b93506040860135925060608601359150608086013567ffffffffffffffff81111561221d57600080fd5b611fea88828901611ed9565b600181811c9082168061223d57607f821691505b60208210810361225d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4d696e74506f696e743a20746f6b656e4964206973206e6f742072656769737460408201526432b932b21760d91b606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123355761233561230d565b5060010190565b601f8211156106ca57600081815260208120601f850160051c810160208610156123635750805b601f850160051c820191505b81811015610f605782815560010161236f565b815167ffffffffffffffff81111561239c5761239c611e01565b6123b0816123aa8454612229565b8461233c565b602080601f8311600181146123e557600084156123cd5750858301515b600019600386901b1c1916600185901b178555610f60565b600085815260208120601f198616915b82811015612414578886015182559484019460019091019084016123f5565b50858210156124325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561046c5761046c61230d565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006124f760408301856120ee565b828103602084015261250981856120ee565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612595816017850160208801611d52565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516125c6816028840160208801611d52565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061260c90830184611d76565b979650505050505050565b60006020828403121561262957600080fd5b8151610a5481611d1f565b600060033d111561264d5760046000803e5060005160e01c5b90565b600060443d101561265e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561268e57505050505090565b82850191508151818111156126a65750505050505090565b843d87010160208285010111156126c05750505050505090565b6126cf60208286010187611e17565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061274e908301866120ee565b828103606084015261276081866120ee565b905082810360808401526127748185611d76565b98975050505050505050565b808202811582820484141761046c5761046c61230d565b6000816127a6576127a661230d565b506000190190565b8181038181111561046c5761046c61230d565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203d223625e2b82c5b35cbb48055398a764f3a2244cd1ab484a89d94f8debf49fc64736f6c63430008130033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c80638129fc1c116100de578063b390c0ab11610097578063d539139311610071578063d539139314610377578063d547741f1461039e578063e985e9c5146103b1578063f242432a146103c457600080fd5b8063b390c0ab14610331578063bd85b03914610344578063ca15c8731461036457600080fd5b80638129fc1c146102c85780639010d07c146102d057806391d14854146102fb57806395d89b411461030e578063a217fddf14610316578063a22cb4651461031e57600080fd5b8063248a9ca31161014b57806336568abe1161012557806336568abe146102695780634e1273f41461027c5780634f558e791461029c578063714cff56146102be57600080fd5b8063248a9ca3146102205780632eb2c2d6146102435780632f2ff15d1461025657600080fd5b8062fdd58e1461019257806301ffc9a7146101b857806306fdde03146101db5780630e89341c146101f0578063156e29f6146102035780631aa3a00814610218575b600080fd5b6101a56101a0366004611cf5565b6103d7565b6040519081526020015b60405180910390f35b6101cb6101c6366004611d35565b610472565b60405190151581526020016101af565b6101e361047d565b6040516101af9190611da2565b6101e36101fe366004611db5565b61050c565b610216610211366004611dce565b6105a0565b005b610216610643565b6101a561022e366004611db5565b600090815260c9602052604090206001015490565b610216610251366004611f4d565b610659565b610216610264366004611ff7565b6106a5565b610216610277366004611ff7565b6106cf565b61028f61028a366004612023565b61074d565b6040516101af9190612129565b6101cb6102aa366004611db5565b600090815260976020526040902054151590565b6101a561012d5481565b610216610877565b6102e36102de36600461213c565b610a3c565b6040516001600160a01b0390911681526020016101af565b6101cb610309366004611ff7565b610a5b565b6101e3610a86565b6101a5600081565b61021661032c36600461215e565b610a94565b61021661033f36600461213c565b610a9f565b6101a5610352366004611db5565b60009081526097602052604090205490565b6101a5610372366004611db5565b610b1e565b6101a57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102166103ac366004611ff7565b610b35565b6101cb6103bf36600461219a565b610b5a565b6102166103d23660046121c4565b610b8a565b60006001600160a01b0383166104475760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b5060008181526065602090815260408083206001600160a01b03861684529091529020545b92915050565b600061046c82610bcf565b61012e805461048b90612229565b80601f01602080910402602001604051908101604052809291908181526020018280546104b790612229565b80156105045780601f106104d957610100808354040283529160200191610504565b820191906000526020600020905b8154815290600101906020018083116104e757829003601f168201915b505050505081565b60606067805461051b90612229565b80601f016020809104026020016040519081016040528092919081815260200182805461054790612229565b80156105945780601f1061056957610100808354040283529160200191610594565b820191906000526020600020905b81548152906001019060200180831161057757829003601f168201915b50505050509050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66105ca81610bf4565b61012d5483106105ec5760405162461bcd60e51b815260040161043e90612263565b61060784848460405180602001604052806000815250610bfe565b60405183906001600160a01b038616907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688590600090a350505050565b600061064e81610bf4565b610656610d23565b50565b6001600160a01b03851633148061067557506106758533610b5a565b6106915760405162461bcd60e51b815260040161043e906122a8565b61069e8585858585610d7a565b5050505050565b600082815260c960205260409020600101546106c081610bf4565b6106ca8383610f68565b505050565b6001600160a01b038116331461073f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161043e565b6107498282610f8a565b5050565b606081518351146107b25760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161043e565b6000835167ffffffffffffffff8111156107ce576107ce611e01565b6040519080825280602002602001820160405280156107f7578160200160208202803683370190505b50905060005b845181101561086f5761084285828151811061081b5761081b6122f7565b6020026020010151858381518110610835576108356122f7565b60200260200101516103d7565b828281518110610854576108546122f7565b602090810291909101015261086881612323565b90506107fd565b509392505050565b600054610100900460ff16158080156108975750600054600160ff909116105b806108b15750303b1580156108b1575060005460ff166001145b6109145760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161043e565b6000805460ff191660011790558015610937576000805461ff0019166101001790555b61094f60405180602001604052806000815250610fac565b610957610fdc565b61095f610fdc565b61096a600033610f68565b6109947f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633610f68565b604080518082019091526009815268135a5b9d141bda5b9d60ba1b602082015261012e906109c29082612382565b5060408051808201909152600381526213539560ea1b602082015261012f906109eb9082612382565b506109f4610d23565b8015610656576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b600082815260fb60205260408120610a549083611005565b9392505050565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61012f805461048b90612229565b610749338383611011565b61012d548210610ac15760405162461bcd60e51b815260040161043e90612263565b80610acc33846103d7565b1015610b135760405162461bcd60e51b815260206004820152601660248201527526b4b73a2837b4b73a1d103737ba1036b4b73a32b21760511b604482015260640161043e565b6107493383836110f1565b600081815260fb6020526040812061046c90611285565b600082815260c96020526040902060010154610b5081610bf4565b6106ca8383610f8a565b6001600160a01b03808316600090815260666020908152604080832093851683529290529081205460ff16610a54565b6001600160a01b038516331480610ba65750610ba68533610b5a565b610bc25760405162461bcd60e51b815260040161043e906122a8565b61069e858585858561128f565b60006001600160e01b03198216635a05180f60e01b148061046c575061046c826113cb565b61065681336113f0565b6001600160a01b038416610c5e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161043e565b336000610c6a85611454565b90506000610c7785611454565b9050610c888360008985858961149f565b60008681526065602090815260408083206001600160a01b038b16845290915281208054879290610cba908490612442565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610d1a83600089898989611618565b50505050505050565b61012d80549081906000610d3683612323565b919050555080610d433390565b6001600160a01b03167e7dc6ab80cc84c043b7b8d4fcafc802187470087f7ea7fccd2e17aecd0256a160405160405180910390a350565b8151835114610ddc5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161043e565b6001600160a01b038416610e025760405162461bcd60e51b815260040161043e90612455565b33610e1181878787878761149f565b60005b8451811015610efa576000858281518110610e3157610e316122f7565b602002602001015190506000858381518110610e4f57610e4f6122f7565b60209081029190910181015160008481526065835260408082206001600160a01b038e168352909352919091205490915081811015610ea05760405162461bcd60e51b815260040161043e9061249a565b60008381526065602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610edf908490612442565b9250508190555050505080610ef390612323565b9050610e14565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f4a9291906124e4565b60405180910390a4610f60818787878787611773565b505050505050565b610f72828261182e565b600082815260fb602052604090206106ca90826118b4565b610f9482826118c9565b600082815260fb602052604090206106ca9082611930565b600054610100900460ff16610fd35760405162461bcd60e51b815260040161043e90612512565b61065681611945565b600054610100900460ff166110035760405162461bcd60e51b815260040161043e90612512565b565b6000610a548383611975565b816001600160a01b0316836001600160a01b0316036110845760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161043e565b6001600160a01b03838116600081815260666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166111535760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161043e565b33600061115f84611454565b9050600061116c84611454565b905061118c8387600085856040518060200160405280600081525061149f565b60008581526065602090815260408083206001600160a01b038a1684529091529020548481101561120b5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161043e565b60008681526065602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610d1a565b600061046c825490565b6001600160a01b0384166112b55760405162461bcd60e51b815260040161043e90612455565b3360006112c185611454565b905060006112ce85611454565b90506112de83898985858961149f565b60008681526065602090815260408083206001600160a01b038c168452909152902054858110156113215760405162461bcd60e51b815260040161043e9061249a565b60008781526065602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611360908490612442565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46113c0848a8a8a8a8a611618565b505050505050505050565b60006001600160e01b03198216637965db0b60e01b148061046c575061046c8261199f565b6113fa8282610a5b565b61074957611412816001600160a01b031660146119ef565b61141d8360206119ef565b60405160200161142e92919061255d565b60408051601f198184030181529082905262461bcd60e51b825261043e91600401611da2565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061148e5761148e6122f7565b602090810291909101015292915050565b6001600160a01b0385166115265760005b8351811015611524578281815181106114cb576114cb6122f7565b6020026020010151609760008684815181106114e9576114e96122f7565b60200260200101518152602001908152602001600020600082825461150e9190612442565b9091555061151d905081612323565b90506114b0565b505b6001600160a01b038416610f605760005b8351811015610d1a576000848281518110611554576115546122f7565b602002602001015190506000848381518110611572576115726122f7565b60200260200101519050600060976000848152602001908152602001600020549050818110156115f55760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161043e565b6000928352609760205260409092209103905561161181612323565b9050611537565b6001600160a01b0384163b15610f605760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061165c90899089908890889088906004016125d2565b6020604051808303816000875af1925050508015611697575060408051601f3d908101601f1916820190925261169491810190612617565b60015b611743576116a3612634565b806308c379a0036116dc57506116b7612650565b806116c257506116de565b8060405162461bcd60e51b815260040161043e9190611da2565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161043e565b6001600160e01b0319811663f23a6e6160e01b14610d1a5760405162461bcd60e51b815260040161043e906126da565b6001600160a01b0384163b15610f605760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906117b79089908990889088908890600401612722565b6020604051808303816000875af19250505080156117f2575060408051601f3d908101601f191682019092526117ef91810190612617565b60015b6117fe576116a3612634565b6001600160e01b0319811663bc197c8160e01b14610d1a5760405162461bcd60e51b815260040161043e906126da565b6118388282610a5b565b61074957600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff191660011790556118703390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610a54836001600160a01b038416611b8b565b6118d38282610a5b565b1561074957600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610a54836001600160a01b038416611bda565b600054610100900460ff1661196c5760405162461bcd60e51b815260040161043e90612512565b61065681611ccd565b600082600001828154811061198c5761198c6122f7565b9060005260206000200154905092915050565b60006001600160e01b03198216636cdb3d1360e11b14806119d057506001600160e01b031982166303a24d0760e21b145b8061046c57506301ffc9a760e01b6001600160e01b031983161461046c565b606060006119fe836002612780565b611a09906002612442565b67ffffffffffffffff811115611a2157611a21611e01565b6040519080825280601f01601f191660200182016040528015611a4b576020820181803683370190505b509050600360fc1b81600081518110611a6657611a666122f7565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a9557611a956122f7565b60200101906001600160f81b031916908160001a9053506000611ab9846002612780565b611ac4906001612442565b90505b6001811115611b3c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611af857611af86122f7565b1a60f81b828281518110611b0e57611b0e6122f7565b60200101906001600160f81b031916908160001a90535060049490941c93611b3581612797565b9050611ac7565b508315610a545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161043e565b6000818152600183016020526040812054611bd25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561046c565b50600061046c565b60008181526001830160205260408120548015611cc3576000611bfe6001836127ae565b8554909150600090611c12906001906127ae565b9050818114611c77576000866000018281548110611c3257611c326122f7565b9060005260206000200154905080876000018481548110611c5557611c556122f7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c8857611c886127c1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061046c565b600091505061046c565b60676107498282612382565b80356001600160a01b0381168114611cf057600080fd5b919050565b60008060408385031215611d0857600080fd5b611d1183611cd9565b946020939093013593505050565b6001600160e01b03198116811461065657600080fd5b600060208284031215611d4757600080fd5b8135610a5481611d1f565b60005b83811015611d6d578181015183820152602001611d55565b50506000910152565b60008151808452611d8e816020860160208601611d52565b601f01601f19169290920160200192915050565b602081526000610a546020830184611d76565b600060208284031215611dc757600080fd5b5035919050565b600080600060608486031215611de357600080fd5b611dec84611cd9565b95602085013595506040909401359392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715611e3d57611e3d611e01565b6040525050565b600067ffffffffffffffff821115611e5e57611e5e611e01565b5060051b60200190565b600082601f830112611e7957600080fd5b81356020611e8682611e44565b604051611e938282611e17565b83815260059390931b8501820192828101915086841115611eb357600080fd5b8286015b84811015611ece5780358352918301918301611eb7565b509695505050505050565b600082601f830112611eea57600080fd5b813567ffffffffffffffff811115611f0457611f04611e01565b604051611f1b601f8301601f191660200182611e17565b818152846020838601011115611f3057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611f6557600080fd5b611f6e86611cd9565b9450611f7c60208701611cd9565b9350604086013567ffffffffffffffff80821115611f9957600080fd5b611fa589838a01611e68565b94506060880135915080821115611fbb57600080fd5b611fc789838a01611e68565b93506080880135915080821115611fdd57600080fd5b50611fea88828901611ed9565b9150509295509295909350565b6000806040838503121561200a57600080fd5b8235915061201a60208401611cd9565b90509250929050565b6000806040838503121561203657600080fd5b823567ffffffffffffffff8082111561204e57600080fd5b818501915085601f83011261206257600080fd5b8135602061206f82611e44565b60405161207c8282611e17565b83815260059390931b850182019282810191508984111561209c57600080fd5b948201945b838610156120c1576120b286611cd9565b825294820194908201906120a1565b965050860135925050808211156120d757600080fd5b506120e485828601611e68565b9150509250929050565b600081518084526020808501945080840160005b8381101561211e57815187529582019590820190600101612102565b509495945050505050565b602081526000610a5460208301846120ee565b6000806040838503121561214f57600080fd5b50508035926020909101359150565b6000806040838503121561217157600080fd5b61217a83611cd9565b91506020830135801515811461218f57600080fd5b809150509250929050565b600080604083850312156121ad57600080fd5b6121b683611cd9565b915061201a60208401611cd9565b600080600080600060a086880312156121dc57600080fd5b6121e586611cd9565b94506121f360208701611cd9565b93506040860135925060608601359150608086013567ffffffffffffffff81111561221d57600080fd5b611fea88828901611ed9565b600181811c9082168061223d57607f821691505b60208210810361225d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526025908201527f4d696e74506f696e743a20746f6b656e4964206973206e6f742072656769737460408201526432b932b21760d91b606082015260800190565b6020808252602f908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526e195c881b9bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016123355761233561230d565b5060010190565b601f8211156106ca57600081815260208120601f850160051c810160208610156123635750805b601f850160051c820191505b81811015610f605782815560010161236f565b815167ffffffffffffffff81111561239c5761239c611e01565b6123b0816123aa8454612229565b8461233c565b602080601f8311600181146123e557600084156123cd5750858301515b600019600386901b1c1916600185901b178555610f60565b600085815260208120601f198616915b82811015612414578886015182559484019460019091019084016123f5565b50858210156124325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561046c5761046c61230d565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6040815260006124f760408301856120ee565b828103602084015261250981856120ee565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612595816017850160208801611d52565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516125c6816028840160208801611d52565b01602801949350505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061260c90830184611d76565b979650505050505050565b60006020828403121561262957600080fd5b8151610a5481611d1f565b600060033d111561264d5760046000803e5060005160e01c5b90565b600060443d101561265e5790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561268e57505050505090565b82850191508151818111156126a65750505050505090565b843d87010160208285010111156126c05750505050505090565b6126cf60208286010187611e17565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061274e908301866120ee565b828103606084015261276081866120ee565b905082810360808401526127748185611d76565b98975050505050505050565b808202811582820484141761046c5761046c61230d565b6000816127a6576127a661230d565b506000190190565b8181038181111561046c5761046c61230d565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203d223625e2b82c5b35cbb48055398a764f3a2244cd1ab484a89d94f8debf49fc64736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/frontend/src/pages/api/mtx/relay.ts b/frontend/src/pages/api/mtx/relay.ts index b2e653c..7adc392 100644 --- a/frontend/src/pages/api/mtx/relay.ts +++ b/frontend/src/pages/api/mtx/relay.ts @@ -10,10 +10,10 @@ import { MintRallyForwarder } from "types/MintRallyForwarder"; const getOzSigner = async () => { if (process.env.DEV_RELAYER_PRIVATE_KEY) { const developmentProvider = new providers.JsonRpcProvider( - "http://localhost:8545" + process.env.NEXT_PUBLIC_PROVIDER_RPC! ); return new Wallet( - process.env.DEVELOPMENT_RELAYER_PRIVATE_KEY!, + process.env.DEV_RELAYER_PRIVATE_KEY!, developmentProvider ); } else { diff --git a/frontend/src/pages/api/points/checkout.ts b/frontend/src/pages/api/points/checkout.ts index c3392ee..af1f3f3 100644 --- a/frontend/src/pages/api/points/checkout.ts +++ b/frontend/src/pages/api/points/checkout.ts @@ -2,6 +2,8 @@ import type { NextApiRequest, NextApiResponse } from "next"; import { Stripe } from "stripe"; +const UNIT_AMOUNT_STD = 5; // 1ポイントあたりの価格(単位:円) + const stripeClient = new Stripe(process.env.STRIPE_SK!); export default async function handler( @@ -10,19 +12,23 @@ export default async function handler( ) { if (req.method !== "GET") res.status(405).send("Method not allowed"); const { amount, signature } = req.query; - if (!amount || !signature) { + if ( + !amount || + typeof amount !== "string" || + !signature || + typeof signature !== "string" + ) return res.status(400).send("Invalid request parameters"); - } // todo: 購入ポイント数の価格計算 - const unit_amount = Number(amount) * 1; + const unit_amount = Number(amount) * UNIT_AMOUNT_STD; // todo: signatureからウォレットアドレスを複合 // ここのmetadataがwebhookで飛んでくるので、それでどのアドレスにいくらポイント付与するかがわかる - const walletAddress = "0x1234567890"; + const walletAddress = "0x019281ce34F8b8739991713D5E09D0C290B53886"; const metadata = { walletAddress, - amount: Number(amount), + amount, // number型で送信してもwebhook経由で取得するとstring型に変換されてしまうのでstring型のままで送信 }; const session = await stripeClient.checkout.sessions.create({ diff --git a/frontend/src/pages/api/points/webhook.ts b/frontend/src/pages/api/points/webhook.ts new file mode 100644 index 0000000..9fcf18c --- /dev/null +++ b/frontend/src/pages/api/points/webhook.ts @@ -0,0 +1,110 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import { Stripe } from "stripe"; +import { NextApiRequest, NextApiResponse } from "next"; +import { Contract, ContractReceipt, providers, Wallet } from "ethers"; +import { + DefenderRelayProvider, + DefenderRelaySigner, +} from "@openzeppelin/defender-relay-client/lib/ethers"; +import MintPointABI from "../../../contracts/MintPoint.json"; +import { MintPoint } from "types/MintPoint"; + +const TOKEN_ID = 1; + +const stripeClient = new Stripe(process.env.STRIPE_SK!); + +const reqToBuffer = async (req: NextApiRequest) => { + const chunks = []; + for await (const chunk of req) { + chunks.push(typeof chunk === "string" ? Buffer.from(chunk) : chunk); + } + return Buffer.concat(chunks); +}; + +const getOzSigner = async () => { + if (process.env.DEV_RELAYER_PRIVATE_KEY) { + const developmentProvider = new providers.JsonRpcProvider( + process.env.NEXT_PUBLIC_PROVIDER_RPC! + ); + return new Wallet( + process.env.DEV_RELAYER_PRIVATE_KEY!, + developmentProvider + ); + } + const apiKeys = JSON.parse(process.env.OZ_RELAYER_API_KEYS!); + const apiSecrets = JSON.parse(process.env.OZ_RELAYER_API_SECRETS!); + + const randomIndex = Math.floor(Math.random() * apiKeys.length); + const apiKey = apiKeys[randomIndex]; + const apiSecret = apiSecrets[randomIndex]; + + const credentials = { + apiKey, + apiSecret, + }; + + const ozProvider = new DefenderRelayProvider(credentials); + const ozSigner = new DefenderRelaySigner(credentials, ozProvider, { + speed: "fast", + }); + + return ozSigner; +}; + +export const config = { + api: { + bodyParser: false, + }, +}; + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== "POST") res.status(405).send("Method not allowed"); + + let event: Stripe.Event; + try { + const bodyBuffer = await reqToBuffer(req); // Stripeの署名検証に使用するrequest bodyはBuffer型でないといけない + const sig = req.headers["stripe-signature"]; + event = stripeClient.webhooks.constructEvent( + bodyBuffer, + sig!, + process.env.STRIPE_WEBHOOK_MINT_POINT_SECRET! + ); + } catch (error) { + console.error(error); + return res.status(500).json(error); + } + console.log(`event: ${JSON.stringify(event)}`); + + switch (event.type) { + case "checkout.session.completed": + const metadata = event.data.object.metadata; + if (!metadata) return res.status(400).send("Metadata not found"); + const { walletAddress: to, amount } = metadata; + console.log(`walletAddress: ${to} | amount: ${amount}`); + + const ozSigner = await getOzSigner(); + const mintPoint: MintPoint = new Contract( + process.env.NEXT_PUBLIC_CONTRACT_MINT_POINT!, + MintPointABI.abi, + ozSigner + ) as any; + let txReceipt: ContractReceipt; + try { + const tx = await mintPoint.mint(to, TOKEN_ID, Number(amount)); + console.log(`txHash: ${tx.hash}`); + txReceipt = await tx.wait(); + console.log(`txReceipt: ${JSON.stringify(txReceipt)}`); + console.log("tx success"); + } catch (error) { + console.error(error); + return res.status(500).json({ walletAddress: to, amount, error }); + } + return res.status(200).json({ txReceipt }); + default: + console.log(`Unhandled event type ${event.type}`); + return res.status(200).json({ received: true }); + } +} diff --git a/frontend/types/MintPoint.d.ts b/frontend/types/MintPoint.d.ts new file mode 100644 index 0000000..3f8d492 --- /dev/null +++ b/frontend/types/MintPoint.d.ts @@ -0,0 +1,1211 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { + ethers, + EventFilter, + Signer, + BigNumber, + BigNumberish, + PopulatedTransaction, + BaseContract, + ContractTransaction, + Overrides, + CallOverrides, +} from "ethers"; +import { BytesLike } from "@ethersproject/bytes"; +import { Listener, Provider } from "@ethersproject/providers"; +import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi"; +import type { TypedEventFilter, TypedEvent, TypedListener } from "./common"; + +interface MintPointInterface extends ethers.utils.Interface { + functions: { + "DEFAULT_ADMIN_ROLE()": FunctionFragment; + "MINTER_ROLE()": FunctionFragment; + "balanceOf(address,uint256)": FunctionFragment; + "balanceOfBatch(address[],uint256[])": FunctionFragment; + "burn(uint256,uint256)": FunctionFragment; + "exists(uint256)": FunctionFragment; + "getRoleAdmin(bytes32)": FunctionFragment; + "getRoleMember(bytes32,uint256)": FunctionFragment; + "getRoleMemberCount(bytes32)": FunctionFragment; + "grantRole(bytes32,address)": FunctionFragment; + "hasRole(bytes32,address)": FunctionFragment; + "initialize()": FunctionFragment; + "isApprovedForAll(address,address)": FunctionFragment; + "mint(address,uint256,uint256)": FunctionFragment; + "name()": FunctionFragment; + "register()": FunctionFragment; + "renounceRole(bytes32,address)": FunctionFragment; + "revokeRole(bytes32,address)": FunctionFragment; + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": FunctionFragment; + "safeTransferFrom(address,address,uint256,uint256,bytes)": FunctionFragment; + "setApprovalForAll(address,bool)": FunctionFragment; + "supportsInterface(bytes4)": FunctionFragment; + "symbol()": FunctionFragment; + "tokenIds()": FunctionFragment; + "totalSupply(uint256)": FunctionFragment; + "uri(uint256)": FunctionFragment; + }; + + encodeFunctionData( + functionFragment: "DEFAULT_ADMIN_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "MINTER_ROLE", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "balanceOf", + values: [string, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "balanceOfBatch", + values: [string[], BigNumberish[]] + ): string; + encodeFunctionData( + functionFragment: "burn", + values: [BigNumberish, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "exists", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getRoleAdmin", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "getRoleMember", + values: [BytesLike, BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "getRoleMemberCount", + values: [BytesLike] + ): string; + encodeFunctionData( + functionFragment: "grantRole", + values: [BytesLike, string] + ): string; + encodeFunctionData( + functionFragment: "hasRole", + values: [BytesLike, string] + ): string; + encodeFunctionData( + functionFragment: "initialize", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "isApprovedForAll", + values: [string, string] + ): string; + encodeFunctionData( + functionFragment: "mint", + values: [string, BigNumberish, BigNumberish] + ): string; + encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "register", values?: undefined): string; + encodeFunctionData( + functionFragment: "renounceRole", + values: [BytesLike, string] + ): string; + encodeFunctionData( + functionFragment: "revokeRole", + values: [BytesLike, string] + ): string; + encodeFunctionData( + functionFragment: "safeBatchTransferFrom", + values: [string, string, BigNumberish[], BigNumberish[], BytesLike] + ): string; + encodeFunctionData( + functionFragment: "safeTransferFrom", + values: [string, string, BigNumberish, BigNumberish, BytesLike] + ): string; + encodeFunctionData( + functionFragment: "setApprovalForAll", + values: [string, boolean] + ): string; + encodeFunctionData( + functionFragment: "supportsInterface", + values: [BytesLike] + ): string; + encodeFunctionData(functionFragment: "symbol", values?: undefined): string; + encodeFunctionData(functionFragment: "tokenIds", values?: undefined): string; + encodeFunctionData( + functionFragment: "totalSupply", + values: [BigNumberish] + ): string; + encodeFunctionData(functionFragment: "uri", values: [BigNumberish]): string; + + decodeFunctionResult( + functionFragment: "DEFAULT_ADMIN_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "MINTER_ROLE", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "balanceOfBatch", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "exists", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "getRoleAdmin", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRoleMember", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "getRoleMemberCount", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "grantRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "hasRole", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "isApprovedForAll", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "register", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "renounceRole", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revokeRole", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "safeBatchTransferFrom", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "safeTransferFrom", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "setApprovalForAll", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "supportsInterface", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "tokenIds", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "totalSupply", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "uri", data: BytesLike): Result; + + events: { + "ApprovalForAll(address,address,bool)": EventFragment; + "Initialized(uint8)": EventFragment; + "Mint(address,uint256)": EventFragment; + "Register(address,uint256)": EventFragment; + "RoleAdminChanged(bytes32,bytes32,bytes32)": EventFragment; + "RoleGranted(bytes32,address,address)": EventFragment; + "RoleRevoked(bytes32,address,address)": EventFragment; + "Transfer(address,address,address,uint256[],uint256[],uint256)": EventFragment; + "TransferBatch(address,address,address,uint256[],uint256[])": EventFragment; + "TransferSingle(address,address,address,uint256,uint256)": EventFragment; + "URI(string,uint256)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Initialized"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Mint"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Register"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RoleAdminChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RoleGranted"): EventFragment; + getEvent(nameOrSignatureOrTopic: "RoleRevoked"): EventFragment; + getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TransferBatch"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TransferSingle"): EventFragment; + getEvent(nameOrSignatureOrTopic: "URI"): EventFragment; +} + +export type ApprovalForAllEvent = TypedEvent< + [string, string, boolean] & { + account: string; + operator: string; + approved: boolean; + } +>; + +export type InitializedEvent = TypedEvent<[number] & { version: number }>; + +export type MintEvent = TypedEvent< + [string, BigNumber] & { account: string; id: BigNumber } +>; + +export type RegisterEvent = TypedEvent< + [string, BigNumber] & { account: string; id: BigNumber } +>; + +export type RoleAdminChangedEvent = TypedEvent< + [string, string, string] & { + role: string; + previousAdminRole: string; + newAdminRole: string; + } +>; + +export type RoleGrantedEvent = TypedEvent< + [string, string, string] & { role: string; account: string; sender: string } +>; + +export type RoleRevokedEvent = TypedEvent< + [string, string, string] & { role: string; account: string; sender: string } +>; + +export type TransferEvent = TypedEvent< + [string, string, string, BigNumber[], BigNumber[], BigNumber] & { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + timestamp: BigNumber; + } +>; + +export type TransferBatchEvent = TypedEvent< + [string, string, string, BigNumber[], BigNumber[]] & { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + } +>; + +export type TransferSingleEvent = TypedEvent< + [string, string, string, BigNumber, BigNumber] & { + operator: string; + from: string; + to: string; + id: BigNumber; + value: BigNumber; + } +>; + +export type URIEvent = TypedEvent< + [string, BigNumber] & { value: string; id: BigNumber } +>; + +export class MintPoint extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + listeners, EventArgsObject>( + eventFilter?: TypedEventFilter + ): Array>; + off, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + on, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + once, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeListener, EventArgsObject>( + eventFilter: TypedEventFilter, + listener: TypedListener + ): this; + removeAllListeners, EventArgsObject>( + eventFilter: TypedEventFilter + ): this; + + listeners(eventName?: string): Array; + off(eventName: string, listener: Listener): this; + on(eventName: string, listener: Listener): this; + once(eventName: string, listener: Listener): this; + removeListener(eventName: string, listener: Listener): this; + removeAllListeners(eventName?: string): this; + + queryFilter, EventArgsObject>( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>>; + + interface: MintPointInterface; + + functions: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise<[string]>; + + MINTER_ROLE(overrides?: CallOverrides): Promise<[string]>; + + balanceOf( + account: string, + id: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + balanceOfBatch( + accounts: string[], + ids: BigNumberish[], + overrides?: CallOverrides + ): Promise<[BigNumber[]]>; + + burn( + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + exists(id: BigNumberish, overrides?: CallOverrides): Promise<[boolean]>; + + getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise<[string]>; + + getRoleMember( + role: BytesLike, + index: BigNumberish, + overrides?: CallOverrides + ): Promise<[string]>; + + getRoleMemberCount( + role: BytesLike, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + grantRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise<[boolean]>; + + initialize( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isApprovedForAll( + account: string, + operator: string, + overrides?: CallOverrides + ): Promise<[boolean]>; + + mint( + to: string, + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + name(overrides?: CallOverrides): Promise<[string]>; + + register( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + renounceRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + revokeRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeBatchTransferFrom( + from: string, + to: string, + ids: BigNumberish[], + amounts: BigNumberish[], + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeTransferFrom( + from: string, + to: string, + id: BigNumberish, + amount: BigNumberish, + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setApprovalForAll( + operator: string, + approved: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; + + symbol(overrides?: CallOverrides): Promise<[string]>; + + tokenIds(overrides?: CallOverrides): Promise<[BigNumber]>; + + totalSupply( + id: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber]>; + + uri(arg0: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + }; + + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + + MINTER_ROLE(overrides?: CallOverrides): Promise; + + balanceOf( + account: string, + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOfBatch( + accounts: string[], + ids: BigNumberish[], + overrides?: CallOverrides + ): Promise; + + burn( + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + exists(id: BigNumberish, overrides?: CallOverrides): Promise; + + getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; + + getRoleMember( + role: BytesLike, + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getRoleMemberCount( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + grantRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + initialize( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isApprovedForAll( + account: string, + operator: string, + overrides?: CallOverrides + ): Promise; + + mint( + to: string, + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + register( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + renounceRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + revokeRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeBatchTransferFrom( + from: string, + to: string, + ids: BigNumberish[], + amounts: BigNumberish[], + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeTransferFrom( + from: string, + to: string, + id: BigNumberish, + amount: BigNumberish, + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setApprovalForAll( + operator: string, + approved: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + tokenIds(overrides?: CallOverrides): Promise; + + totalSupply(id: BigNumberish, overrides?: CallOverrides): Promise; + + uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; + + callStatic: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + + MINTER_ROLE(overrides?: CallOverrides): Promise; + + balanceOf( + account: string, + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOfBatch( + accounts: string[], + ids: BigNumberish[], + overrides?: CallOverrides + ): Promise; + + burn( + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + + exists(id: BigNumberish, overrides?: CallOverrides): Promise; + + getRoleAdmin(role: BytesLike, overrides?: CallOverrides): Promise; + + getRoleMember( + role: BytesLike, + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getRoleMemberCount( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + grantRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + hasRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + initialize(overrides?: CallOverrides): Promise; + + isApprovedForAll( + account: string, + operator: string, + overrides?: CallOverrides + ): Promise; + + mint( + to: string, + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: CallOverrides + ): Promise; + + name(overrides?: CallOverrides): Promise; + + register(overrides?: CallOverrides): Promise; + + renounceRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + revokeRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + safeBatchTransferFrom( + from: string, + to: string, + ids: BigNumberish[], + amounts: BigNumberish[], + data: BytesLike, + overrides?: CallOverrides + ): Promise; + + safeTransferFrom( + from: string, + to: string, + id: BigNumberish, + amount: BigNumberish, + data: BytesLike, + overrides?: CallOverrides + ): Promise; + + setApprovalForAll( + operator: string, + approved: boolean, + overrides?: CallOverrides + ): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + tokenIds(overrides?: CallOverrides): Promise; + + totalSupply( + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; + }; + + filters: { + "ApprovalForAll(address,address,bool)"( + account?: string | null, + operator?: string | null, + approved?: null + ): TypedEventFilter< + [string, string, boolean], + { account: string; operator: string; approved: boolean } + >; + + ApprovalForAll( + account?: string | null, + operator?: string | null, + approved?: null + ): TypedEventFilter< + [string, string, boolean], + { account: string; operator: string; approved: boolean } + >; + + "Initialized(uint8)"( + version?: null + ): TypedEventFilter<[number], { version: number }>; + + Initialized( + version?: null + ): TypedEventFilter<[number], { version: number }>; + + "Mint(address,uint256)"( + account?: string | null, + id?: BigNumberish | null + ): TypedEventFilter< + [string, BigNumber], + { account: string; id: BigNumber } + >; + + Mint( + account?: string | null, + id?: BigNumberish | null + ): TypedEventFilter< + [string, BigNumber], + { account: string; id: BigNumber } + >; + + "Register(address,uint256)"( + account?: string | null, + id?: BigNumberish | null + ): TypedEventFilter< + [string, BigNumber], + { account: string; id: BigNumber } + >; + + Register( + account?: string | null, + id?: BigNumberish | null + ): TypedEventFilter< + [string, BigNumber], + { account: string; id: BigNumber } + >; + + "RoleAdminChanged(bytes32,bytes32,bytes32)"( + role?: BytesLike | null, + previousAdminRole?: BytesLike | null, + newAdminRole?: BytesLike | null + ): TypedEventFilter< + [string, string, string], + { role: string; previousAdminRole: string; newAdminRole: string } + >; + + RoleAdminChanged( + role?: BytesLike | null, + previousAdminRole?: BytesLike | null, + newAdminRole?: BytesLike | null + ): TypedEventFilter< + [string, string, string], + { role: string; previousAdminRole: string; newAdminRole: string } + >; + + "RoleGranted(bytes32,address,address)"( + role?: BytesLike | null, + account?: string | null, + sender?: string | null + ): TypedEventFilter< + [string, string, string], + { role: string; account: string; sender: string } + >; + + RoleGranted( + role?: BytesLike | null, + account?: string | null, + sender?: string | null + ): TypedEventFilter< + [string, string, string], + { role: string; account: string; sender: string } + >; + + "RoleRevoked(bytes32,address,address)"( + role?: BytesLike | null, + account?: string | null, + sender?: string | null + ): TypedEventFilter< + [string, string, string], + { role: string; account: string; sender: string } + >; + + RoleRevoked( + role?: BytesLike | null, + account?: string | null, + sender?: string | null + ): TypedEventFilter< + [string, string, string], + { role: string; account: string; sender: string } + >; + + "Transfer(address,address,address,uint256[],uint256[],uint256)"( + operator?: string | null, + from?: string | null, + to?: string | null, + ids?: null, + values?: null, + timestamp?: null + ): TypedEventFilter< + [string, string, string, BigNumber[], BigNumber[], BigNumber], + { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + timestamp: BigNumber; + } + >; + + Transfer( + operator?: string | null, + from?: string | null, + to?: string | null, + ids?: null, + values?: null, + timestamp?: null + ): TypedEventFilter< + [string, string, string, BigNumber[], BigNumber[], BigNumber], + { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + timestamp: BigNumber; + } + >; + + "TransferBatch(address,address,address,uint256[],uint256[])"( + operator?: string | null, + from?: string | null, + to?: string | null, + ids?: null, + values?: null + ): TypedEventFilter< + [string, string, string, BigNumber[], BigNumber[]], + { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + } + >; + + TransferBatch( + operator?: string | null, + from?: string | null, + to?: string | null, + ids?: null, + values?: null + ): TypedEventFilter< + [string, string, string, BigNumber[], BigNumber[]], + { + operator: string; + from: string; + to: string; + ids: BigNumber[]; + values: BigNumber[]; + } + >; + + "TransferSingle(address,address,address,uint256,uint256)"( + operator?: string | null, + from?: string | null, + to?: string | null, + id?: null, + value?: null + ): TypedEventFilter< + [string, string, string, BigNumber, BigNumber], + { + operator: string; + from: string; + to: string; + id: BigNumber; + value: BigNumber; + } + >; + + TransferSingle( + operator?: string | null, + from?: string | null, + to?: string | null, + id?: null, + value?: null + ): TypedEventFilter< + [string, string, string, BigNumber, BigNumber], + { + operator: string; + from: string; + to: string; + id: BigNumber; + value: BigNumber; + } + >; + + "URI(string,uint256)"( + value?: null, + id?: BigNumberish | null + ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; + + URI( + value?: null, + id?: BigNumberish | null + ): TypedEventFilter<[string, BigNumber], { value: string; id: BigNumber }>; + }; + + estimateGas: { + DEFAULT_ADMIN_ROLE(overrides?: CallOverrides): Promise; + + MINTER_ROLE(overrides?: CallOverrides): Promise; + + balanceOf( + account: string, + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOfBatch( + accounts: string[], + ids: BigNumberish[], + overrides?: CallOverrides + ): Promise; + + burn( + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + exists(id: BigNumberish, overrides?: CallOverrides): Promise; + + getRoleAdmin( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + getRoleMember( + role: BytesLike, + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getRoleMemberCount( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + grantRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + initialize( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isApprovedForAll( + account: string, + operator: string, + overrides?: CallOverrides + ): Promise; + + mint( + to: string, + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + register( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + renounceRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + revokeRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeBatchTransferFrom( + from: string, + to: string, + ids: BigNumberish[], + amounts: BigNumberish[], + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeTransferFrom( + from: string, + to: string, + id: BigNumberish, + amount: BigNumberish, + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setApprovalForAll( + operator: string, + approved: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + tokenIds(overrides?: CallOverrides): Promise; + + totalSupply( + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + uri(arg0: BigNumberish, overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + DEFAULT_ADMIN_ROLE( + overrides?: CallOverrides + ): Promise; + + MINTER_ROLE(overrides?: CallOverrides): Promise; + + balanceOf( + account: string, + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + balanceOfBatch( + accounts: string[], + ids: BigNumberish[], + overrides?: CallOverrides + ): Promise; + + burn( + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + exists( + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getRoleAdmin( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + getRoleMember( + role: BytesLike, + index: BigNumberish, + overrides?: CallOverrides + ): Promise; + + getRoleMemberCount( + role: BytesLike, + overrides?: CallOverrides + ): Promise; + + grantRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + hasRole( + role: BytesLike, + account: string, + overrides?: CallOverrides + ): Promise; + + initialize( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + isApprovedForAll( + account: string, + operator: string, + overrides?: CallOverrides + ): Promise; + + mint( + to: string, + tokenId: BigNumberish, + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + name(overrides?: CallOverrides): Promise; + + register( + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + renounceRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + revokeRole( + role: BytesLike, + account: string, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeBatchTransferFrom( + from: string, + to: string, + ids: BigNumberish[], + amounts: BigNumberish[], + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + safeTransferFrom( + from: string, + to: string, + id: BigNumberish, + amount: BigNumberish, + data: BytesLike, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setApprovalForAll( + operator: string, + approved: boolean, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + supportsInterface( + interfaceId: BytesLike, + overrides?: CallOverrides + ): Promise; + + symbol(overrides?: CallOverrides): Promise; + + tokenIds(overrides?: CallOverrides): Promise; + + totalSupply( + id: BigNumberish, + overrides?: CallOverrides + ): Promise; + + uri( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock index cacf9db..51562cd 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -4098,9 +4098,9 @@ camelcase@^5.0.0: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001332: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== + version "1.0.30001598" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001598.tgz#88e20ae1a1969d904dae97d538154a275893afef" + integrity sha512-j8mQRDziG94uoBfeFuqsJUNECW37DXpnvhcMJMdlH2u3MRkq1sAI0LJcXP1i/Py0KbSIC4UDj8YHPrTn5YsL+Q== chai@^4.3.4: version "4.4.1" @@ -4453,7 +4453,7 @@ data-view-buffer@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -data-view-byte-length@^1.0.0: +data-view-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== @@ -4753,20 +4753,21 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: unbox-primitive "^1.0.2" which-typed-array "^1.1.14" -es-abstract@^1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.0.tgz#a575e7bc0a570180c8ecd64a4de43f4e7ba0c767" - integrity sha512-vmuE7Uoevk2xkwu5Gwa7RfJk/ebVV6xRv7KuZNbUglmJHhWPMbLL20ztreVpBbdxBZijETx3Aml3NssX4SFMvQ== +es-abstract@^1.23.0, es-abstract@^1.23.1: + version "1.23.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.1.tgz#85edfef168cd1bf9d45be3c83192a3a4b24db2d0" + integrity sha512-r+YVn6hTqQb+P5kK0u3KeDqrmhHKm+OhU/Mw4jSL4eQtOxXmp75fXIUUb3sUqFZOlb/YtW5JRaIfEC3UyjYUZQ== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.0" + data-view-byte-length "^1.0.1" data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -4777,7 +4778,7 @@ es-abstract@^1.23.0: has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" @@ -4792,7 +4793,7 @@ es-abstract@^1.23.0: object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" @@ -4802,7 +4803,7 @@ es-abstract@^1.23.0: typed-array-byte-offset "^1.0.2" typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" + which-typed-array "^1.1.15" es-array-method-boxes-properly@^1.0.0: version "1.0.0" @@ -4841,6 +4842,13 @@ es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: iterator.prototype "^1.1.2" safe-array-concat "^1.1.2" +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -5898,7 +5906,7 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0, hasown@^2.0.1: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -7521,15 +7529,15 @@ real-require@^0.1.0: integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -7927,22 +7935,23 @@ string.prototype.matchall@^4.0.10: side-channel "^1.0.4" string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string.prototype.trimstart@^1.0.7: version "1.0.7" @@ -8751,7 +8760,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.14, which-typed-array@^1.1.2, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==