From 9d0acc2265bc19bbd3c5b6555ca538e678c7677f Mon Sep 17 00:00:00 2001 From: Michal Iskierko Date: Tue, 18 Jul 2023 10:33:45 +0200 Subject: [PATCH] feat(OwnerToken): Owner token and master token deployment Adding new smart contracts and generated go files. Deploy token owner function and master token address getter. Adding deployer and privilegesLevel columns to community_tokens table. Passing addressFrom to API calls. Issue #11250 --- .../{ => community-tokens}/assets/Assets.go | 0 .../collectibles/Collectibles.go} | 296 +-- .../contracts/BaseToken.sol} | 48 +- .../contracts/CollectibleV1.sol | 26 + .../contracts}/CommunityERC20.sol | 7 + .../contracts/MasterToken.sol | 22 + .../community-tokens/contracts/OwnerToken.sol | 45 + .../community-tokens/ownertoken/OwnerToken.go | 1579 +++++++++++++++++ images/encode.go | 5 + protocol/communities/manager.go | 9 +- protocol/communities/persistence.go | 28 +- protocol/communities/persistence_test.go | 11 + protocol/communities/token/community_token.go | 10 + protocol/messenger_communities.go | 4 + protocol/migrations/migrations.go | 745 ++++---- ...nity_tokens_deployer_and_priv_level.up.sql | 2 + services/collectibles/api.go | 153 +- services/collectibles/api_test.go | 18 +- services/collectibles/database_test.go | 10 +- services/ext/api.go | 4 + services/wallet/collectibles/manager.go | 2 +- transactions/pending.go | 1 + 22 files changed, 2296 insertions(+), 729 deletions(-) rename contracts/{ => community-tokens}/assets/Assets.go (100%) rename contracts/{collectibles/collectibles.go => community-tokens/collectibles/Collectibles.go} (61%) rename contracts/{collectibles/CollectibleV1.sol => community-tokens/contracts/BaseToken.sol} (78%) create mode 100644 contracts/community-tokens/contracts/CollectibleV1.sol rename contracts/{assets => community-tokens/contracts}/CommunityERC20.sol (87%) create mode 100644 contracts/community-tokens/contracts/MasterToken.sol create mode 100644 contracts/community-tokens/contracts/OwnerToken.sol create mode 100644 contracts/community-tokens/ownertoken/OwnerToken.go create mode 100644 protocol/migrations/sqlite/1689931300_add_community_tokens_deployer_and_priv_level.up.sql diff --git a/contracts/assets/Assets.go b/contracts/community-tokens/assets/Assets.go similarity index 100% rename from contracts/assets/Assets.go rename to contracts/community-tokens/assets/Assets.go diff --git a/contracts/collectibles/collectibles.go b/contracts/community-tokens/collectibles/Collectibles.go similarity index 61% rename from contracts/collectibles/collectibles.go rename to contracts/community-tokens/collectibles/Collectibles.go index 9f1eb2d0c..95766136d 100644 --- a/contracts/collectibles/collectibles.go +++ b/contracts/community-tokens/collectibles/Collectibles.go @@ -27,19 +27,19 @@ var ( ) // CollectiblesABI is the input ABI used to generate the binding from. -const CollectiblesABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_maxSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_remoteBurnable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_transferable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"mintTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"remoteBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBurnable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxSupply\",\"type\":\"uint256\"}],\"name\":\"setMaxSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" +const CollectiblesABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_maxSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_remoteBurnable\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_transferable\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_ownerToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_masterToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"masterToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"mintTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownerToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"remoteBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBurnable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxSupply\",\"type\":\"uint256\"}],\"name\":\"setMaxSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" // CollectiblesBin is the compiled bytecode used for deploying new contracts. -var CollectiblesBin = "0x60806040523480156200001157600080fd5b50604051620023bd380380620023bd8339810160408190526200003491620001dd565b858560006200004483826200032b565b5060016200005382826200032b565b505050620000706200006a620000ac60201b60201c565b620000b0565b600c849055600d805461ffff191684151561ff0019161761010084151502179055600e6200009f82826200032b565b50505050505050620003f7565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200012a57600080fd5b81516001600160401b038082111562000147576200014762000102565b604051601f8301601f19908116603f0116810190828211818310171562000172576200017262000102565b816040528381526020925086838588010111156200018f57600080fd5b600091505b83821015620001b3578582018301518183018401529082019062000194565b600093810190920192909252949350505050565b80518015158114620001d857600080fd5b919050565b60008060008060008060c08789031215620001f757600080fd5b86516001600160401b03808211156200020f57600080fd5b6200021d8a838b0162000118565b975060208901519150808211156200023457600080fd5b620002428a838b0162000118565b9650604089015195506200025960608a01620001c7565b94506200026960808a01620001c7565b935060a08901519150808211156200028057600080fd5b506200028f89828a0162000118565b9150509295509295509295565b600181811c90821680620002b157607f821691505b602082108103620002d257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032657600081815260208120601f850160051c81016020861015620003015750805b601f850160051c820191505b8181101562000322578281556001016200030d565b5050505b505050565b81516001600160401b0381111562000347576200034762000102565b6200035f816200035884546200029c565b84620002d8565b602080601f8311600181146200039757600084156200037e5750858301515b600019600386901b1c1916600185901b17855562000322565b600085815260208120601f198616915b82811015620003c857888601518255948401946001909101908401620003a7565b5085821015620003e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fb680620004076000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063c87b56dd11610097578063d547cfb711610071578063d547cfb714610369578063d5abeb0114610371578063e985e9c51461037a578063f2fde38b146103b657600080fd5b8063c87b56dd1461033b578063ce7c8b491461034e578063cf721b151461036157600080fd5b806392ff0d31116100d357806392ff0d31146102fb57806395d89b411461030d578063a22cb46514610315578063b88d4fde1461032857600080fd5b806370a08231146102cf578063715018a6146102e25780638da5cb5b146102ea57600080fd5b806323b872dd116101665780634f6ccce7116101405780634f6ccce7146102835780634fb95e02146102965780636352211e146102a95780636f8b44b0146102bc57600080fd5b806323b872dd1461024a5780632f745c591461025d57806342842e0e1461027057600080fd5b806301ffc9a7146101ae57806306fdde03146101d6578063081812fc146101eb578063095ea7b314610216578063101639f51461022b57806318160ddd14610238575b600080fd5b6101c16101bc366004611965565b6103c9565b60405190151581526020015b60405180910390f35b6101de6103da565b6040516101cd91906119d2565b6101fe6101f93660046119e5565b61046c565b6040516001600160a01b0390911681526020016101cd565b610229610224366004611a1a565b610493565b005b600d546101c19060ff1681565b6008545b6040519081526020016101cd565b610229610258366004611a44565b6105ad565b61023c61026b366004611a1a565b6105de565b61022961027e366004611a44565b610674565b61023c6102913660046119e5565b61068f565b6102296102a4366004611aeb565b610722565b6101fe6102b73660046119e5565b6107b6565b6102296102ca3660046119e5565b610816565b61023c6102dd366004611b81565b610880565b610229610906565b600a546001600160a01b03166101fe565b600d546101c190610100900460ff1681565b6101de61091a565b610229610323366004611b9c565b610929565b610229610336366004611bd8565b610934565b6101de6103493660046119e5565b61096c565b61022961035c366004611c98565b6109d3565b61023c610a97565b6101de610aa7565b61023c600c5481565b6101c1610388366004611d25565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102296103c4366004611b81565b610b35565b60006103d482610bae565b92915050565b6060600080546103e990611d58565b80601f016020809104026020016040519081016040528092919081815260200182805461041590611d58565b80156104625780601f1061043757610100808354040283529160200191610462565b820191906000526020600020905b81548152906001019060200180831161044557829003601f168201915b5050505050905090565b600061047782610bd3565b506000908152600460205260409020546001600160a01b031690565b600061049e826107b6565b9050806001600160a01b0316836001600160a01b0316036105105760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061052c575061052c8133610388565b61059e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610507565b6105a88383610c32565b505050565b6105b73382610ca0565b6105d35760405162461bcd60e51b815260040161050790611d92565b6105a8838383610d1f565b60006105e983610880565b821061064b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610507565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6105a883838360405180602001604052806000815250610934565b600061069a60085490565b82106106fd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610507565b6008828154811061071057610710611ddf565b90600052602060002001549050919050565b61072a610e90565b600d5460ff166107725760405162461bcd60e51b81526020600482015260136024820152724e4f545f52454d4f54455f4255524e41424c4560681b6044820152606401610507565b60005b81518110156107b2576107a082828151811061079357610793611ddf565b6020026020010151610eea565b806107aa81611e0b565b915050610775565b5050565b6000818152600260205260408120546001600160a01b0316806103d45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610507565b61081e610e90565b60085481101561087b5760405162461bcd60e51b815260206004820152602260248201527f4d41585f535550504c595f4c4f5745525f5448414e5f544f54414c5f535550506044820152614c5960f01b6064820152608401610507565b600c55565b60006001600160a01b0382166108ea5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610507565b506001600160a01b031660009081526003602052604090205490565b61090e610e90565b6109186000610f8d565b565b6060600180546103e990611d58565b6107b2338383610fdf565b61093e3383610ca0565b61095a5760405162461bcd60e51b815260040161050790611d92565b610966848484846110ad565b50505050565b606061097782610bd3565b60006109816110e0565b905060008151116109a157604051806020016040528060008152506109cc565b806109ab846110ef565b6040516020016109bc929190611e24565b6040516020818303038152906040525b9392505050565b6109db610e90565b600c548151600b546109ed9190611e53565b1115610a305760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610507565b60005b81518110156107b257610a77828281518110610a5157610a51611ddf565b6020026020010151610a62600b5490565b60405180602001604052806000815250611182565b610a85600b80546001019055565b80610a8f81611e0b565b915050610a33565b6000610aa2600b5490565b905090565b600e8054610ab490611d58565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090611d58565b8015610b2d5780601f10610b0257610100808354040283529160200191610b2d565b820191906000526020600020905b815481529060010190602001808311610b1057829003601f168201915b505050505081565b610b3d610e90565b6001600160a01b038116610ba25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610507565b610bab81610f8d565b50565b60006001600160e01b0319821663780e9d6360e01b14806103d457506103d4826111b5565b6000818152600260205260409020546001600160a01b0316610bab5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610507565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610c67826107b6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610cac836107b6565b9050806001600160a01b0316846001600160a01b03161480610cf357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610d175750836001600160a01b0316610d0c8461046c565b6001600160a01b0316145b949350505050565b826001600160a01b0316610d32826107b6565b6001600160a01b031614610d585760405162461bcd60e51b815260040161050790611e66565b6001600160a01b038216610dba5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610507565b610dc78383836001611205565b826001600160a01b0316610dda826107b6565b6001600160a01b031614610e005760405162461bcd60e51b815260040161050790611e66565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546001600160a01b031633146109185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610507565b6000610ef5826107b6565b9050610f05816000846001611205565b610f0e826107b6565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036110405760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610507565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6110b8848484610d1f565b6110c484848484611285565b6109665760405162461bcd60e51b815260040161050790611eab565b6060600e80546103e990611d58565b606060006110fc83611386565b600101905060008167ffffffffffffffff81111561111c5761111c611a80565b6040519080825280601f01601f191660200182016040528015611146576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461115057509392505050565b61118c838361145e565b6111996000848484611285565b6105a85760405162461bcd60e51b815260040161050790611eab565b60006001600160e01b031982166380ac58cd60e01b14806111e657506001600160e01b03198216635b5e139f60e01b145b806103d457506301ffc9a760e01b6001600160e01b03198316146103d4565b6001600160a01b0384161580159061122557506001600160a01b03831615155b80156112395750600d54610100900460ff16155b156112795760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b6044820152606401610507565b610966848484846115f7565b60006001600160a01b0384163b1561137b57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906112c9903390899088908890600401611efd565b6020604051808303816000875af1925050508015611304575060408051601f3d908101601f1916820190925261130191810190611f3a565b60015b611361573d808015611332576040519150601f19603f3d011682016040523d82523d6000602084013e611337565b606091505b5080516000036113595760405162461bcd60e51b815260040161050790611eab565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610d17565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106113c55772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106113f1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061140f57662386f26fc10000830492506010015b6305f5e1008310611427576305f5e100830492506008015b612710831061143b57612710830492506004015b6064831061144d576064830492506002015b600a83106103d45760010192915050565b6001600160a01b0382166114b45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610507565b6000818152600260205260409020546001600160a01b0316156115195760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610507565b611527600083836001611205565b6000818152600260205260409020546001600160a01b03161561158c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610507565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b61160384848484611737565b60018111156116725760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610507565b816001600160a01b0385166116ce576116c981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6116f1565b836001600160a01b0316856001600160a01b0316146116f1576116f185826117bf565b6001600160a01b03841661170d576117088161185c565b611730565b846001600160a01b0316846001600160a01b03161461173057611730848261190b565b5050505050565b6001811115610966576001600160a01b0384161561177d576001600160a01b03841660009081526003602052604081208054839290611777908490611f57565b90915550505b6001600160a01b03831615610966576001600160a01b038316600090815260036020526040812080548392906117b4908490611e53565b909155505050505050565b600060016117cc84610880565b6117d69190611f57565b600083815260076020526040902054909150808214611829576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061186e90600190611f57565b6000838152600960205260408120546008805493945090928490811061189657611896611ddf565b9060005260206000200154905080600883815481106118b7576118b7611ddf565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806118ef576118ef611f6a565b6001900381819060005260206000200160009055905550505050565b600061191683610880565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610bab57600080fd5b60006020828403121561197757600080fd5b81356109cc8161194f565b60005b8381101561199d578181015183820152602001611985565b50506000910152565b600081518084526119be816020860160208601611982565b601f01601f19169290920160200192915050565b6020815260006109cc60208301846119a6565b6000602082840312156119f757600080fd5b5035919050565b80356001600160a01b0381168114611a1557600080fd5b919050565b60008060408385031215611a2d57600080fd5b611a36836119fe565b946020939093013593505050565b600080600060608486031215611a5957600080fd5b611a62846119fe565b9250611a70602085016119fe565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611abf57611abf611a80565b604052919050565b600067ffffffffffffffff821115611ae157611ae1611a80565b5060051b60200190565b60006020808385031215611afe57600080fd5b823567ffffffffffffffff811115611b1557600080fd5b8301601f81018513611b2657600080fd5b8035611b39611b3482611ac7565b611a96565b81815260059190911b82018301908381019087831115611b5857600080fd5b928401925b82841015611b7657833582529284019290840190611b5d565b979650505050505050565b600060208284031215611b9357600080fd5b6109cc826119fe565b60008060408385031215611baf57600080fd5b611bb8836119fe565b915060208301358015158114611bcd57600080fd5b809150509250929050565b60008060008060808587031215611bee57600080fd5b611bf7856119fe565b93506020611c068187016119fe565b935060408601359250606086013567ffffffffffffffff80821115611c2a57600080fd5b818801915088601f830112611c3e57600080fd5b813581811115611c5057611c50611a80565b611c62601f8201601f19168501611a96565b91508082528984828501011115611c7857600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006020808385031215611cab57600080fd5b823567ffffffffffffffff811115611cc257600080fd5b8301601f81018513611cd357600080fd5b8035611ce1611b3482611ac7565b81815260059190911b82018301908381019087831115611d0057600080fd5b928401925b82841015611b7657611d16846119fe565b82529284019290840190611d05565b60008060408385031215611d3857600080fd5b611d41836119fe565b9150611d4f602084016119fe565b90509250929050565b600181811c90821680611d6c57607f821691505b602082108103611d8c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611e1d57611e1d611df5565b5060010190565b60008351611e36818460208801611982565b835190830190611e4a818360208801611982565b01949350505050565b808201808211156103d4576103d4611df5565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f30908301846119a6565b9695505050505050565b600060208284031215611f4c57600080fd5b81516109cc8161194f565b818103818111156103d4576103d4611df5565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220c6ab3b6644629d79218fbba3a25de8f33b2e2556023ce5d005848d7052e933b164736f6c63430008110033" +var CollectiblesBin = "0x60806040523480156200001157600080fd5b50604051620026a1380380620026a183398101604081905262000034916200023b565b8787878787878787878760006200004c8382620003b0565b5060016200005b8282620003b0565b505050600b869055600d805461ffff60a01b1916600160a01b8715150260ff60a81b191617600160a81b86151502179055600e6200009a8482620003b0565b50600c80546001600160a01b038085166001600160a01b03199283168117909355600d805491851691909216179055151580620000e15750600d546001600160a01b031615155b620001325760405162461bcd60e51b815260206004820152601f60248201527f6f776e6572206f72206d617374657220746f6b656e7320726571756972656400604482015260640160405180910390fd5b505050505050505050505050505050506200047c565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017057600080fd5b81516001600160401b03808211156200018d576200018d62000148565b604051601f8301601f19908116603f01168101908282118183101715620001b857620001b862000148565b81604052838152602092508683858801011115620001d557600080fd5b600091505b83821015620001f95785820183015181830184015290820190620001da565b600093810190920192909252949350505050565b805180151581146200021e57600080fd5b919050565b80516001600160a01b03811681146200021e57600080fd5b600080600080600080600080610100898b0312156200025957600080fd5b88516001600160401b03808211156200027157600080fd5b6200027f8c838d016200015e565b995060208b01519150808211156200029657600080fd5b620002a48c838d016200015e565b985060408b01519750620002bb60608c016200020d565b9650620002cb60808c016200020d565b955060a08b0151915080821115620002e257600080fd5b50620002f18b828c016200015e565b9350506200030260c08a0162000223565b91506200031260e08a0162000223565b90509295985092959890939650565b600181811c908216806200033657607f821691505b6020821081036200035757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003ab57600081815260208120601f850160051c81016020861015620003865750805b601f850160051c820191505b81811015620003a75782815560010162000392565b5050505b505050565b81516001600160401b03811115620003cc57620003cc62000148565b620003e481620003dd845462000321565b846200035d565b602080601f8311600181146200041c5760008415620004035750858301515b600019600386901b1c1916600185901b178555620003a7565b600085815260208120601f198616915b828110156200044d578886015182559484019460019091019084016200042c565b50858210156200046c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612215806200048c6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806365371883116100de578063b88d4fde11610097578063cf721b1511610071578063cf721b151461035c578063d547cfb714610364578063d5abeb011461036c578063e985e9c51461037557600080fd5b8063b88d4fde14610323578063c87b56dd14610336578063ce7c8b491461034957600080fd5b806365371883146102bb5780636f8b44b0146102ce57806370a08231146102e157806392ff0d31146102f457806395d89b4114610308578063a22cb4651461031057600080fd5b806323b872dd1161014b57806342842e0e1161012557806342842e0e1461026f5780634f6ccce7146102825780634fb95e02146102955780636352211e146102a857600080fd5b806323b872dd146102365780632bb5e31e146102495780632f745c591461025c57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb578063101639f51461021057806318160ddd14610224575b600080fd5b6101a66101a1366004611b83565b6103b1565b60405190151581526020015b60405180910390f35b6101c36103c2565b6040516101b29190611bf0565b6101e36101de366004611c03565b610454565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611c38565b61047b565b005b600d546101a690600160a01b900460ff1681565b6008545b6040519081526020016101b2565b61020e610244366004611c62565b610595565b600d546101e3906001600160a01b031681565b61022861026a366004611c38565b6105c6565b61020e61027d366004611c62565b61065c565b610228610290366004611c03565b610677565b61020e6102a3366004611d09565b61070a565b6101e36102b6366004611c03565b6108c3565b600c546101e3906001600160a01b031681565b61020e6102dc366004611c03565b610923565b6102286102ef366004611d9f565b610aab565b600d546101a690600160a81b900460ff1681565b6101c3610b31565b61020e61031e366004611dba565b610b40565b61020e610331366004611df6565b610b4b565b6101c3610344366004611c03565b610b83565b61020e610357366004611eb6565b610bea565b610228610d71565b6101c3610d81565b610228600b5481565b6101a6610383366004611f43565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006103bc82610e0f565b92915050565b6060600080546103d190611f76565b80601f01602080910402602001604051908101604052809291908181526020018280546103fd90611f76565b801561044a5780601f1061041f5761010080835404028352916020019161044a565b820191906000526020600020905b81548152906001019060200180831161042d57829003601f168201915b5050505050905090565b600061045f82610e34565b506000908152600460205260409020546001600160a01b031690565b6000610486826108c3565b9050806001600160a01b0316836001600160a01b0316036104f85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061051457506105148133610383565b6105865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104ef565b6105908383610e93565b505050565b61059f3382610f01565b6105bb5760405162461bcd60e51b81526004016104ef90611fb0565b610590838383610f80565b60006105d183610aab565b82106106335760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104ef565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61059083838360405180602001604052806000815250610b4b565b600061068260085490565b82106106e55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104ef565b600882815481106106f8576106f8611ffd565b90600052602060002001549050919050565b600c546001600160a01b0316158061078c5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190612013565b115b806108145750600d546001600160a01b031615806108145750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108129190612013565b115b6108305760405162461bcd60e51b81526004016104ef9061202c565b600d54600160a01b900460ff1661087f5760405162461bcd60e51b81526020600482015260136024820152724e4f545f52454d4f54455f4255524e41424c4560681b60448201526064016104ef565b60005b81518110156108bf576108ad8282815181106108a0576108a0611ffd565b60200260200101516110f1565b806108b78161206a565b915050610882565b5050565b6000818152600260205260408120546001600160a01b0316806103bc5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104ef565b600c546001600160a01b031615806109a55750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190612013565b115b80610a2d5750600d546001600160a01b03161580610a2d5750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190612013565b115b610a495760405162461bcd60e51b81526004016104ef9061202c565b600854811015610aa65760405162461bcd60e51b815260206004820152602260248201527f4d41585f535550504c595f4c4f5745525f5448414e5f544f54414c5f535550506044820152614c5960f01b60648201526084016104ef565b600b55565b60006001600160a01b038216610b155760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104ef565b506001600160a01b031660009081526003602052604090205490565b6060600180546103d190611f76565b6108bf338383611194565b610b553383610f01565b610b715760405162461bcd60e51b81526004016104ef90611fb0565b610b7d84848484611262565b50505050565b6060610b8e82610e34565b6000610b98611295565b90506000815111610bb85760405180602001604052806000815250610be3565b80610bc2846112a4565b604051602001610bd3929190612083565b6040516020818303038152906040525b9392505050565b600c546001600160a01b03161580610c6c5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190612013565b115b80610cf45750600d546001600160a01b03161580610cf45750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190612013565b115b610d105760405162461bcd60e51b81526004016104ef9061202c565b600b548151600a54610d2291906120b2565b1115610d655760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b60448201526064016104ef565b610d6e81611337565b50565b6000610d7c600a5490565b905090565b600e8054610d8e90611f76565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90611f76565b8015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b505050505081565b60006001600160e01b0319821663780e9d6360e01b14806103bc57506103bc8261139e565b6000818152600260205260409020546001600160a01b0316610d6e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104ef565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ec8826108c3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610f0d836108c3565b9050806001600160a01b0316846001600160a01b03161480610f5457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610f785750836001600160a01b0316610f6d84610454565b6001600160a01b0316145b949350505050565b826001600160a01b0316610f93826108c3565b6001600160a01b031614610fb95760405162461bcd60e51b81526004016104ef906120c5565b6001600160a01b03821661101b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ef565b61102883838360016113ee565b826001600160a01b031661103b826108c3565b6001600160a01b0316146110615760405162461bcd60e51b81526004016104ef906120c5565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006110fc826108c3565b905061110c8160008460016113ee565b611115826108c3565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316036111f55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104ef565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61126d848484610f80565b61127984848484611470565b610b7d5760405162461bcd60e51b81526004016104ef9061210a565b6060600e80546103d190611f76565b606060006112b183611571565b600101905060008167ffffffffffffffff8111156112d1576112d1611c9e565b6040519080825280601f01601f1916602001820160405280156112fb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461130557509392505050565b60005b81518110156108bf5761137e82828151811061135857611358611ffd565b6020026020010151611369600a5490565b60405180602001604052806000815250611649565b61138c600a80546001019055565b806113968161206a565b91505061133a565b60006001600160e01b031982166380ac58cd60e01b14806113cf57506001600160e01b03198216635b5e139f60e01b145b806103bc57506301ffc9a760e01b6001600160e01b03198316146103bc565b6001600160a01b0384161580159061140e57506001600160a01b03831615155b80156114245750600d54600160a81b900460ff16155b156114645760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b60448201526064016104ef565b610b7d8484848461167c565b60006001600160a01b0384163b1561156657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114b490339089908890889060040161215c565b6020604051808303816000875af19250505080156114ef575060408051601f3d908101601f191682019092526114ec91810190612199565b60015b61154c573d80801561151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b5080516000036115445760405162461bcd60e51b81526004016104ef9061210a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f78565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106115b05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106115dc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115fa57662386f26fc10000830492506010015b6305f5e1008310611612576305f5e100830492506008015b612710831061162657612710830492506004015b60648310611638576064830492506002015b600a83106103bc5760010192915050565b61165383836117bc565b6116606000848484611470565b6105905760405162461bcd60e51b81526004016104ef9061210a565b61168884848484611955565b60018111156116f75760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016104ef565b816001600160a01b0385166117535761174e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611776565b836001600160a01b0316856001600160a01b0316146117765761177685826119dd565b6001600160a01b0384166117925761178d81611a7a565b6117b5565b846001600160a01b0316846001600160a01b0316146117b5576117b58482611b29565b5050505050565b6001600160a01b0382166118125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ef565b6000818152600260205260409020546001600160a01b0316156118775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104ef565b6118856000838360016113ee565b6000818152600260205260409020546001600160a01b0316156118ea5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104ef565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115610b7d576001600160a01b0384161561199b576001600160a01b038416600090815260036020526040812080548392906119959084906121b6565b90915550505b6001600160a01b03831615610b7d576001600160a01b038316600090815260036020526040812080548392906119d29084906120b2565b909155505050505050565b600060016119ea84610aab565b6119f491906121b6565b600083815260076020526040902054909150808214611a47576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611a8c906001906121b6565b60008381526009602052604081205460088054939450909284908110611ab457611ab4611ffd565b906000526020600020015490508060088381548110611ad557611ad5611ffd565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611b0d57611b0d6121c9565b6001900381819060005260206000200160009055905550505050565b6000611b3483610aab565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610d6e57600080fd5b600060208284031215611b9557600080fd5b8135610be381611b6d565b60005b83811015611bbb578181015183820152602001611ba3565b50506000910152565b60008151808452611bdc816020860160208601611ba0565b601f01601f19169290920160200192915050565b602081526000610be36020830184611bc4565b600060208284031215611c1557600080fd5b5035919050565b80356001600160a01b0381168114611c3357600080fd5b919050565b60008060408385031215611c4b57600080fd5b611c5483611c1c565b946020939093013593505050565b600080600060608486031215611c7757600080fd5b611c8084611c1c565b9250611c8e60208501611c1c565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cdd57611cdd611c9e565b604052919050565b600067ffffffffffffffff821115611cff57611cff611c9e565b5060051b60200190565b60006020808385031215611d1c57600080fd5b823567ffffffffffffffff811115611d3357600080fd5b8301601f81018513611d4457600080fd5b8035611d57611d5282611ce5565b611cb4565b81815260059190911b82018301908381019087831115611d7657600080fd5b928401925b82841015611d9457833582529284019290840190611d7b565b979650505050505050565b600060208284031215611db157600080fd5b610be382611c1c565b60008060408385031215611dcd57600080fd5b611dd683611c1c565b915060208301358015158114611deb57600080fd5b809150509250929050565b60008060008060808587031215611e0c57600080fd5b611e1585611c1c565b93506020611e24818701611c1c565b935060408601359250606086013567ffffffffffffffff80821115611e4857600080fd5b818801915088601f830112611e5c57600080fd5b813581811115611e6e57611e6e611c9e565b611e80601f8201601f19168501611cb4565b91508082528984828501011115611e9657600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006020808385031215611ec957600080fd5b823567ffffffffffffffff811115611ee057600080fd5b8301601f81018513611ef157600080fd5b8035611eff611d5282611ce5565b81815260059190911b82018301908381019087831115611f1e57600080fd5b928401925b82841015611d9457611f3484611c1c565b82529284019290840190611f23565b60008060408385031215611f5657600080fd5b611f5f83611c1c565b9150611f6d60208401611c1c565b90509250929050565b600181811c90821680611f8a57607f821691505b602082108103611faa57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561202557600080fd5b5051919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001820161207c5761207c612054565b5060010190565b60008351612095818460208801611ba0565b8351908301906120a9818360208801611ba0565b01949350505050565b808201808211156103bc576103bc612054565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061218f90830184611bc4565b9695505050505050565b6000602082840312156121ab57600080fd5b8151610be381611b6d565b818103818111156103bc576103bc612054565b634e487b7160e01b600052603160045260246000fdfea264697066735822122086a4861cc4cd7011cfd13ba461d6fc5087ae7a6d4798fad1c6352203bccf0a4d64736f6c63430008110033" // DeployCollectibles deploys a new Ethereum contract, binding an instance of Collectibles to it. -func DeployCollectibles(auth *bind.TransactOpts, backend bind.ContractBackend, _name string, _symbol string, _maxSupply *big.Int, _remoteBurnable bool, _transferable bool, _baseTokenURI string) (common.Address, *types.Transaction, *Collectibles, error) { +func DeployCollectibles(auth *bind.TransactOpts, backend bind.ContractBackend, _name string, _symbol string, _maxSupply *big.Int, _remoteBurnable bool, _transferable bool, _baseTokenURI string, _ownerToken common.Address, _masterToken common.Address) (common.Address, *types.Transaction, *Collectibles, error) { parsed, err := abi.JSON(strings.NewReader(CollectiblesABI)) if err != nil { return common.Address{}, nil, nil, err } - address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(CollectiblesBin), backend, _name, _symbol, _maxSupply, _remoteBurnable, _transferable, _baseTokenURI) + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(CollectiblesBin), backend, _name, _symbol, _maxSupply, _remoteBurnable, _transferable, _baseTokenURI, _ownerToken, _masterToken) if err != nil { return common.Address{}, nil, nil, err } @@ -312,6 +312,37 @@ func (_Collectibles *CollectiblesCallerSession) IsApprovedForAll(owner common.Ad return _Collectibles.Contract.IsApprovedForAll(&_Collectibles.CallOpts, owner, operator) } +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_Collectibles *CollectiblesCaller) MasterToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Collectibles.contract.Call(opts, &out, "masterToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_Collectibles *CollectiblesSession) MasterToken() (common.Address, error) { + return _Collectibles.Contract.MasterToken(&_Collectibles.CallOpts) +} + +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_Collectibles *CollectiblesCallerSession) MasterToken() (common.Address, error) { + return _Collectibles.Contract.MasterToken(&_Collectibles.CallOpts) +} + // MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. // // Solidity: function maxSupply() view returns(uint256) @@ -405,37 +436,6 @@ func (_Collectibles *CollectiblesCallerSession) Name() (string, error) { return _Collectibles.Contract.Name(&_Collectibles.CallOpts) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Collectibles *CollectiblesCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Collectibles.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Collectibles *CollectiblesSession) Owner() (common.Address, error) { - return _Collectibles.Contract.Owner(&_Collectibles.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_Collectibles *CollectiblesCallerSession) Owner() (common.Address, error) { - return _Collectibles.Contract.Owner(&_Collectibles.CallOpts) -} - // OwnerOf is a free data retrieval call binding the contract method 0x6352211e. // // Solidity: function ownerOf(uint256 tokenId) view returns(address) @@ -467,6 +467,37 @@ func (_Collectibles *CollectiblesCallerSession) OwnerOf(tokenId *big.Int) (commo return _Collectibles.Contract.OwnerOf(&_Collectibles.CallOpts, tokenId) } +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_Collectibles *CollectiblesCaller) OwnerToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Collectibles.contract.Call(opts, &out, "ownerToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_Collectibles *CollectiblesSession) OwnerToken() (common.Address, error) { + return _Collectibles.Contract.OwnerToken(&_Collectibles.CallOpts) +} + +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_Collectibles *CollectiblesCallerSession) OwnerToken() (common.Address, error) { + return _Collectibles.Contract.OwnerToken(&_Collectibles.CallOpts) +} + // RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5. // // Solidity: function remoteBurnable() view returns(bool) @@ -778,27 +809,6 @@ func (_Collectibles *CollectiblesTransactorSession) RemoteBurn(tokenIds []*big.I return _Collectibles.Contract.RemoteBurn(&_Collectibles.TransactOpts, tokenIds) } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Collectibles *CollectiblesTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Collectibles.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Collectibles *CollectiblesSession) RenounceOwnership() (*types.Transaction, error) { - return _Collectibles.Contract.RenounceOwnership(&_Collectibles.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_Collectibles *CollectiblesTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _Collectibles.Contract.RenounceOwnership(&_Collectibles.TransactOpts) -} - // SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. // // Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() @@ -904,27 +914,6 @@ func (_Collectibles *CollectiblesTransactorSession) TransferFrom(from common.Add return _Collectibles.Contract.TransferFrom(&_Collectibles.TransactOpts, from, to, tokenId) } -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Collectibles *CollectiblesTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _Collectibles.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Collectibles *CollectiblesSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _Collectibles.Contract.TransferOwnership(&_Collectibles.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_Collectibles *CollectiblesTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _Collectibles.Contract.TransferOwnership(&_Collectibles.TransactOpts, newOwner) -} - // CollectiblesApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the Collectibles contract. type CollectiblesApprovalIterator struct { Event *CollectiblesApproval // Event containing the contract specifics and raw log @@ -1241,159 +1230,6 @@ func (_Collectibles *CollectiblesFilterer) ParseApprovalForAll(log types.Log) (* return event, nil } -// CollectiblesOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Collectibles contract. -type CollectiblesOwnershipTransferredIterator struct { - Event *CollectiblesOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *CollectiblesOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(CollectiblesOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(CollectiblesOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *CollectiblesOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *CollectiblesOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// CollectiblesOwnershipTransferred represents a OwnershipTransferred event raised by the Collectibles contract. -type CollectiblesOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Collectibles *CollectiblesFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*CollectiblesOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Collectibles.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &CollectiblesOwnershipTransferredIterator{contract: _Collectibles.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Collectibles *CollectiblesFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CollectiblesOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Collectibles.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(CollectiblesOwnershipTransferred) - if err := _Collectibles.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_Collectibles *CollectiblesFilterer) ParseOwnershipTransferred(log types.Log) (*CollectiblesOwnershipTransferred, error) { - event := new(CollectiblesOwnershipTransferred) - if err := _Collectibles.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // CollectiblesTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the Collectibles contract. type CollectiblesTransferIterator struct { Event *CollectiblesTransfer // Event containing the contract specifics and raw log diff --git a/contracts/collectibles/CollectibleV1.sol b/contracts/community-tokens/contracts/BaseToken.sol similarity index 78% rename from contracts/collectibles/CollectibleV1.sol rename to contracts/community-tokens/contracts/BaseToken.sol index 7db823801..63b4b2352 100644 --- a/contracts/collectibles/CollectibleV1.sol +++ b/contracts/community-tokens/contracts/BaseToken.sol @@ -3,14 +3,14 @@ pragma solidity ^0.8.17; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; +import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; -contract CollectibleV1 is +abstract contract BaseToken is Context, - ERC721Enumerable, - Ownable + ERC721Enumerable { using Counters for Counters.Counter; @@ -23,6 +23,9 @@ contract CollectibleV1 is */ uint256 public maxSupply; + address public ownerToken; + address public masterToken; + /** * If set to true, the contract owner can burn any token. */ @@ -41,19 +44,35 @@ contract CollectibleV1 is uint256 _maxSupply, bool _remoteBurnable, bool _transferable, - string memory _baseTokenURI + string memory _baseTokenURI, + address _ownerToken, + address _masterToken ) ERC721(_name, _symbol) { maxSupply = _maxSupply; remoteBurnable = _remoteBurnable; transferable = _transferable; baseTokenURI = _baseTokenURI; + ownerToken = _ownerToken; + masterToken = _masterToken; + + require(ownerToken != address(0x0) || masterToken != address(0x0), "owner or master tokens required"); + } + + modifier onlyOwner() { + require( + (ownerToken == address(0) || IERC721(ownerToken).balanceOf(msg.sender) > 0) || + (masterToken == address(0) || IERC721(masterToken).balanceOf(msg.sender) > 0), + "Not authorized" + ); + + _; } // Events // External functions - function setMaxSupply(uint256 newMaxSupply) external onlyOwner { + function setMaxSupply(uint256 newMaxSupply) virtual external onlyOwner { require(newMaxSupply >= totalSupply(), "MAX_SUPPLY_LOWER_THAN_TOTAL_SUPPLY"); maxSupply = newMaxSupply; } @@ -64,15 +83,9 @@ contract CollectibleV1 is * URI autogenerated based on the base URI passed at construction. * */ - function mintTo(address[] memory addresses) external onlyOwner { - // We cannot just use totalSupply() to create the new tokenId because tokens - // can be burned so we use a separate counter. + function mintTo(address[] memory addresses) public onlyOwner { require(_tokenIdTracker.current() + addresses.length <= maxSupply, "MAX_SUPPLY_REACHED"); - - for (uint256 i = 0; i < addresses.length; i++) { - _safeMint(addresses[i], _tokenIdTracker.current(), ""); - _tokenIdTracker.increment(); - } + _mintTo(addresses); } // Public functions @@ -116,6 +129,15 @@ contract CollectibleV1 is return baseTokenURI; } + function _mintTo(address[] memory addresses) internal { + // We cannot just use totalSupply() to create the new tokenId because tokens + // can be burned so we use a separate counter. + for (uint256 i = 0; i < addresses.length; i++) { + _safeMint(addresses[i], _tokenIdTracker.current(), ""); + _tokenIdTracker.increment(); + } + } + /** * @notice * @dev diff --git a/contracts/community-tokens/contracts/CollectibleV1.sol b/contracts/community-tokens/contracts/CollectibleV1.sol new file mode 100644 index 000000000..d18f815b3 --- /dev/null +++ b/contracts/community-tokens/contracts/CollectibleV1.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Mozilla Public License 2.0 +pragma solidity ^0.8.17; + +import "./BaseToken.sol"; + +contract CollectibleV1 is BaseToken { + constructor( + string memory _name, + string memory _symbol, + uint256 _maxSupply, + bool _remoteBurnable, + bool _transferable, + string memory _baseTokenURI, + address _ownerToken, + address _masterToken + ) BaseToken( + _name, + _symbol, + _maxSupply, + _remoteBurnable, + _transferable, + _baseTokenURI, + _ownerToken, + _masterToken) { + } +} diff --git a/contracts/assets/CommunityERC20.sol b/contracts/community-tokens/contracts/CommunityERC20.sol similarity index 87% rename from contracts/assets/CommunityERC20.sol rename to contracts/community-tokens/contracts/CommunityERC20.sol index f1b4984da..fcfdbdafd 100644 --- a/contracts/assets/CommunityERC20.sol +++ b/contracts/community-tokens/contracts/CommunityERC20.sol @@ -15,12 +15,16 @@ contract CommunityERC20 is */ uint256 public maxSupply; + uint8 private customDecimals; + constructor( string memory _name, string memory _symbol, + uint8 _decimals, uint256 _maxSupply ) ERC20(_name, _symbol) { maxSupply = _maxSupply; + customDecimals = _decimals; } // Events @@ -48,6 +52,9 @@ contract CommunityERC20 is } // Public functions + function decimals() public view virtual override returns (uint8) { + return customDecimals; + } // Internal functions diff --git a/contracts/community-tokens/contracts/MasterToken.sol b/contracts/community-tokens/contracts/MasterToken.sol new file mode 100644 index 000000000..30a932677 --- /dev/null +++ b/contracts/community-tokens/contracts/MasterToken.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: Mozilla Public License 2.0 +pragma solidity ^0.8.17; + +import "./BaseToken.sol"; + +contract MasterToken is BaseToken { + constructor( + string memory _name, + string memory _symbol, + string memory _baseTokenURI, + address _ownerToken + ) BaseToken( + _name, + _symbol, + type(uint256).max, + true, + false, + _baseTokenURI, + _ownerToken, + address(0x0)) { + } +} diff --git a/contracts/community-tokens/contracts/OwnerToken.sol b/contracts/community-tokens/contracts/OwnerToken.sol new file mode 100644 index 000000000..75c753bb2 --- /dev/null +++ b/contracts/community-tokens/contracts/OwnerToken.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: Mozilla Public License 2.0 +pragma solidity ^0.8.17; + +import "./BaseToken.sol"; +import "./MasterToken.sol"; + +contract OwnerToken is BaseToken { + event MasterTokenCreated(address masterToken); + + bytes public signerPublicKey; + + constructor( + string memory _name, + string memory _symbol, + string memory _baseTokenURI, + string memory _masterName, + string memory _masterSymbol, + string memory _masterBaseTokenURI, + bytes memory _signerPublicKey + ) BaseToken( + _name, + _symbol, + 1, + false, + true, + _baseTokenURI, + address(this), + address(this)) + { + signerPublicKey = _signerPublicKey; + MasterToken masterToken = new MasterToken(_masterName, _masterSymbol, _masterBaseTokenURI, address(this)); + emit MasterTokenCreated(address(masterToken)); + address[] memory addresses = new address[](1); + addresses[0] = msg.sender; + _mintTo(addresses); + } + + function setMaxSupply(uint256 _newMaxSupply) override external onlyOwner { + revert("max supply locked"); + } + + function setSignerPublicKey(bytes memory _newSignerPublicKey) external onlyOwner { + signerPublicKey = _newSignerPublicKey; + } +} diff --git a/contracts/community-tokens/ownertoken/OwnerToken.go b/contracts/community-tokens/ownertoken/OwnerToken.go new file mode 100644 index 000000000..eee02f00b --- /dev/null +++ b/contracts/community-tokens/ownertoken/OwnerToken.go @@ -0,0 +1,1579 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ownertoken + +import ( + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// OwnerTokenABI is the input ABI used to generate the binding from. +const OwnerTokenABI = "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_masterName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_masterSymbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_masterBaseTokenURI\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"_signerPublicKey\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"masterToken\",\"type\":\"address\"}],\"name\":\"MasterTokenCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"masterToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"mintTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ownerToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"remoteBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBurnable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxSupply\",\"type\":\"uint256\"}],\"name\":\"setMaxSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_newSignerPublicKey\",\"type\":\"bytes\"}],\"name\":\"setSignerPublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signerPublicKey\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"tokenOfOwnerByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"transferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]" + +// OwnerTokenBin is the compiled bytecode used for deploying new contracts. +var OwnerTokenBin = "0x60806040523480156200001157600080fd5b5060405162005b6938038062005b69833981016040819052620000349162000bfb565b868660016000818930808787866200004d838262000db9565b5060016200005c828262000db9565b505050600b869055600d805461ffff60a01b1916600160a01b8715150260ff60a81b191617600160a81b86151502179055600e6200009b848262000db9565b50600c80546001600160a01b038085166001600160a01b03199283168117909355600d805491851691909216179055151580620000e25750600d546001600160a01b031615155b620001345760405162461bcd60e51b815260206004820152601f60248201527f6f776e6572206f72206d617374657220746f6b656e732072657175697265640060448201526064015b60405180910390fd5b505050505050505080600f90816200014d919062000db9565b50600084848430604051620001629062000b20565b62000171949392919062000eb3565b604051809103906000f0801580156200018e573d6000803e3d6000fd5b506040516001600160a01b03821681529091507f02a0dab88b41e2a6fa5a9b4d40c16209315d6158c6a42f30879c8df1871326019060200160405180910390a160408051600180825281830190925260009160208083019080368337019050509050338160008151811062000207576200020762000f0c565b6001600160a01b03909216602092830291909101909101526200022a8162000239565b50505050505050505062001004565b60005b8151811015620002bf57620002938282815181106200025f576200025f62000f0c565b60200260200101516200027e600a620002c360201b62000f791760201c565b604080516020810190915260008152620002c7565b620002aa600a6200033f60201b62000f7d1760201c565b80620002b68162000f38565b9150506200023c565b5050565b5490565b620002d3838362000348565b620002e26000848484620004e9565b6200033a5760405162461bcd60e51b8152602060048201526032602482015260008051602062005b4983398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016200012b565b505050565b80546001019055565b6001600160a01b038216620003a05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016200012b565b6000818152600260205260409020546001600160a01b031615620004075760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200012b565b6200041760008383600162000645565b6000818152600260205260409020546001600160a01b0316156200047e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016200012b565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006200050a846001600160a01b0316620006de60201b62000f861760201c565b156200063957604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906200054490339089908890889060040162000f54565b6020604051808303816000875af192505050801562000582575060408051601f3d908101601f191682019092526200057f9181019062000f89565b60015b6200061e573d808015620005b3576040519150601f19603f3d011682016040523d82523d6000602084013e620005b8565b606091505b508051600003620006165760405162461bcd60e51b8152602060048201526032602482015260008051602062005b4983398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016200012b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506200063d565b5060015b949350505050565b6001600160a01b038416158015906200066657506001600160a01b03831615155b80156200067d5750600d54600160a81b900460ff16155b15620006bf5760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b60448201526064016200012b565b620006d884848484620006ed60201b62000f951760201c565b50505050565b6001600160a01b03163b151590565b62000706848484846200085160201b620010d51760201c565b60018111156200077f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f72746564000000000000000000000060648201526084016200012b565b816001600160a01b038516620007de57620007d881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b62000804565b836001600160a01b0316856001600160a01b0316146200080457620008048582620008e0565b6001600160a01b03841662000824576200081e816200098d565b6200084a565b846001600160a01b0316846001600160a01b0316146200084a576200084a848262000a47565b5050505050565b6001811115620006d8576001600160a01b038416156200089b576001600160a01b038416600090815260036020526040812080548392906200089590849062000fbc565b90915550505b6001600160a01b03831615620006d8576001600160a01b03831660009081526003602052604081208054839290620008d590849062000fd8565b909155505050505050565b60006001620008fa8462000a9860201b62000b641760201c565b62000906919062000fbc565b6000838152600760205260409020549091508082146200095a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090620009a19060019062000fbc565b60008381526009602052604081205460088054939450909284908110620009cc57620009cc62000f0c565b906000526020600020015490508060088381548110620009f057620009f062000f0c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548062000a2b5762000a2b62000fee565b6001900381819060005260206000200160009055905550505050565b600062000a5f8362000a9860201b62000b641760201c565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160a01b03821662000b045760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016200012b565b506001600160a01b031660009081526003602052604090205490565b61263f806200350a83390190565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000b6157818101518382015260200162000b47565b50506000910152565b600082601f83011262000b7c57600080fd5b81516001600160401b038082111562000b995762000b9962000b2e565b604051601f8301601f19908116603f0116810190828211818310171562000bc45762000bc462000b2e565b8160405283815286602085880101111562000bde57600080fd5b62000bf184602083016020890162000b44565b9695505050505050565b600080600080600080600060e0888a03121562000c1757600080fd5b87516001600160401b038082111562000c2f57600080fd5b62000c3d8b838c0162000b6a565b985060208a015191508082111562000c5457600080fd5b62000c628b838c0162000b6a565b975060408a015191508082111562000c7957600080fd5b62000c878b838c0162000b6a565b965060608a015191508082111562000c9e57600080fd5b62000cac8b838c0162000b6a565b955060808a015191508082111562000cc357600080fd5b62000cd18b838c0162000b6a565b945060a08a015191508082111562000ce857600080fd5b62000cf68b838c0162000b6a565b935060c08a015191508082111562000d0d57600080fd5b5062000d1c8a828b0162000b6a565b91505092959891949750929550565b600181811c9082168062000d4057607f821691505b60208210810362000d6157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033a57600081815260208120601f850160051c8101602086101562000d905750805b601f850160051c820191505b8181101562000db15782815560010162000d9c565b505050505050565b81516001600160401b0381111562000dd55762000dd562000b2e565b62000ded8162000de6845462000d2b565b8462000d67565b602080601f83116001811462000e25576000841562000e0c5750858301515b600019600386901b1c1916600185901b17855562000db1565b600085815260208120601f198616915b8281101562000e565788860151825594840194600190910190840162000e35565b508582101562000e755787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000815180845262000e9f81602086016020860162000b44565b601f01601f19169290920160200192915050565b60808152600062000ec8608083018762000e85565b828103602084015262000edc818762000e85565b9050828103604084015262000ef2818662000e85565b91505060018060a01b038316606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162000f4d5762000f4d62000f22565b5060010190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009062000bf19083018462000e85565b60006020828403121562000f9c57600080fd5b81516001600160e01b03198116811462000fb557600080fd5b9392505050565b8181038181111562000fd25762000fd262000f22565b92915050565b8082018082111562000fd25762000fd262000f22565b634e487b7160e01b600052603160045260246000fd5b6124f680620010146000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806365371883116100f9578063b88d4fde11610097578063cf721b1511610071578063cf721b15146103ad578063d547cfb7146103b5578063d5abeb01146103bd578063e985e9c5146103c657600080fd5b8063b88d4fde14610374578063c87b56dd14610387578063ce7c8b491461039a57600080fd5b806392ff0d31116100d357806392ff0d31146103325780639404c91a1461034657806395d89b4114610359578063a22cb4651461036157600080fd5b806365371883146102f95780636f8b44b01461030c57806370a082311461031f57600080fd5b80632bb5e31e116101665780634f6ccce7116101405780634f6ccce7146102b85780634fb95e02146102cb578063549a95ea146102de5780636352211e146102e657600080fd5b80632bb5e31e1461027f5780632f745c591461029257806342842e0e146102a557600080fd5b8063095ea7b3116101a2578063095ea7b314610231578063101639f51461024657806318160ddd1461025a57806323b872dd1461026c57600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d7366004611d09565b610402565b60405190151581526020015b60405180910390f35b6101f9610413565b6040516101e89190611d76565b610219610214366004611d89565b6104a5565b6040516001600160a01b0390911681526020016101e8565b61024461023f366004611dbe565b6104cc565b005b600d546101dc90600160a01b900460ff1681565b6008545b6040519081526020016101e8565b61024461027a366004611de8565b6105e6565b600d54610219906001600160a01b031681565b61025e6102a0366004611dbe565b610617565b6102446102b3366004611de8565b6106ad565b61025e6102c6366004611d89565b6106c8565b6102446102d9366004611e8f565b61075b565b6101f9610914565b6102196102f4366004611d89565b6109a2565b600c54610219906001600160a01b031681565b61024461031a366004611d89565b610a02565b61025e61032d366004611f25565b610b64565b600d546101dc90600160a81b900460ff1681565b610244610354366004611fb0565b610bea565b6101f9610d1c565b61024461036f366004611fe5565b610d2b565b610244610382366004612021565b610d36565b6101f9610395366004611d89565b610d6e565b6102446103a8366004612089565b610dd5565b61025e610f5c565b6101f9610f6c565b61025e600b5481565b6101dc6103d4366004612116565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061040d8261115d565b92915050565b60606000805461042290612149565b80601f016020809104026020016040519081016040528092919081815260200182805461044e90612149565b801561049b5780601f106104705761010080835404028352916020019161049b565b820191906000526020600020905b81548152906001019060200180831161047e57829003601f168201915b5050505050905090565b60006104b082611182565b506000908152600460205260409020546001600160a01b031690565b60006104d7826109a2565b9050806001600160a01b0316836001600160a01b0316036105495760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610565575061056581336103d4565b6105d75760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610540565b6105e183836111e1565b505050565b6105f0338261124f565b61060c5760405162461bcd60e51b815260040161054090612183565b6105e18383836112ce565b600061062283610b64565b82106106845760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610540565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6105e183838360405180602001604052806000815250610d36565b60006106d360085490565b82106107365760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610540565b60088281548110610749576107496121d0565b90600052602060002001549050919050565b600c546001600160a01b031615806107dd5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156107b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107db91906121e6565b115b806108655750600d546001600160a01b031615806108655750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561083f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086391906121e6565b115b6108815760405162461bcd60e51b8152600401610540906121ff565b600d54600160a01b900460ff166108d05760405162461bcd60e51b81526020600482015260136024820152724e4f545f52454d4f54455f4255524e41424c4560681b6044820152606401610540565b60005b8151811015610910576108fe8282815181106108f1576108f16121d0565b602002602001015161143f565b806109088161223d565b9150506108d3565b5050565b600f805461092190612149565b80601f016020809104026020016040519081016040528092919081815260200182805461094d90612149565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b505050505081565b6000818152600260205260408120546001600160a01b03168061040d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610540565b600c546001600160a01b03161580610a845750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8291906121e6565b115b80610b0c5750600d546001600160a01b03161580610b0c5750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a91906121e6565b115b610b285760405162461bcd60e51b8152600401610540906121ff565b60405162461bcd60e51b81526020600482015260116024820152701b585e081cdd5c1c1b1e481b1bd8dad959607a1b6044820152606401610540565b60006001600160a01b038216610bce5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610540565b506001600160a01b031660009081526003602052604090205490565b600c546001600160a01b03161580610c6c5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a91906121e6565b115b80610cf45750600d546001600160a01b03161580610cf45750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf291906121e6565b115b610d105760405162461bcd60e51b8152600401610540906121ff565b600f61091082826122a4565b60606001805461042290612149565b6109103383836114e2565b610d40338361124f565b610d5c5760405162461bcd60e51b815260040161054090612183565b610d68848484846115b0565b50505050565b6060610d7982611182565b6000610d836115e3565b90506000815111610da35760405180602001604052806000815250610dce565b80610dad846115f2565b604051602001610dbe929190612364565b6040516020818303038152906040525b9392505050565b600c546001600160a01b03161580610e575750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5591906121e6565b115b80610edf5750600d546001600160a01b03161580610edf5750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edd91906121e6565b115b610efb5760405162461bcd60e51b8152600401610540906121ff565b600b548151600a54610f0d9190612393565b1115610f505760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b6044820152606401610540565b610f5981611685565b50565b6000610f67600a5490565b905090565b600e805461092190612149565b5490565b80546001019055565b6001600160a01b03163b151590565b610fa1848484846110d5565b60018111156110105760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610540565b816001600160a01b03851661106c5761106781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61108f565b836001600160a01b0316856001600160a01b03161461108f5761108f85826116ec565b6001600160a01b0384166110ab576110a681611789565b6110ce565b846001600160a01b0316846001600160a01b0316146110ce576110ce8482611838565b5050505050565b6001811115610d68576001600160a01b0384161561111b576001600160a01b038416600090815260036020526040812080548392906111159084906123a6565b90915550505b6001600160a01b03831615610d68576001600160a01b03831660009081526003602052604081208054839290611152908490612393565b909155505050505050565b60006001600160e01b0319821663780e9d6360e01b148061040d575061040d8261187c565b6000818152600260205260409020546001600160a01b0316610f595760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610540565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611216826109a2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061125b836109a2565b9050806001600160a01b0316846001600160a01b031614806112a257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806112c65750836001600160a01b03166112bb846104a5565b6001600160a01b0316145b949350505050565b826001600160a01b03166112e1826109a2565b6001600160a01b0316146113075760405162461bcd60e51b8152600401610540906123b9565b6001600160a01b0382166113695760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610540565b61137683838360016118cc565b826001600160a01b0316611389826109a2565b6001600160a01b0316146113af5760405162461bcd60e51b8152600401610540906123b9565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061144a826109a2565b905061145a8160008460016118cc565b611463826109a2565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316036115435760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610540565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6115bb8484846112ce565b6115c78484848461194e565b610d685760405162461bcd60e51b8152600401610540906123fe565b6060600e805461042290612149565b606060006115ff83611a4f565b600101905060008167ffffffffffffffff81111561161f5761161f611e24565b6040519080825280601f01601f191660200182016040528015611649576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461165357509392505050565b60005b8151811015610910576116cc8282815181106116a6576116a66121d0565b60200260200101516116b7600a5490565b60405180602001604052806000815250611b27565b6116da600a80546001019055565b806116e48161223d565b915050611688565b600060016116f984610b64565b61170391906123a6565b600083815260076020526040902054909150808214611756576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061179b906001906123a6565b600083815260096020526040812054600880549394509092849081106117c3576117c36121d0565b9060005260206000200154905080600883815481106117e4576117e46121d0565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061181c5761181c612450565b6001900381819060005260206000200160009055905550505050565b600061184383610b64565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b60006001600160e01b031982166380ac58cd60e01b14806118ad57506001600160e01b03198216635b5e139f60e01b145b8061040d57506301ffc9a760e01b6001600160e01b031983161461040d565b6001600160a01b038416158015906118ec57506001600160a01b03831615155b80156119025750600d54600160a81b900460ff16155b156119425760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b6044820152606401610540565b610d6884848484610f95565b60006001600160a01b0384163b15611a4457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611992903390899088908890600401612466565b6020604051808303816000875af19250505080156119cd575060408051601f3d908101601f191682019092526119ca918101906124a3565b60015b611a2a573d8080156119fb576040519150601f19603f3d011682016040523d82523d6000602084013e611a00565b606091505b508051600003611a225760405162461bcd60e51b8152600401610540906123fe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112c6565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611a8e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611aba576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ad857662386f26fc10000830492506010015b6305f5e1008310611af0576305f5e100830492506008015b6127108310611b0457612710830492506004015b60648310611b16576064830492506002015b600a831061040d5760010192915050565b611b318383611b5a565b611b3e600084848461194e565b6105e15760405162461bcd60e51b8152600401610540906123fe565b6001600160a01b038216611bb05760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610540565b6000818152600260205260409020546001600160a01b031615611c155760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610540565b611c236000838360016118cc565b6000818152600260205260409020546001600160a01b031615611c885760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610540565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114610f5957600080fd5b600060208284031215611d1b57600080fd5b8135610dce81611cf3565b60005b83811015611d41578181015183820152602001611d29565b50506000910152565b60008151808452611d62816020860160208601611d26565b601f01601f19169290920160200192915050565b602081526000610dce6020830184611d4a565b600060208284031215611d9b57600080fd5b5035919050565b80356001600160a01b0381168114611db957600080fd5b919050565b60008060408385031215611dd157600080fd5b611dda83611da2565b946020939093013593505050565b600080600060608486031215611dfd57600080fd5b611e0684611da2565b9250611e1460208501611da2565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611e6357611e63611e24565b604052919050565b600067ffffffffffffffff821115611e8557611e85611e24565b5060051b60200190565b60006020808385031215611ea257600080fd5b823567ffffffffffffffff811115611eb957600080fd5b8301601f81018513611eca57600080fd5b8035611edd611ed882611e6b565b611e3a565b81815260059190911b82018301908381019087831115611efc57600080fd5b928401925b82841015611f1a57833582529284019290840190611f01565b979650505050505050565b600060208284031215611f3757600080fd5b610dce82611da2565b600082601f830112611f5157600080fd5b813567ffffffffffffffff811115611f6b57611f6b611e24565b611f7e601f8201601f1916602001611e3a565b818152846020838601011115611f9357600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215611fc257600080fd5b813567ffffffffffffffff811115611fd957600080fd5b6112c684828501611f40565b60008060408385031215611ff857600080fd5b61200183611da2565b91506020830135801515811461201657600080fd5b809150509250929050565b6000806000806080858703121561203757600080fd5b61204085611da2565b935061204e60208601611da2565b925060408501359150606085013567ffffffffffffffff81111561207157600080fd5b61207d87828801611f40565b91505092959194509250565b6000602080838503121561209c57600080fd5b823567ffffffffffffffff8111156120b357600080fd5b8301601f810185136120c457600080fd5b80356120d2611ed882611e6b565b81815260059190911b820183019083810190878311156120f157600080fd5b928401925b82841015611f1a5761210784611da2565b825292840192908401906120f6565b6000806040838503121561212957600080fd5b61213283611da2565b915061214060208401611da2565b90509250929050565b600181811c9082168061215d57607f821691505b60208210810361217d57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156121f857600080fd5b5051919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001820161224f5761224f612227565b5060010190565b601f8211156105e157600081815260208120601f850160051c8101602086101561227d5750805b601f850160051c820191505b8181101561229c57828155600101612289565b505050505050565b815167ffffffffffffffff8111156122be576122be611e24565b6122d2816122cc8454612149565b84612256565b602080601f83116001811461230757600084156122ef5750858301515b600019600386901b1c1916600185901b17855561229c565b600085815260208120601f198616915b8281101561233657888601518255948401946001909101908401612317565b50858210156123545787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008351612376818460208801611d26565b83519083019061238a818360208801611d26565b01949350505050565b8082018082111561040d5761040d612227565b8181038181111561040d5761040d612227565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061249990830184611d4a565b9695505050505050565b6000602082840312156124b557600080fd5b8151610dce81611cf356fea26469706673582212205d36cc9d9c3ba8e2c7aeea69cbb43f31d98de9c2bedfefb95670e64d5b45319364736f6c6343000811003360806040523480156200001157600080fd5b506040516200263f3803806200263f83398101604081905262000034916200020c565b8383600019600160008686828787826200004f83826200034e565b5060016200005e82826200034e565b505050600b869055600d805461ffff60a01b1916600160a01b8715150260ff60a81b191617600160a81b86151502179055600e6200009d84826200034e565b50600c80546001600160a01b038085166001600160a01b03199283168117909355600d805491851691909216179055151580620000e45750600d546001600160a01b031615155b620001355760405162461bcd60e51b815260206004820152601f60248201527f6f776e6572206f72206d617374657220746f6b656e7320726571756972656400604482015260640160405180910390fd5b5050505050505050505050506200041a565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200016f57600080fd5b81516001600160401b03808211156200018c576200018c62000147565b604051601f8301601f19908116603f01168101908282118183101715620001b757620001b762000147565b81604052838152602092508683858801011115620001d457600080fd5b600091505b83821015620001f85785820183015181830184015290820190620001d9565b600093810190920192909252949350505050565b600080600080608085870312156200022357600080fd5b84516001600160401b03808211156200023b57600080fd5b62000249888389016200015d565b955060208701519150808211156200026057600080fd5b6200026e888389016200015d565b945060408701519150808211156200028557600080fd5b5062000294878288016200015d565b606087015190935090506001600160a01b0381168114620002b457600080fd5b939692955090935050565b600181811c90821680620002d457607f821691505b602082108103620002f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034957600081815260208120601f850160051c81016020861015620003245750805b601f850160051c820191505b81811015620003455782815560010162000330565b5050505b505050565b81516001600160401b038111156200036a576200036a62000147565b62000382816200037b8454620002bf565b84620002fb565b602080601f831160018114620003ba5760008415620003a15750858301515b600019600386901b1c1916600185901b17855562000345565b600085815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612215806200042a6000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806365371883116100de578063b88d4fde11610097578063cf721b1511610071578063cf721b151461035c578063d547cfb714610364578063d5abeb011461036c578063e985e9c51461037557600080fd5b8063b88d4fde14610323578063c87b56dd14610336578063ce7c8b491461034957600080fd5b806365371883146102bb5780636f8b44b0146102ce57806370a08231146102e157806392ff0d31146102f457806395d89b4114610308578063a22cb4651461031057600080fd5b806323b872dd1161014b57806342842e0e1161012557806342842e0e1461026f5780634f6ccce7146102825780634fb95e02146102955780636352211e146102a857600080fd5b806323b872dd146102365780632bb5e31e146102495780632f745c591461025c57600080fd5b806301ffc9a71461019357806306fdde03146101bb578063081812fc146101d0578063095ea7b3146101fb578063101639f51461021057806318160ddd14610224575b600080fd5b6101a66101a1366004611b83565b6103b1565b60405190151581526020015b60405180910390f35b6101c36103c2565b6040516101b29190611bf0565b6101e36101de366004611c03565b610454565b6040516001600160a01b0390911681526020016101b2565b61020e610209366004611c38565b61047b565b005b600d546101a690600160a01b900460ff1681565b6008545b6040519081526020016101b2565b61020e610244366004611c62565b610595565b600d546101e3906001600160a01b031681565b61022861026a366004611c38565b6105c6565b61020e61027d366004611c62565b61065c565b610228610290366004611c03565b610677565b61020e6102a3366004611d09565b61070a565b6101e36102b6366004611c03565b6108c3565b600c546101e3906001600160a01b031681565b61020e6102dc366004611c03565b610923565b6102286102ef366004611d9f565b610aab565b600d546101a690600160a81b900460ff1681565b6101c3610b31565b61020e61031e366004611dba565b610b40565b61020e610331366004611df6565b610b4b565b6101c3610344366004611c03565b610b83565b61020e610357366004611eb6565b610bea565b610228610d71565b6101c3610d81565b610228600b5481565b6101a6610383366004611f43565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006103bc82610e0f565b92915050565b6060600080546103d190611f76565b80601f01602080910402602001604051908101604052809291908181526020018280546103fd90611f76565b801561044a5780601f1061041f5761010080835404028352916020019161044a565b820191906000526020600020905b81548152906001019060200180831161042d57829003601f168201915b5050505050905090565b600061045f82610e34565b506000908152600460205260409020546001600160a01b031690565b6000610486826108c3565b9050806001600160a01b0316836001600160a01b0316036104f85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061051457506105148133610383565b6105865760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104ef565b6105908383610e93565b505050565b61059f3382610f01565b6105bb5760405162461bcd60e51b81526004016104ef90611fb0565b610590838383610f80565b60006105d183610aab565b82106106335760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016104ef565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61059083838360405180602001604052806000815250610b4b565b600061068260085490565b82106106e55760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016104ef565b600882815481106106f8576106f8611ffd565b90600052602060002001549050919050565b600c546001600160a01b0316158061078c5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078a9190612013565b115b806108145750600d546001600160a01b031615806108145750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156107ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108129190612013565b115b6108305760405162461bcd60e51b81526004016104ef9061202c565b600d54600160a01b900460ff1661087f5760405162461bcd60e51b81526020600482015260136024820152724e4f545f52454d4f54455f4255524e41424c4560681b60448201526064016104ef565b60005b81518110156108bf576108ad8282815181106108a0576108a0611ffd565b60200260200101516110f1565b806108b78161206a565b915050610882565b5050565b6000818152600260205260408120546001600160a01b0316806103bc5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104ef565b600c546001600160a01b031615806109a55750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190612013565b115b80610a2d5750600d546001600160a01b03161580610a2d5750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2b9190612013565b115b610a495760405162461bcd60e51b81526004016104ef9061202c565b600854811015610aa65760405162461bcd60e51b815260206004820152602260248201527f4d41585f535550504c595f4c4f5745525f5448414e5f544f54414c5f535550506044820152614c5960f01b60648201526084016104ef565b600b55565b60006001600160a01b038216610b155760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104ef565b506001600160a01b031660009081526003602052604090205490565b6060600180546103d190611f76565b6108bf338383611194565b610b553383610f01565b610b715760405162461bcd60e51b81526004016104ef90611fb0565b610b7d84848484611262565b50505050565b6060610b8e82610e34565b6000610b98611295565b90506000815111610bb85760405180602001604052806000815250610be3565b80610bc2846112a4565b604051602001610bd3929190612083565b6040516020818303038152906040525b9392505050565b600c546001600160a01b03161580610c6c5750600c546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6a9190612013565b115b80610cf45750600d546001600160a01b03161580610cf45750600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf29190612013565b115b610d105760405162461bcd60e51b81526004016104ef9061202c565b600b548151600a54610d2291906120b2565b1115610d655760405162461bcd60e51b815260206004820152601260248201527113505617d4d55414131657d4915050d2115160721b60448201526064016104ef565b610d6e81611337565b50565b6000610d7c600a5490565b905090565b600e8054610d8e90611f76565b80601f0160208091040260200160405190810160405280929190818152602001828054610dba90611f76565b8015610e075780601f10610ddc57610100808354040283529160200191610e07565b820191906000526020600020905b815481529060010190602001808311610dea57829003601f168201915b505050505081565b60006001600160e01b0319821663780e9d6360e01b14806103bc57506103bc8261139e565b6000818152600260205260409020546001600160a01b0316610d6e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104ef565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610ec8826108c3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610f0d836108c3565b9050806001600160a01b0316846001600160a01b03161480610f5457506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610f785750836001600160a01b0316610f6d84610454565b6001600160a01b0316145b949350505050565b826001600160a01b0316610f93826108c3565b6001600160a01b031614610fb95760405162461bcd60e51b81526004016104ef906120c5565b6001600160a01b03821661101b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104ef565b61102883838360016113ee565b826001600160a01b031661103b826108c3565b6001600160a01b0316146110615760405162461bcd60e51b81526004016104ef906120c5565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006110fc826108c3565b905061110c8160008460016113ee565b611115826108c3565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316036111f55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104ef565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61126d848484610f80565b61127984848484611470565b610b7d5760405162461bcd60e51b81526004016104ef9061210a565b6060600e80546103d190611f76565b606060006112b183611571565b600101905060008167ffffffffffffffff8111156112d1576112d1611c9e565b6040519080825280601f01601f1916602001820160405280156112fb576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461130557509392505050565b60005b81518110156108bf5761137e82828151811061135857611358611ffd565b6020026020010151611369600a5490565b60405180602001604052806000815250611649565b61138c600a80546001019055565b806113968161206a565b91505061133a565b60006001600160e01b031982166380ac58cd60e01b14806113cf57506001600160e01b03198216635b5e139f60e01b145b806103bc57506301ffc9a760e01b6001600160e01b03198316146103bc565b6001600160a01b0384161580159061140e57506001600160a01b03831615155b80156114245750600d54600160a81b900460ff16155b156114645760405162461bcd60e51b815260206004820152601060248201526f6e6f74207472616e7366657261626c6560801b60448201526064016104ef565b610b7d8484848461167c565b60006001600160a01b0384163b1561156657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906114b490339089908890889060040161215c565b6020604051808303816000875af19250505080156114ef575060408051601f3d908101601f191682019092526114ec91810190612199565b60015b61154c573d80801561151d576040519150601f19603f3d011682016040523d82523d6000602084013e611522565b606091505b5080516000036115445760405162461bcd60e51b81526004016104ef9061210a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f78565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106115b05772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106115dc576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106115fa57662386f26fc10000830492506010015b6305f5e1008310611612576305f5e100830492506008015b612710831061162657612710830492506004015b60648310611638576064830492506002015b600a83106103bc5760010192915050565b61165383836117bc565b6116606000848484611470565b6105905760405162461bcd60e51b81526004016104ef9061210a565b61168884848484611955565b60018111156116f75760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016104ef565b816001600160a01b0385166117535761174e81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611776565b836001600160a01b0316856001600160a01b0316146117765761177685826119dd565b6001600160a01b0384166117925761178d81611a7a565b6117b5565b846001600160a01b0316846001600160a01b0316146117b5576117b58482611b29565b5050505050565b6001600160a01b0382166118125760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104ef565b6000818152600260205260409020546001600160a01b0316156118775760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104ef565b6118856000838360016113ee565b6000818152600260205260409020546001600160a01b0316156118ea5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104ef565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115610b7d576001600160a01b0384161561199b576001600160a01b038416600090815260036020526040812080548392906119959084906121b6565b90915550505b6001600160a01b03831615610b7d576001600160a01b038316600090815260036020526040812080548392906119d29084906120b2565b909155505050505050565b600060016119ea84610aab565b6119f491906121b6565b600083815260076020526040902054909150808214611a47576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611a8c906001906121b6565b60008381526009602052604081205460088054939450909284908110611ab457611ab4611ffd565b906000526020600020015490508060088381548110611ad557611ad5611ffd565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611b0d57611b0d6121c9565b6001900381819060005260206000200160009055905550505050565b6000611b3483610aab565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610d6e57600080fd5b600060208284031215611b9557600080fd5b8135610be381611b6d565b60005b83811015611bbb578181015183820152602001611ba3565b50506000910152565b60008151808452611bdc816020860160208601611ba0565b601f01601f19169290920160200192915050565b602081526000610be36020830184611bc4565b600060208284031215611c1557600080fd5b5035919050565b80356001600160a01b0381168114611c3357600080fd5b919050565b60008060408385031215611c4b57600080fd5b611c5483611c1c565b946020939093013593505050565b600080600060608486031215611c7757600080fd5b611c8084611c1c565b9250611c8e60208501611c1c565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cdd57611cdd611c9e565b604052919050565b600067ffffffffffffffff821115611cff57611cff611c9e565b5060051b60200190565b60006020808385031215611d1c57600080fd5b823567ffffffffffffffff811115611d3357600080fd5b8301601f81018513611d4457600080fd5b8035611d57611d5282611ce5565b611cb4565b81815260059190911b82018301908381019087831115611d7657600080fd5b928401925b82841015611d9457833582529284019290840190611d7b565b979650505050505050565b600060208284031215611db157600080fd5b610be382611c1c565b60008060408385031215611dcd57600080fd5b611dd683611c1c565b915060208301358015158114611deb57600080fd5b809150509250929050565b60008060008060808587031215611e0c57600080fd5b611e1585611c1c565b93506020611e24818701611c1c565b935060408601359250606086013567ffffffffffffffff80821115611e4857600080fd5b818801915088601f830112611e5c57600080fd5b813581811115611e6e57611e6e611c9e565b611e80601f8201601f19168501611cb4565b91508082528984828501011115611e9657600080fd5b808484018584013760008482840101525080935050505092959194509250565b60006020808385031215611ec957600080fd5b823567ffffffffffffffff811115611ee057600080fd5b8301601f81018513611ef157600080fd5b8035611eff611d5282611ce5565b81815260059190911b82018301908381019087831115611f1e57600080fd5b928401925b82841015611d9457611f3484611c1c565b82529284019290840190611f23565b60008060408385031215611f5657600080fd5b611f5f83611c1c565b9150611f6d60208401611c1c565b90509250929050565b600181811c90821680611f8a57607f821691505b602082108103611faa57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561202557600080fd5b5051919050565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006001820161207c5761207c612054565b5060010190565b60008351612095818460208801611ba0565b8351908301906120a9818360208801611ba0565b01949350505050565b808201808211156103bc576103bc612054565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061218f90830184611bc4565b9695505050505050565b6000602082840312156121ab57600080fd5b8151610be381611b6d565b818103818111156103bc576103bc612054565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e8152b9960944a2fd38286972b6dc3d8a3cffd1232a5105e82f02c12af7f532064736f6c634300081100334552433732313a207472616e7366657220746f206e6f6e204552433732315265" + +// DeployOwnerToken deploys a new Ethereum contract, binding an instance of OwnerToken to it. +func DeployOwnerToken(auth *bind.TransactOpts, backend bind.ContractBackend, _name string, _symbol string, _baseTokenURI string, _masterName string, _masterSymbol string, _masterBaseTokenURI string, _signerPublicKey []byte) (common.Address, *types.Transaction, *OwnerToken, error) { + parsed, err := abi.JSON(strings.NewReader(OwnerTokenABI)) + if err != nil { + return common.Address{}, nil, nil, err + } + + address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(OwnerTokenBin), backend, _name, _symbol, _baseTokenURI, _masterName, _masterSymbol, _masterBaseTokenURI, _signerPublicKey) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OwnerToken{OwnerTokenCaller: OwnerTokenCaller{contract: contract}, OwnerTokenTransactor: OwnerTokenTransactor{contract: contract}, OwnerTokenFilterer: OwnerTokenFilterer{contract: contract}}, nil +} + +// OwnerToken is an auto generated Go binding around an Ethereum contract. +type OwnerToken struct { + OwnerTokenCaller // Read-only binding to the contract + OwnerTokenTransactor // Write-only binding to the contract + OwnerTokenFilterer // Log filterer for contract events +} + +// OwnerTokenCaller is an auto generated read-only Go binding around an Ethereum contract. +type OwnerTokenCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OwnerTokenTransactor is an auto generated write-only Go binding around an Ethereum contract. +type OwnerTokenTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OwnerTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OwnerTokenFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OwnerTokenSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OwnerTokenSession struct { + Contract *OwnerToken // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OwnerTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OwnerTokenCallerSession struct { + Contract *OwnerTokenCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OwnerTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OwnerTokenTransactorSession struct { + Contract *OwnerTokenTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OwnerTokenRaw is an auto generated low-level Go binding around an Ethereum contract. +type OwnerTokenRaw struct { + Contract *OwnerToken // Generic contract binding to access the raw methods on +} + +// OwnerTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OwnerTokenCallerRaw struct { + Contract *OwnerTokenCaller // Generic read-only contract binding to access the raw methods on +} + +// OwnerTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OwnerTokenTransactorRaw struct { + Contract *OwnerTokenTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewOwnerToken creates a new instance of OwnerToken, bound to a specific deployed contract. +func NewOwnerToken(address common.Address, backend bind.ContractBackend) (*OwnerToken, error) { + contract, err := bindOwnerToken(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OwnerToken{OwnerTokenCaller: OwnerTokenCaller{contract: contract}, OwnerTokenTransactor: OwnerTokenTransactor{contract: contract}, OwnerTokenFilterer: OwnerTokenFilterer{contract: contract}}, nil +} + +// NewOwnerTokenCaller creates a new read-only instance of OwnerToken, bound to a specific deployed contract. +func NewOwnerTokenCaller(address common.Address, caller bind.ContractCaller) (*OwnerTokenCaller, error) { + contract, err := bindOwnerToken(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OwnerTokenCaller{contract: contract}, nil +} + +// NewOwnerTokenTransactor creates a new write-only instance of OwnerToken, bound to a specific deployed contract. +func NewOwnerTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*OwnerTokenTransactor, error) { + contract, err := bindOwnerToken(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OwnerTokenTransactor{contract: contract}, nil +} + +// NewOwnerTokenFilterer creates a new log filterer instance of OwnerToken, bound to a specific deployed contract. +func NewOwnerTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*OwnerTokenFilterer, error) { + contract, err := bindOwnerToken(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OwnerTokenFilterer{contract: contract}, nil +} + +// bindOwnerToken binds a generic wrapper to an already deployed contract. +func bindOwnerToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OwnerTokenABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OwnerToken *OwnerTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OwnerToken.Contract.OwnerTokenCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OwnerToken *OwnerTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OwnerToken.Contract.OwnerTokenTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OwnerToken *OwnerTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OwnerToken.Contract.OwnerTokenTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OwnerToken *OwnerTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OwnerToken.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OwnerToken *OwnerTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OwnerToken.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OwnerToken *OwnerTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OwnerToken.Contract.contract.Transact(opts, method, params...) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "balanceOf", owner) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_OwnerToken *OwnerTokenSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _OwnerToken.Contract.BalanceOf(&_OwnerToken.CallOpts, owner) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address owner) view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) BalanceOf(owner common.Address) (*big.Int, error) { + return _OwnerToken.Contract.BalanceOf(&_OwnerToken.CallOpts, owner) +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_OwnerToken *OwnerTokenCaller) BaseTokenURI(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "baseTokenURI") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_OwnerToken *OwnerTokenSession) BaseTokenURI() (string, error) { + return _OwnerToken.Contract.BaseTokenURI(&_OwnerToken.CallOpts) +} + +// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7. +// +// Solidity: function baseTokenURI() view returns(string) +func (_OwnerToken *OwnerTokenCallerSession) BaseTokenURI() (string, error) { + return _OwnerToken.Contract.BaseTokenURI(&_OwnerToken.CallOpts) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "getApproved", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenSession) GetApproved(tokenId *big.Int) (common.Address, error) { + return _OwnerToken.Contract.GetApproved(&_OwnerToken.CallOpts, tokenId) +} + +// GetApproved is a free data retrieval call binding the contract method 0x081812fc. +// +// Solidity: function getApproved(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) { + return _OwnerToken.Contract.GetApproved(&_OwnerToken.CallOpts, tokenId) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_OwnerToken *OwnerTokenCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "isApprovedForAll", owner, operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_OwnerToken *OwnerTokenSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _OwnerToken.Contract.IsApprovedForAll(&_OwnerToken.CallOpts, owner, operator) +} + +// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5. +// +// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool) +func (_OwnerToken *OwnerTokenCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) { + return _OwnerToken.Contract.IsApprovedForAll(&_OwnerToken.CallOpts, owner, operator) +} + +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_OwnerToken *OwnerTokenCaller) MasterToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "masterToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_OwnerToken *OwnerTokenSession) MasterToken() (common.Address, error) { + return _OwnerToken.Contract.MasterToken(&_OwnerToken.CallOpts) +} + +// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e. +// +// Solidity: function masterToken() view returns(address) +func (_OwnerToken *OwnerTokenCallerSession) MasterToken() (common.Address, error) { + return _OwnerToken.Contract.MasterToken(&_OwnerToken.CallOpts) +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) MaxSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "maxSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenSession) MaxSupply() (*big.Int, error) { + return _OwnerToken.Contract.MaxSupply(&_OwnerToken.CallOpts) +} + +// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01. +// +// Solidity: function maxSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) MaxSupply() (*big.Int, error) { + return _OwnerToken.Contract.MaxSupply(&_OwnerToken.CallOpts) +} + +// MintedCount is a free data retrieval call binding the contract method 0xcf721b15. +// +// Solidity: function mintedCount() view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) MintedCount(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "mintedCount") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MintedCount is a free data retrieval call binding the contract method 0xcf721b15. +// +// Solidity: function mintedCount() view returns(uint256) +func (_OwnerToken *OwnerTokenSession) MintedCount() (*big.Int, error) { + return _OwnerToken.Contract.MintedCount(&_OwnerToken.CallOpts) +} + +// MintedCount is a free data retrieval call binding the contract method 0xcf721b15. +// +// Solidity: function mintedCount() view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) MintedCount() (*big.Int, error) { + return _OwnerToken.Contract.MintedCount(&_OwnerToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OwnerToken *OwnerTokenCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OwnerToken *OwnerTokenSession) Name() (string, error) { + return _OwnerToken.Contract.Name(&_OwnerToken.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string) +func (_OwnerToken *OwnerTokenCallerSession) Name() (string, error) { + return _OwnerToken.Contract.Name(&_OwnerToken.CallOpts) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "ownerOf", tokenId) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenSession) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _OwnerToken.Contract.OwnerOf(&_OwnerToken.CallOpts, tokenId) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 tokenId) view returns(address) +func (_OwnerToken *OwnerTokenCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) { + return _OwnerToken.Contract.OwnerOf(&_OwnerToken.CallOpts, tokenId) +} + +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_OwnerToken *OwnerTokenCaller) OwnerToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "ownerToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_OwnerToken *OwnerTokenSession) OwnerToken() (common.Address, error) { + return _OwnerToken.Contract.OwnerToken(&_OwnerToken.CallOpts) +} + +// OwnerToken is a free data retrieval call binding the contract method 0x65371883. +// +// Solidity: function ownerToken() view returns(address) +func (_OwnerToken *OwnerTokenCallerSession) OwnerToken() (common.Address, error) { + return _OwnerToken.Contract.OwnerToken(&_OwnerToken.CallOpts) +} + +// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5. +// +// Solidity: function remoteBurnable() view returns(bool) +func (_OwnerToken *OwnerTokenCaller) RemoteBurnable(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "remoteBurnable") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5. +// +// Solidity: function remoteBurnable() view returns(bool) +func (_OwnerToken *OwnerTokenSession) RemoteBurnable() (bool, error) { + return _OwnerToken.Contract.RemoteBurnable(&_OwnerToken.CallOpts) +} + +// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5. +// +// Solidity: function remoteBurnable() view returns(bool) +func (_OwnerToken *OwnerTokenCallerSession) RemoteBurnable() (bool, error) { + return _OwnerToken.Contract.RemoteBurnable(&_OwnerToken.CallOpts) +} + +// SignerPublicKey is a free data retrieval call binding the contract method 0x549a95ea. +// +// Solidity: function signerPublicKey() view returns(bytes) +func (_OwnerToken *OwnerTokenCaller) SignerPublicKey(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "signerPublicKey") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// SignerPublicKey is a free data retrieval call binding the contract method 0x549a95ea. +// +// Solidity: function signerPublicKey() view returns(bytes) +func (_OwnerToken *OwnerTokenSession) SignerPublicKey() ([]byte, error) { + return _OwnerToken.Contract.SignerPublicKey(&_OwnerToken.CallOpts) +} + +// SignerPublicKey is a free data retrieval call binding the contract method 0x549a95ea. +// +// Solidity: function signerPublicKey() view returns(bytes) +func (_OwnerToken *OwnerTokenCallerSession) SignerPublicKey() ([]byte, error) { + return _OwnerToken.Contract.SignerPublicKey(&_OwnerToken.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_OwnerToken *OwnerTokenCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_OwnerToken *OwnerTokenSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _OwnerToken.Contract.SupportsInterface(&_OwnerToken.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_OwnerToken *OwnerTokenCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _OwnerToken.Contract.SupportsInterface(&_OwnerToken.CallOpts, interfaceId) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OwnerToken *OwnerTokenCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OwnerToken *OwnerTokenSession) Symbol() (string, error) { + return _OwnerToken.Contract.Symbol(&_OwnerToken.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string) +func (_OwnerToken *OwnerTokenCallerSession) Symbol() (string, error) { + return _OwnerToken.Contract.Symbol(&_OwnerToken.CallOpts) +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "tokenByIndex", index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenSession) TokenByIndex(index *big.Int) (*big.Int, error) { + return _OwnerToken.Contract.TokenByIndex(&_OwnerToken.CallOpts, index) +} + +// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7. +// +// Solidity: function tokenByIndex(uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) { + return _OwnerToken.Contract.TokenByIndex(&_OwnerToken.CallOpts, index) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) { + return _OwnerToken.Contract.TokenOfOwnerByIndex(&_OwnerToken.CallOpts, owner, index) +} + +// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59. +// +// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) { + return _OwnerToken.Contract.TokenOfOwnerByIndex(&_OwnerToken.CallOpts, owner, index) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_OwnerToken *OwnerTokenCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "tokenURI", tokenId) + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_OwnerToken *OwnerTokenSession) TokenURI(tokenId *big.Int) (string, error) { + return _OwnerToken.Contract.TokenURI(&_OwnerToken.CallOpts, tokenId) +} + +// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd. +// +// Solidity: function tokenURI(uint256 tokenId) view returns(string) +func (_OwnerToken *OwnerTokenCallerSession) TokenURI(tokenId *big.Int) (string, error) { + return _OwnerToken.Contract.TokenURI(&_OwnerToken.CallOpts, tokenId) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenSession) TotalSupply() (*big.Int, error) { + return _OwnerToken.Contract.TotalSupply(&_OwnerToken.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_OwnerToken *OwnerTokenCallerSession) TotalSupply() (*big.Int, error) { + return _OwnerToken.Contract.TotalSupply(&_OwnerToken.CallOpts) +} + +// Transferable is a free data retrieval call binding the contract method 0x92ff0d31. +// +// Solidity: function transferable() view returns(bool) +func (_OwnerToken *OwnerTokenCaller) Transferable(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OwnerToken.contract.Call(opts, &out, "transferable") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Transferable is a free data retrieval call binding the contract method 0x92ff0d31. +// +// Solidity: function transferable() view returns(bool) +func (_OwnerToken *OwnerTokenSession) Transferable() (bool, error) { + return _OwnerToken.Contract.Transferable(&_OwnerToken.CallOpts) +} + +// Transferable is a free data retrieval call binding the contract method 0x92ff0d31. +// +// Solidity: function transferable() view returns(bool) +func (_OwnerToken *OwnerTokenCallerSession) Transferable() (bool, error) { + return _OwnerToken.Contract.Transferable(&_OwnerToken.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "approve", to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.Approve(&_OwnerToken.TransactOpts, to, tokenId) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.Approve(&_OwnerToken.TransactOpts, to, tokenId) +} + +// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49. +// +// Solidity: function mintTo(address[] addresses) returns() +func (_OwnerToken *OwnerTokenTransactor) MintTo(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "mintTo", addresses) +} + +// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49. +// +// Solidity: function mintTo(address[] addresses) returns() +func (_OwnerToken *OwnerTokenSession) MintTo(addresses []common.Address) (*types.Transaction, error) { + return _OwnerToken.Contract.MintTo(&_OwnerToken.TransactOpts, addresses) +} + +// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49. +// +// Solidity: function mintTo(address[] addresses) returns() +func (_OwnerToken *OwnerTokenTransactorSession) MintTo(addresses []common.Address) (*types.Transaction, error) { + return _OwnerToken.Contract.MintTo(&_OwnerToken.TransactOpts, addresses) +} + +// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02. +// +// Solidity: function remoteBurn(uint256[] tokenIds) returns() +func (_OwnerToken *OwnerTokenTransactor) RemoteBurn(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "remoteBurn", tokenIds) +} + +// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02. +// +// Solidity: function remoteBurn(uint256[] tokenIds) returns() +func (_OwnerToken *OwnerTokenSession) RemoteBurn(tokenIds []*big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.RemoteBurn(&_OwnerToken.TransactOpts, tokenIds) +} + +// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02. +// +// Solidity: function remoteBurn(uint256[] tokenIds) returns() +func (_OwnerToken *OwnerTokenTransactorSession) RemoteBurn(tokenIds []*big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.RemoteBurn(&_OwnerToken.TransactOpts, tokenIds) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "safeTransferFrom", from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.SafeTransferFrom(&_OwnerToken.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.SafeTransferFrom(&_OwnerToken.TransactOpts, from, to, tokenId) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_OwnerToken *OwnerTokenTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_OwnerToken *OwnerTokenSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _OwnerToken.Contract.SafeTransferFrom0(&_OwnerToken.TransactOpts, from, to, tokenId, data) +} + +// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde. +// +// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns() +func (_OwnerToken *OwnerTokenTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) { + return _OwnerToken.Contract.SafeTransferFrom0(&_OwnerToken.TransactOpts, from, to, tokenId, data) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_OwnerToken *OwnerTokenTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "setApprovalForAll", operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_OwnerToken *OwnerTokenSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _OwnerToken.Contract.SetApprovalForAll(&_OwnerToken.TransactOpts, operator, approved) +} + +// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465. +// +// Solidity: function setApprovalForAll(address operator, bool approved) returns() +func (_OwnerToken *OwnerTokenTransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) { + return _OwnerToken.Contract.SetApprovalForAll(&_OwnerToken.TransactOpts, operator, approved) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 _newMaxSupply) returns() +func (_OwnerToken *OwnerTokenTransactor) SetMaxSupply(opts *bind.TransactOpts, _newMaxSupply *big.Int) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "setMaxSupply", _newMaxSupply) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 _newMaxSupply) returns() +func (_OwnerToken *OwnerTokenSession) SetMaxSupply(_newMaxSupply *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.SetMaxSupply(&_OwnerToken.TransactOpts, _newMaxSupply) +} + +// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0. +// +// Solidity: function setMaxSupply(uint256 _newMaxSupply) returns() +func (_OwnerToken *OwnerTokenTransactorSession) SetMaxSupply(_newMaxSupply *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.SetMaxSupply(&_OwnerToken.TransactOpts, _newMaxSupply) +} + +// SetSignerPublicKey is a paid mutator transaction binding the contract method 0x9404c91a. +// +// Solidity: function setSignerPublicKey(bytes _newSignerPublicKey) returns() +func (_OwnerToken *OwnerTokenTransactor) SetSignerPublicKey(opts *bind.TransactOpts, _newSignerPublicKey []byte) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "setSignerPublicKey", _newSignerPublicKey) +} + +// SetSignerPublicKey is a paid mutator transaction binding the contract method 0x9404c91a. +// +// Solidity: function setSignerPublicKey(bytes _newSignerPublicKey) returns() +func (_OwnerToken *OwnerTokenSession) SetSignerPublicKey(_newSignerPublicKey []byte) (*types.Transaction, error) { + return _OwnerToken.Contract.SetSignerPublicKey(&_OwnerToken.TransactOpts, _newSignerPublicKey) +} + +// SetSignerPublicKey is a paid mutator transaction binding the contract method 0x9404c91a. +// +// Solidity: function setSignerPublicKey(bytes _newSignerPublicKey) returns() +func (_OwnerToken *OwnerTokenTransactorSession) SetSignerPublicKey(_newSignerPublicKey []byte) (*types.Transaction, error) { + return _OwnerToken.Contract.SetSignerPublicKey(&_OwnerToken.TransactOpts, _newSignerPublicKey) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.contract.Transact(opts, "transferFrom", from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.TransferFrom(&_OwnerToken.TransactOpts, from, to, tokenId) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns() +func (_OwnerToken *OwnerTokenTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) { + return _OwnerToken.Contract.TransferFrom(&_OwnerToken.TransactOpts, from, to, tokenId) +} + +// OwnerTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the OwnerToken contract. +type OwnerTokenApprovalIterator struct { + Event *OwnerTokenApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OwnerTokenApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OwnerTokenApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OwnerTokenApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OwnerTokenApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OwnerTokenApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OwnerTokenApproval represents a Approval event raised by the OwnerToken contract. +type OwnerTokenApproval struct { + Owner common.Address + Approved common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*OwnerTokenApprovalIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _OwnerToken.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return &OwnerTokenApprovalIterator{contract: _OwnerToken.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *OwnerTokenApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var approvedRule []interface{} + for _, approvedItem := range approved { + approvedRule = append(approvedRule, approvedItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _OwnerToken.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OwnerTokenApproval) + if err := _OwnerToken.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) ParseApproval(log types.Log) (*OwnerTokenApproval, error) { + event := new(OwnerTokenApproval) + if err := _OwnerToken.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OwnerTokenApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the OwnerToken contract. +type OwnerTokenApprovalForAllIterator struct { + Event *OwnerTokenApprovalForAll // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OwnerTokenApprovalForAllIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OwnerTokenApprovalForAll) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OwnerTokenApprovalForAll) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OwnerTokenApprovalForAllIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OwnerTokenApprovalForAllIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OwnerTokenApprovalForAll represents a ApprovalForAll event raised by the OwnerToken contract. +type OwnerTokenApprovalForAll struct { + Owner common.Address + Operator common.Address + Approved bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_OwnerToken *OwnerTokenFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*OwnerTokenApprovalForAllIterator, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _OwnerToken.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return &OwnerTokenApprovalForAllIterator{contract: _OwnerToken.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil +} + +// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_OwnerToken *OwnerTokenFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *OwnerTokenApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) { + + var ownerRule []interface{} + for _, ownerItem := range owner { + ownerRule = append(ownerRule, ownerItem) + } + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _OwnerToken.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OwnerTokenApprovalForAll) + if err := _OwnerToken.contract.UnpackLog(event, "ApprovalForAll", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31. +// +// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved) +func (_OwnerToken *OwnerTokenFilterer) ParseApprovalForAll(log types.Log) (*OwnerTokenApprovalForAll, error) { + event := new(OwnerTokenApprovalForAll) + if err := _OwnerToken.contract.UnpackLog(event, "ApprovalForAll", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OwnerTokenMasterTokenCreatedIterator is returned from FilterMasterTokenCreated and is used to iterate over the raw logs and unpacked data for MasterTokenCreated events raised by the OwnerToken contract. +type OwnerTokenMasterTokenCreatedIterator struct { + Event *OwnerTokenMasterTokenCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OwnerTokenMasterTokenCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OwnerTokenMasterTokenCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OwnerTokenMasterTokenCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OwnerTokenMasterTokenCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OwnerTokenMasterTokenCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OwnerTokenMasterTokenCreated represents a MasterTokenCreated event raised by the OwnerToken contract. +type OwnerTokenMasterTokenCreated struct { + MasterToken common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMasterTokenCreated is a free log retrieval operation binding the contract event 0x02a0dab88b41e2a6fa5a9b4d40c16209315d6158c6a42f30879c8df187132601. +// +// Solidity: event MasterTokenCreated(address masterToken) +func (_OwnerToken *OwnerTokenFilterer) FilterMasterTokenCreated(opts *bind.FilterOpts) (*OwnerTokenMasterTokenCreatedIterator, error) { + + logs, sub, err := _OwnerToken.contract.FilterLogs(opts, "MasterTokenCreated") + if err != nil { + return nil, err + } + return &OwnerTokenMasterTokenCreatedIterator{contract: _OwnerToken.contract, event: "MasterTokenCreated", logs: logs, sub: sub}, nil +} + +// WatchMasterTokenCreated is a free log subscription operation binding the contract event 0x02a0dab88b41e2a6fa5a9b4d40c16209315d6158c6a42f30879c8df187132601. +// +// Solidity: event MasterTokenCreated(address masterToken) +func (_OwnerToken *OwnerTokenFilterer) WatchMasterTokenCreated(opts *bind.WatchOpts, sink chan<- *OwnerTokenMasterTokenCreated) (event.Subscription, error) { + + logs, sub, err := _OwnerToken.contract.WatchLogs(opts, "MasterTokenCreated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OwnerTokenMasterTokenCreated) + if err := _OwnerToken.contract.UnpackLog(event, "MasterTokenCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseMasterTokenCreated is a log parse operation binding the contract event 0x02a0dab88b41e2a6fa5a9b4d40c16209315d6158c6a42f30879c8df187132601. +// +// Solidity: event MasterTokenCreated(address masterToken) +func (_OwnerToken *OwnerTokenFilterer) ParseMasterTokenCreated(log types.Log) (*OwnerTokenMasterTokenCreated, error) { + event := new(OwnerTokenMasterTokenCreated) + if err := _OwnerToken.contract.UnpackLog(event, "MasterTokenCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OwnerTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the OwnerToken contract. +type OwnerTokenTransferIterator struct { + Event *OwnerTokenTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OwnerTokenTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OwnerTokenTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OwnerTokenTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OwnerTokenTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OwnerTokenTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OwnerTokenTransfer represents a Transfer event raised by the OwnerToken contract. +type OwnerTokenTransfer struct { + From common.Address + To common.Address + TokenId *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*OwnerTokenTransferIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _OwnerToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return &OwnerTokenTransferIterator{contract: _OwnerToken.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *OwnerTokenTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var tokenIdRule []interface{} + for _, tokenIdItem := range tokenId { + tokenIdRule = append(tokenIdRule, tokenIdItem) + } + + logs, sub, err := _OwnerToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OwnerTokenTransfer) + if err := _OwnerToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId) +func (_OwnerToken *OwnerTokenFilterer) ParseTransfer(log types.Log) (*OwnerTokenTransfer, error) { + event := new(OwnerTokenTransfer) + if err := _OwnerToken.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/images/encode.go b/images/encode.go index 65b22ba52..cca8e26bf 100644 --- a/images/encode.go +++ b/images/encode.go @@ -9,6 +9,7 @@ import ( "image/jpeg" "io" "regexp" + "strings" "github.com/nfnt/resize" ) @@ -127,3 +128,7 @@ func GetPayloadFromURI(uri string) ([]byte, error) { } return base64.StdEncoding.DecodeString(res[2]) } + +func IsPayloadDataURI(uri string) bool { + return strings.HasPrefix(uri, "data:image") +} diff --git a/protocol/communities/manager.go b/protocol/communities/manager.go index bcaac6a7d..6804ddb46 100644 --- a/protocol/communities/manager.go +++ b/protocol/communities/manager.go @@ -4224,7 +4224,8 @@ func (m *Manager) SaveCommunityToken(token *community_token.CommunityToken, crop return nil, err } token.Base64Image = base64img - } else { + } else if !images.IsPayloadDataURI(token.Base64Image) { + // if image is already base64 do not convert (owner and master tokens have already base64 image) token.Base64Image = m.ImageToBase64(token.Base64Image) } @@ -4267,6 +4268,10 @@ func (m *Manager) UpdateCommunityTokenState(chainID int, contractAddress string, return m.persistence.UpdateCommunityTokenState(chainID, contractAddress, deployState) } +func (m *Manager) UpdateCommunityTokenAddress(chainID int, oldContractAddress string, newContractAddress string) error { + return m.persistence.UpdateCommunityTokenAddress(chainID, oldContractAddress, newContractAddress) +} + func (m *Manager) UpdateCommunityTokenSupply(chainID int, contractAddress string, supply *bigint.BigInt) error { return m.persistence.UpdateCommunityTokenSupply(chainID, contractAddress, supply) } @@ -4486,7 +4491,7 @@ func (m *Manager) HandleCommunityTokensMetadata(communityID string, communityTok switch tokenMetadata.TokenType { case protobuf.CommunityTokenType_ERC721: - contract, err := m.collectiblesService.API().GetContractInstance(chainID, address) + contract, err := m.collectiblesService.API().GetCollectiblesContractInstance(chainID, address) if err != nil { return err } diff --git a/protocol/communities/persistence.go b/protocol/communities/persistence.go index 194d8ec61..c8545fb2b 100644 --- a/protocol/communities/persistence.go +++ b/protocol/communities/persistence.go @@ -1179,8 +1179,8 @@ func (p *Persistence) GetCommunityChatIDs(communityID types.HexBytes) ([]string, func (p *Persistence) GetAllCommunityTokens() ([]*token.CommunityToken, error) { rows, err := p.db.Query(`SELECT community_id, address, type, name, symbol, description, supply_str, - infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals - FROM community_tokens`) + infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals, + deployer, privileges_level FROM community_tokens`) if err != nil { return nil, err } @@ -1191,7 +1191,8 @@ func (p *Persistence) GetAllCommunityTokens() ([]*token.CommunityToken, error) { func (p *Persistence) GetCommunityTokens(communityID string) ([]*token.CommunityToken, error) { rows, err := p.db.Query(`SELECT community_id, address, type, name, symbol, description, supply_str, - infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals + infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals, + deployer, privileges_level FROM community_tokens WHERE community_id = ?`, communityID) if err != nil { return nil, err @@ -1204,9 +1205,12 @@ func (p *Persistence) GetCommunityTokens(communityID string) ([]*token.Community func (p *Persistence) GetCommunityToken(communityID string, chainID int, address string) (*token.CommunityToken, error) { token := token.CommunityToken{} var supplyStr string - err := p.db.QueryRow(`SELECT community_id, address, type, name, symbol, description, supply_str, infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals FROM community_tokens WHERE community_id = ? AND chain_id = ? AND address = ?`, communityID, chainID, address).Scan(&token.CommunityID, &token.Address, &token.TokenType, &token.Name, + err := p.db.QueryRow(`SELECT community_id, address, type, name, symbol, description, supply_str, infinite_supply, + transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals, deployer, privileges_level + FROM community_tokens WHERE community_id = ? AND chain_id = ? AND address = ?`, communityID, chainID, address).Scan(&token.CommunityID, &token.Address, &token.TokenType, &token.Name, &token.Symbol, &token.Description, &supplyStr, &token.InfiniteSupply, &token.Transferable, - &token.RemoteSelfDestruct, &token.ChainID, &token.DeployState, &token.Base64Image, &token.Decimals) + &token.RemoteSelfDestruct, &token.ChainID, &token.DeployState, &token.Base64Image, &token.Decimals, + &token.Deployer, &token.PrivilegesLevel) if err == sql.ErrNoRows { return nil, nil } else if err != nil { @@ -1229,7 +1233,8 @@ func (p *Persistence) getCommunityTokensInternal(rows *sql.Rows) ([]*token.Commu var supplyStr string err := rows.Scan(&token.CommunityID, &token.Address, &token.TokenType, &token.Name, &token.Symbol, &token.Description, &supplyStr, &token.InfiniteSupply, &token.Transferable, - &token.RemoteSelfDestruct, &token.ChainID, &token.DeployState, &token.Base64Image, &token.Decimals) + &token.RemoteSelfDestruct, &token.ChainID, &token.DeployState, &token.Base64Image, &token.Decimals, + &token.Deployer, &token.PrivilegesLevel) if err != nil { return nil, err } @@ -1257,10 +1262,10 @@ func (p *Persistence) HasCommunityToken(communityID string, address string, chai func (p *Persistence) AddCommunityToken(token *token.CommunityToken) error { _, err := p.db.Exec(`INSERT INTO community_tokens (community_id, address, type, name, symbol, description, supply_str, - infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, token.CommunityID, token.Address, token.TokenType, token.Name, + infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals, deployer, privileges_level) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, token.CommunityID, token.Address, token.TokenType, token.Name, token.Symbol, token.Description, token.Supply.String(), token.InfiniteSupply, token.Transferable, token.RemoteSelfDestruct, - token.ChainID, token.DeployState, token.Base64Image, token.Decimals) + token.ChainID, token.DeployState, token.Base64Image, token.Decimals, token.Deployer, token.PrivilegesLevel) return err } @@ -1269,6 +1274,11 @@ func (p *Persistence) UpdateCommunityTokenState(chainID int, contractAddress str return err } +func (p *Persistence) UpdateCommunityTokenAddress(chainID int, oldContractAddress string, newContractAddress string) error { + _, err := p.db.Exec(`UPDATE community_tokens SET address = ? WHERE address = ? AND chain_id = ?`, newContractAddress, oldContractAddress, chainID) + return err +} + func (p *Persistence) UpdateCommunityTokenSupply(chainID int, contractAddress string, supply *bigint.BigInt) error { _, err := p.db.Exec(`UPDATE community_tokens SET supply_str = ? WHERE address = ? AND chain_id = ?`, supply.String(), contractAddress, chainID) return err diff --git a/protocol/communities/persistence_test.go b/protocol/communities/persistence_test.go index 8e00d3c82..fba8c2976 100644 --- a/protocol/communities/persistence_test.go +++ b/protocol/communities/persistence_test.go @@ -422,6 +422,8 @@ func (s *PersistenceSuite) TestGetCommunityTokens() { ChainID: 1, DeployState: token.InProgress, Base64Image: "ABCD", + Deployer: "0xDep1", + PrivilegesLevel: token.OwnerLevel, } tokenERC20 := token.CommunityToken{ @@ -439,6 +441,8 @@ func (s *PersistenceSuite) TestGetCommunityTokens() { DeployState: token.Failed, Base64Image: "QWERTY", Decimals: 21, + Deployer: "0xDep2", + PrivilegesLevel: token.CommunityLevel, } err = s.db.AddCommunityToken(&tokenERC721) @@ -462,6 +466,13 @@ func (s *PersistenceSuite) TestGetCommunityTokens() { s.Require().NoError(err) s.Require().Len(tokens, 1) s.Require().Equal(tokenERC20, *tokens[0]) + + err = s.db.UpdateCommunityTokenAddress(1, "0x123", "0x123-newAddr") + s.Require().NoError(err) + tokens, err = s.db.GetCommunityTokens("123") + s.Require().NoError(err) + s.Require().Len(tokens, 1) + s.Require().Equal("0x123-newAddr", tokens[0].Address) } func (s *PersistenceSuite) TestSaveCheckChannelPermissionResponse() { diff --git a/protocol/communities/token/community_token.go b/protocol/communities/token/community_token.go index 824ec5c0f..41fb79133 100644 --- a/protocol/communities/token/community_token.go +++ b/protocol/communities/token/community_token.go @@ -13,6 +13,14 @@ const ( Deployed ) +type PrivilegesLevel uint8 + +const ( + OwnerLevel PrivilegesLevel = iota + MasterLevel + CommunityLevel +) + type CommunityToken struct { TokenType protobuf.CommunityTokenType `json:"tokenType"` CommunityID string `json:"communityId"` @@ -28,4 +36,6 @@ type CommunityToken struct { DeployState DeployState `json:"deployState"` Base64Image string `json:"image"` Decimals int `json:"decimals"` + Deployer string `json:"deployer"` + PrivilegesLevel PrivilegesLevel `json:"privilegesLevel"` } diff --git a/protocol/messenger_communities.go b/protocol/messenger_communities.go index a8848f242..126884e4e 100644 --- a/protocol/messenger_communities.go +++ b/protocol/messenger_communities.go @@ -4160,6 +4160,10 @@ func (m *Messenger) UpdateCommunityTokenState(chainID int, contractAddress strin return m.communitiesManager.UpdateCommunityTokenState(chainID, contractAddress, deployState) } +func (m *Messenger) UpdateCommunityTokenAddress(chainID int, oldContractAddress string, newContractAddress string) error { + return m.communitiesManager.UpdateCommunityTokenAddress(chainID, oldContractAddress, newContractAddress) +} + func (m *Messenger) UpdateCommunityTokenSupply(chainID int, contractAddress string, supply *bigint.BigInt) error { return m.communitiesManager.UpdateCommunityTokenSupply(chainID, contractAddress, supply) } diff --git a/protocol/migrations/migrations.go b/protocol/migrations/migrations.go index 0816ce3df..d38c1c427 100644 --- a/protocol/migrations/migrations.go +++ b/protocol/migrations/migrations.go @@ -99,6 +99,7 @@ // 1687959987_modify_community_tokens_supply_as_string.up.sql (77B) // 1689258900_add_airdrop_address_to_revealed_addresses.up.sql (99B) // 1689266326_create_communities_events_table.up.sql (164B) +// 1689931300_add_community_tokens_deployer_and_priv_level.up.sql (156B) // README.md (554B) // doc.go (850B) @@ -110,7 +111,6 @@ import ( "crypto/sha256" "fmt" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -120,7 +120,7 @@ import ( func bindataRead(data []byte, name string) ([]byte, error) { gz, err := gzip.NewReader(bytes.NewBuffer(data)) if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %w", name, err) } var buf bytes.Buffer @@ -128,7 +128,7 @@ func bindataRead(data []byte, name string) ([]byte, error) { clErr := gz.Close() if err != nil { - return nil, fmt.Errorf("read %q: %v", name, err) + return nil, fmt.Errorf("read %q: %w", name, err) } if clErr != nil { return nil, err @@ -184,7 +184,7 @@ func _000001_initDownDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}} return a, nil } @@ -204,7 +204,7 @@ func _000001_initUpDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}} return a, nil } @@ -224,7 +224,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}} return a, nil } @@ -244,7 +244,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}} return a, nil } @@ -264,7 +264,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}} return a, nil } @@ -284,7 +284,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}} return a, nil } @@ -304,7 +304,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}} return a, nil } @@ -324,7 +324,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}} return a, nil } @@ -344,7 +344,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}} return a, nil } @@ -364,7 +364,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}} return a, nil } @@ -384,7 +384,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}} return a, nil } @@ -404,7 +404,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}} return a, nil } @@ -424,7 +424,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}} return a, nil } @@ -444,7 +444,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}} return a, nil } @@ -464,7 +464,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}} return a, nil } @@ -484,7 +484,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}} return a, nil } @@ -504,7 +504,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}} return a, nil } @@ -524,7 +524,7 @@ func _1603816533_add_linksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}} return a, nil } @@ -544,7 +544,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error return nil, err } - info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}} return a, nil } @@ -564,7 +564,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1687286142, 0)} + info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}} return a, nil } @@ -584,7 +584,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}} return a, nil } @@ -604,7 +604,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}} return a, nil } @@ -624,7 +624,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}} return a, nil } @@ -644,7 +644,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}} return a, nil } @@ -664,7 +664,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}} return a, nil } @@ -684,7 +684,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}} return a, nil } @@ -704,7 +704,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}} return a, nil } @@ -724,7 +724,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}} return a, nil } @@ -744,7 +744,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}} return a, nil } @@ -764,7 +764,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}} return a, nil } @@ -784,7 +784,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}} return a, nil } @@ -804,7 +804,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}} return a, nil } @@ -824,7 +824,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset, return nil, err } - info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}} return a, nil } @@ -844,7 +844,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}} return a, nil } @@ -864,7 +864,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}} return a, nil } @@ -884,7 +884,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}} return a, nil } @@ -904,7 +904,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}} return a, nil } @@ -924,7 +924,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}} return a, nil } @@ -944,7 +944,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}} return a, nil } @@ -964,7 +964,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (* return nil, err } - info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}} return a, nil } @@ -984,7 +984,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}} return a, nil } @@ -1004,7 +1004,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}} return a, nil } @@ -1024,7 +1024,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}} return a, nil } @@ -1044,7 +1044,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}} return a, nil } @@ -1064,7 +1064,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}} return a, nil } @@ -1084,7 +1084,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}} return a, nil } @@ -1104,7 +1104,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}} return a, nil } @@ -1124,7 +1124,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}} return a, nil } @@ -1144,7 +1144,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}} return a, nil } @@ -1164,7 +1164,7 @@ func _1645034601_display_nameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}} return a, nil } @@ -1184,7 +1184,7 @@ func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}} return a, nil } @@ -1204,7 +1204,7 @@ func _1650373957_add_contact_request_stateUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}} return a, nil } @@ -1224,7 +1224,7 @@ func _1656958989_contact_verificationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1656958989_contact_verification.up.sql", size: 624, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3a, 0x3f, 0x28, 0x38, 0x33, 0xdb, 0xe9, 0x4d, 0xc0, 0x54, 0x8c, 0x2a, 0x73, 0xc4, 0xdd, 0x5c, 0xc5, 0x1a, 0x93, 0x4b, 0x6, 0x13, 0xbe, 0x42, 0xd2, 0x7f, 0xd4, 0xc, 0xc5, 0x4e, 0x6d, 0xce}} return a, nil } @@ -1244,7 +1244,7 @@ func _1658236268_add_discord_message_authors_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1658236268_add_discord_message_authors_table.up.sql", size: 191, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3d, 0xb7, 0xdb, 0x79, 0x1, 0x15, 0xe7, 0x76, 0x5d, 0x22, 0x54, 0x82, 0x9a, 0xbe, 0x24, 0xc1, 0x82, 0xcf, 0x67, 0x91, 0x53, 0xcc, 0xac, 0x74, 0x18, 0x61, 0x69, 0x68, 0x19, 0xca, 0x2b, 0xa8}} return a, nil } @@ -1264,7 +1264,7 @@ func _1659619997_add_discord_messages_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1659619997_add_discord_messages_table.up.sql", size: 371, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x12, 0x9c, 0x96, 0xe2, 0x42, 0x3f, 0x94, 0x62, 0xc2, 0x76, 0xab, 0x3b, 0x4c, 0x85, 0x36, 0x48, 0xcc, 0x73, 0x60, 0x93, 0x5a, 0xd6, 0x7, 0xd6, 0x0, 0xee, 0x1b, 0x1e, 0x34, 0x58, 0x99}} return a, nil } @@ -1284,7 +1284,7 @@ func _1660226788_create_chat_identity_social_linksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1660226788_create_chat_identity_social_links.up.sql", size: 318, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0x76, 0x40, 0xe9, 0x85, 0xc4, 0x38, 0xf8, 0xe5, 0x5d, 0xe8, 0x13, 0x46, 0x1b, 0xc, 0x1, 0xe9, 0x2f, 0x74, 0xd1, 0x79, 0x59, 0xa4, 0xdb, 0x4a, 0x4a, 0xf4, 0x98, 0x58, 0x3c, 0x57, 0xd3}} return a, nil } @@ -1304,7 +1304,7 @@ func _1660226789_add_walletconnectsessions_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1660226789_add_walletconnectsessions_table.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf8, 0x5c, 0x72, 0x2, 0xed, 0x36, 0x19, 0x91, 0x4d, 0x1a, 0xc1, 0xab, 0x84, 0xfa, 0x41, 0xb1, 0x46, 0xa5, 0xdb, 0x3f, 0x76, 0x47, 0xd3, 0x75, 0x3c, 0x6a, 0x8e, 0x78, 0xe6, 0x41, 0xdc, 0x7f}} return a, nil } @@ -1324,7 +1324,7 @@ func _1661242854_add_communities_requests_to_leaveUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1661242854_add_communities_requests_to_leave.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x2e, 0x7d, 0x14, 0xef, 0x6e, 0x95, 0x4b, 0x6, 0x70, 0x2e, 0xd1, 0xf6, 0x59, 0xf9, 0xe, 0x56, 0xa, 0x9c, 0x80, 0x18, 0xca, 0xb9, 0x49, 0x19, 0xf, 0x89, 0x94, 0x36, 0x6d, 0x93, 0x9a}} return a, nil } @@ -1344,7 +1344,7 @@ func _1662044232_add_chat_imageUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1662044232_add_chat_image.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x74, 0xdf, 0x50, 0x79, 0x73, 0x9e, 0xd0, 0xff, 0xa4, 0xd3, 0x87, 0xc3, 0x48, 0x31, 0x6c, 0xdf, 0xa6, 0x20, 0x85, 0xe6, 0x4e, 0x19, 0x9d, 0xef, 0xcc, 0x84, 0x2b, 0x5d, 0x44, 0x34, 0x6}} return a, nil } @@ -1364,7 +1364,7 @@ func _1662106895_add_chat_first_message_timestampUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1662106895_add_chat_first_message_timestamp.up.sql", size: 113, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8b, 0x55, 0x74, 0xfa, 0xf5, 0x51, 0x85, 0x19, 0xfd, 0xfb, 0x6, 0x79, 0x4d, 0x1d, 0xd, 0x3, 0x46, 0x66, 0x34, 0x1e, 0xce, 0x91, 0x21, 0x29, 0xf6, 0x71, 0xe7, 0x31, 0x39, 0x8f, 0x9d, 0x5}} return a, nil } @@ -1384,7 +1384,7 @@ func _1662723928_add_discord_author_image_fieldsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1662723928_add_discord_author_image_fields.up.sql", size: 75, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0x5b, 0x48, 0x57, 0x98, 0x55, 0x9a, 0xf1, 0x75, 0xf7, 0xb5, 0x41, 0x5e, 0x96, 0xc5, 0xce, 0xfc, 0x30, 0x5c, 0x15, 0x35, 0x9e, 0x4e, 0x4a, 0x3b, 0x38, 0x42, 0xc4, 0x27, 0x3c, 0x87, 0xbf}} return a, nil } @@ -1404,7 +1404,7 @@ func _1664195977_add_deleted_for_mesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1664195977_add_deleted_for_mes.up.sql", size: 352, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7d, 0x9d, 0x13, 0x9, 0xaa, 0x44, 0x14, 0x93, 0xe2, 0xf5, 0x53, 0xb7, 0x79, 0xa8, 0x18, 0xf0, 0x6c, 0xa4, 0x9c, 0x73, 0xc1, 0xaa, 0xc5, 0x2e, 0xc5, 0x41, 0xd7, 0x24, 0xb0, 0xd7, 0xb8, 0xdf}} return a, nil } @@ -1424,7 +1424,7 @@ func _1664367420_add_discord_attachments_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1664367420_add_discord_attachments_table.up.sql", size: 350, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0xe1, 0xb6, 0x4f, 0x6f, 0x92, 0x0, 0xb4, 0xf, 0x55, 0x12, 0x1c, 0x98, 0x6d, 0xbc, 0x1e, 0xfd, 0xae, 0x1c, 0xce, 0xd1, 0x3d, 0x2, 0x21, 0x2e, 0xc0, 0x13, 0xa, 0xb2, 0xec, 0x81, 0x13}} return a, nil } @@ -1444,7 +1444,7 @@ func _1665079662_add_spectated_column_in_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1665079662_add_spectated_column_in_communities.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0x5d, 0xfe, 0xe2, 0xbe, 0xdf, 0xba, 0x45, 0xe9, 0xfc, 0xa7, 0x5f, 0xda, 0x19, 0xdb, 0x40, 0x96, 0x59, 0x78, 0xa, 0xd7, 0x4a, 0xca, 0x1a, 0x93, 0xfb, 0xae, 0x6d, 0x74, 0x7, 0x36, 0xdd}} return a, nil } @@ -1464,7 +1464,7 @@ func _1665479047_add_community_id_in_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1665479047_add_community_id_in_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd9, 0x8f, 0x8b, 0x1c, 0xaa, 0x6a, 0x56, 0xd6, 0xa5, 0x88, 0x57, 0x13, 0x8f, 0xea, 0xb9, 0x23, 0x82, 0x50, 0xb7, 0x65, 0x1f, 0xab, 0xfa, 0x23, 0x6f, 0x0, 0x7, 0xb6, 0x6e, 0xb5, 0x85, 0x44}} return a, nil } @@ -1484,7 +1484,7 @@ func _1665484435_add_encrypted_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1665484435_add_encrypted_messages.up.sql", size: 402, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0x5c, 0x1e, 0x1c, 0x7f, 0xae, 0x5f, 0xeb, 0x3c, 0x6c, 0xcd, 0xc2, 0x99, 0x48, 0x5c, 0x83, 0xa0, 0xa2, 0x97, 0x5, 0x39, 0x82, 0x71, 0x90, 0x47, 0x21, 0x84, 0x29, 0x19, 0xa4, 0x7a, 0x90}} return a, nil } @@ -1504,7 +1504,7 @@ func _1665560200_add_contact_verification_individualUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1665560200_add_contact_verification_individual.up.sql", size: 509, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc5, 0xbb, 0x61, 0xfd, 0xbf, 0x33, 0x1d, 0x4e, 0x5f, 0xbd, 0x86, 0x42, 0xb0, 0x6c, 0xf7, 0x39, 0x19, 0x6e, 0x72, 0x35, 0xfd, 0x1b, 0xd6, 0xbd, 0xf6, 0x81, 0x21, 0xc4, 0xaa, 0x6, 0x62, 0x40}} return a, nil } @@ -1524,7 +1524,7 @@ func _1670921937_add_album_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1670921937_add_album_id.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xae, 0x83, 0x58, 0xb7, 0x77, 0x5, 0xca, 0xe3, 0xda, 0x32, 0x8f, 0x7b, 0xa4, 0x2f, 0x4c, 0xaf, 0x5f, 0xfa, 0x94, 0x36, 0xe4, 0xf9, 0x7, 0xc6, 0xd6, 0xb7, 0x90, 0xf3, 0xe5, 0xb5, 0x3}} return a, nil } @@ -1544,7 +1544,7 @@ func _1673373000_add_repliedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1673373000_add_replied.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x1c, 0xae, 0xf2, 0xf, 0xb4, 0xc2, 0xba, 0x3c, 0xfe, 0x7b, 0xb0, 0xf, 0xf, 0xd5, 0xbc, 0xe2, 0xa7, 0xad, 0x50, 0xd9, 0x5a, 0xe8, 0x96, 0x22, 0x65, 0x89, 0xcf, 0x4a, 0x9a, 0x1b, 0x94}} return a, nil } @@ -1564,7 +1564,7 @@ func _1673428910_add_image_width_heightUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "1673428910_add_image_width_height.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x74, 0xda, 0x93, 0x2a, 0x9b, 0x6b, 0xb7, 0x96, 0xcd, 0xac, 0xf, 0xaf, 0x54, 0x89, 0x9e, 0x91, 0x5b, 0xd0, 0x4a, 0xa, 0x8d, 0x9e, 0x80, 0x66, 0x26, 0x9e, 0xb5, 0xa9, 0x8, 0xec, 0x2d, 0x6c}} return a, nil } @@ -1584,7 +1584,7 @@ func _1674210659_add_contact_request_local_clockUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1674210659_add_contact_request_local_clock.up.sql", size: 691, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x92, 0x72, 0x39, 0xfe, 0x72, 0x98, 0xfc, 0x91, 0x20, 0x10, 0xe8, 0xf5, 0xac, 0x79, 0xa8, 0x1c, 0xca, 0x7b, 0x35, 0xa, 0xc1, 0x56, 0x49, 0x9a, 0xfc, 0xbd, 0x64, 0x9d, 0xdf, 0xd2, 0x60, 0x70}} return a, nil } @@ -1604,7 +1604,7 @@ func _1675212323_add_deleted_byUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1675212323_add_deleted_by.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x85, 0x37, 0x29, 0x2f, 0xd, 0x5a, 0xb6, 0xdb, 0xa7, 0x8, 0x86, 0xfc, 0x7a, 0x70, 0xd8, 0x4d, 0xe6, 0xf0, 0x57, 0xe7, 0xd1, 0x95, 0xd5, 0x4, 0x40, 0x2f, 0x7a, 0x5, 0x4f, 0xc2, 0x97, 0xbc}} return a, nil } @@ -1624,7 +1624,7 @@ func _1675247084_add_activity_center_statesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1675247084_add_activity_center_states.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xba, 0x90, 0x7d, 0x55, 0xc7, 0x40, 0x29, 0x26, 0x97, 0x45, 0x5c, 0xdf, 0xba, 0x61, 0xb, 0xfc, 0x3d, 0x7a, 0x6c, 0x42, 0xe4, 0x95, 0x78, 0xb0, 0xc5, 0x1f, 0x73, 0xe9, 0x33, 0x51, 0xc8, 0x81}} return a, nil } @@ -1644,7 +1644,7 @@ func _1675272329_fix_protocol_migrationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1675272329_fix_protocol_migration.up.sql", size: 183, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xe0, 0x11, 0x4c, 0x66, 0x55, 0x72, 0xd3, 0xe6, 0x98, 0xa4, 0xe7, 0x44, 0xf9, 0x3b, 0x3a, 0x3f, 0xd9, 0x91, 0x1e, 0x4f, 0xfc, 0x56, 0x63, 0xe5, 0xa4, 0x83, 0xfc, 0x7c, 0xcf, 0x18, 0x99}} return a, nil } @@ -1664,7 +1664,7 @@ func _1676998418_fix_activity_center_migrationUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1676998418_fix_activity_center_migration.up.sql", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8a, 0xdc, 0x64, 0xb1, 0x47, 0x67, 0xda, 0x2c, 0x26, 0x29, 0x6b, 0x6f, 0xb, 0xfa, 0x45, 0xf3, 0xad, 0x8b, 0x1a, 0x5f, 0x1c, 0xed, 0xd7, 0xea, 0x54, 0xf5, 0x3f, 0xb8, 0xf6, 0xf9, 0x44, 0x53}} return a, nil } @@ -1684,7 +1684,7 @@ func _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql( return nil, err } - info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql", size: 381, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x38, 0x3a, 0x95, 0xaf, 0x81, 0xb0, 0x85, 0x8d, 0x73, 0xda, 0x7b, 0x2a, 0x35, 0xa6, 0xaa, 0xcc, 0x4c, 0x35, 0xa3, 0xa8, 0xbd, 0xd1, 0x37, 0xe8, 0x5d, 0x83, 0xa4, 0x33, 0x1f, 0x10, 0xe4, 0xe6}} return a, nil } @@ -1704,7 +1704,7 @@ func _1677486338_add_community_tokens_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1677486338_add_community_tokens_table.up.sql", size: 527, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfb, 0x7b, 0x3d, 0x7e, 0x79, 0xc4, 0x3a, 0xf1, 0xda, 0x4b, 0xc6, 0xd1, 0xd, 0xfb, 0xb2, 0xb9, 0x7f, 0x81, 0x29, 0xab, 0xd8, 0x1, 0x20, 0xd7, 0xe1, 0xaf, 0x3e, 0x67, 0x1b, 0xdb, 0xf9, 0xd5}} return a, nil } @@ -1724,7 +1724,7 @@ func _1678292329_add_collapsed_categoriesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1678292329_add_collapsed_categories.up.sql", size: 170, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x46, 0x63, 0x86, 0xd5, 0x7, 0xe2, 0x25, 0x15, 0x1b, 0xfe, 0xf3, 0xe, 0x50, 0x48, 0x11, 0x3c, 0x7c, 0xc6, 0xe5, 0xab, 0x8d, 0x1f, 0xe8, 0x3c, 0xcb, 0xf0, 0x8d, 0xa7, 0x49, 0x4c, 0x16, 0x4f}} return a, nil } @@ -1744,7 +1744,7 @@ func _1678800760_add_index_to_raw_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1678800760_add_index_to_raw_messages.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9d, 0xd9, 0x8d, 0x22, 0x46, 0xae, 0x7b, 0x53, 0x3e, 0x51, 0x39, 0xad, 0xad, 0x38, 0x50, 0x6, 0xfa, 0xb9, 0xc4, 0x9f, 0x8d, 0xd2, 0x67, 0x0, 0xef, 0x58, 0x13, 0xab, 0x6a, 0x67, 0xf3, 0x7e}} return a, nil } @@ -1764,7 +1764,7 @@ func _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql( return nil, err } - info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql", size: 168, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x82, 0x1, 0xb4, 0xb2, 0x94, 0x25, 0xd5, 0x2e, 0x45, 0xc3, 0xb1, 0x2c, 0xeb, 0x1a, 0x52, 0xe0, 0x4b, 0x9b, 0x46, 0xf4, 0xc, 0xac, 0x1, 0x1e, 0x90, 0xbc, 0x64, 0x38, 0x10, 0xf1, 0xaf, 0xac}} return a, nil } @@ -1784,7 +1784,7 @@ func _1679326850_add_community_token_ownersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1679326850_add_community_token_owners.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xe6, 0x25, 0x67, 0xd1, 0xd6, 0x54, 0x88, 0xb1, 0x80, 0x1e, 0x2d, 0x9c, 0xfa, 0x1c, 0xc7, 0x63, 0x6e, 0xf9, 0x66, 0xb1, 0x68, 0xc6, 0xf8, 0x51, 0xb6, 0xd5, 0x4e, 0x93, 0x39, 0x5e, 0xc0}} return a, nil } @@ -1804,7 +1804,7 @@ func _1680011500_add_album_images_countUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1680011500_add_album_images_count.up.sql", size: 71, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0x55, 0x99, 0x31, 0xcc, 0x80, 0x78, 0xc3, 0x51, 0x13, 0x63, 0x6f, 0x1a, 0xfd, 0x53, 0xd2, 0xf4, 0x13, 0x4b, 0xb2, 0x4f, 0x99, 0xb8, 0x7b, 0x7, 0x99, 0xb6, 0xab, 0x88, 0x2e, 0x7, 0x8}} return a, nil } @@ -1824,7 +1824,7 @@ func _1680114896_add_index_on_album_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1684180118, 0)} + info := bindataFileInfo{name: "1680114896_add_index_on_album_id.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb3, 0x7e, 0xd5, 0xcd, 0x2d, 0xab, 0xd4, 0x32, 0x26, 0x50, 0x3a, 0x5b, 0x8e, 0x1c, 0xcc, 0x35, 0xf8, 0xa1, 0x2a, 0xc1, 0x23, 0xf6, 0x90, 0xfe, 0x84, 0x3, 0xde, 0x5a, 0xee, 0xc6, 0xfc, 0x2a}} return a, nil } @@ -1844,7 +1844,7 @@ func _1681655289_add_mute_tillUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1681655289_add_mute_till.up.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xbe, 0xce, 0xb8, 0xe1, 0x30, 0xe7, 0xa7, 0xe0, 0x7d, 0x97, 0xf4, 0x26, 0xb8, 0x57, 0x1d, 0x2a, 0xed, 0x18, 0xf2, 0xa, 0xe3, 0x77, 0x29, 0x18, 0x55, 0x9, 0x74, 0x2c, 0x24, 0x5a, 0x19}} return a, nil } @@ -1864,7 +1864,7 @@ func _1681934966_add_index_response_toUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1681934966_add_index_response_to.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3b, 0xed, 0xa6, 0x7e, 0x51, 0xf2, 0xa1, 0x3c, 0x78, 0x9a, 0xa7, 0x7a, 0x51, 0x25, 0x7d, 0xdd, 0x4b, 0xf3, 0x45, 0xeb, 0x3f, 0xad, 0x23, 0x3e, 0xac, 0x16, 0x28, 0x62, 0x7, 0x8c, 0xe0, 0xa0}} return a, nil } @@ -1884,7 +1884,7 @@ func _1682528339_add_index_user_messages_unseenUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1682528339_add_index_user_messages_unseen.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x35, 0xfa, 0x98, 0xdd, 0x74, 0x5e, 0x21, 0x1f, 0xf2, 0x56, 0x17, 0x96, 0xfe, 0xbb, 0x44, 0x4c, 0xa1, 0xd8, 0x9f, 0x2e, 0x6, 0x2f, 0xd8, 0x23, 0xec, 0x94, 0x8c, 0x53, 0xf3, 0xf0, 0x40, 0xe7}} return a, nil } @@ -1904,7 +1904,7 @@ func _1683707289_recreate_deleted_for_mesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1683707289_recreate_deleted_for_mes.up.sql", size: 408, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5b, 0x9d, 0xd6, 0x45, 0x41, 0x29, 0x44, 0xf6, 0x14, 0x38, 0xeb, 0xdf, 0x6b, 0x5d, 0x9c, 0x45, 0x4b, 0xc3, 0xa8, 0xbd, 0x38, 0x14, 0xd9, 0x73, 0xf1, 0x51, 0xbb, 0x9f, 0x14, 0x36, 0xf2, 0x11}} return a, nil } @@ -1924,7 +1924,7 @@ func _1683725607_mark_discord_messages_as_seenUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1683725607_mark_discord_messages_as_seen.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x2a, 0xc3, 0x43, 0xea, 0x5e, 0x3, 0x2e, 0xce, 0x79, 0xea, 0xa5, 0x67, 0x61, 0x8c, 0xe4, 0xb9, 0xb7, 0x4d, 0xd5, 0xd5, 0xb0, 0x35, 0xc8, 0x2b, 0xa0, 0x3f, 0xd8, 0xde, 0xea, 0x4e, 0x16}} return a, nil } @@ -1944,7 +1944,7 @@ func _1684174617_add_url_previews_to_user_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1684174617_add_url_previews_to_user_messages.up.sql", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdc, 0xb0, 0x72, 0xe3, 0xe4, 0xa9, 0x63, 0x82, 0xea, 0x52, 0x70, 0xb6, 0xa0, 0x73, 0x55, 0x7a, 0x78, 0xa8, 0xd2, 0xb0, 0xf4, 0x78, 0x8a, 0xd, 0x5a, 0xa2, 0x9d, 0x92, 0xdc, 0xce, 0x1c, 0x71}} return a, nil } @@ -1964,7 +1964,7 @@ func _1684175608_add_token_balancesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1684175608_add_token_balances.up.sql", size: 467, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x4e, 0xe0, 0x48, 0x34, 0x1, 0x4d, 0x88, 0x11, 0x54, 0x20, 0x52, 0x5c, 0x57, 0x14, 0xa9, 0xa9, 0x36, 0xa4, 0x28, 0x59, 0x48, 0xa8, 0xa, 0x76, 0xec, 0x37, 0xee, 0x9e, 0xd2, 0x20, 0xaa}} return a, nil } @@ -1984,7 +1984,7 @@ func _1684979808_sync_activity_center_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1684979808_sync_activity_center_notifications.up.sql", size: 169, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0xf5, 0xf7, 0x94, 0xa9, 0xa1, 0x60, 0x26, 0x9d, 0xca, 0x31, 0xf, 0x14, 0xd, 0x70, 0xf8, 0xab, 0x40, 0x29, 0x73, 0x61, 0xbd, 0x1b, 0xb6, 0xc4, 0x31, 0x77, 0x9e, 0x32, 0xa8, 0xce, 0x6d}} return a, nil } @@ -2004,7 +2004,7 @@ func _1685383829_add_communities_mute_tillUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1685383829_add_communities_mute_till.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbf, 0x58, 0x96, 0xe5, 0x66, 0xcb, 0xde, 0xed, 0x76, 0xb8, 0x5a, 0x86, 0x81, 0x9a, 0x60, 0x51, 0x12, 0x37, 0x54, 0x9a, 0x36, 0x3e, 0xd1, 0x4a, 0xbe, 0x9a, 0xab, 0x20, 0x7f, 0x1d, 0xf4, 0x73}} return a, nil } @@ -2024,7 +2024,7 @@ func _1685964183_add_chainids_to_revealed_addressesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1685964183_add_chainids_to_revealed_addresses.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0xb5, 0xa8, 0xd7, 0xad, 0x9c, 0x54, 0xa5, 0xe9, 0xdb, 0x42, 0x2d, 0xd0, 0xd7, 0x22, 0x1, 0x93, 0xf3, 0x4f, 0x53, 0xf7, 0x1e, 0xbe, 0x4b, 0xac, 0xc7, 0x63, 0x15, 0xdf, 0xe0, 0x6, 0xf8}} return a, nil } @@ -2044,7 +2044,7 @@ func _1687370421_add_communities_muted_till_newUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1687370421_add_communities_muted_till_new.up.sql", size: 635, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x65, 0x73, 0x96, 0x1d, 0xc8, 0x3e, 0xca, 0xf5, 0xdc, 0xe3, 0xac, 0x3f, 0x9c, 0xc3, 0x67, 0x12, 0x9c, 0x19, 0x1, 0x4, 0x2b, 0xea, 0x6b, 0xe1, 0x59, 0x59, 0x89, 0x3d, 0xef, 0x4a, 0x6e, 0xbe}} return a, nil } @@ -2064,7 +2064,7 @@ func _1687416607_add_communities_check_channel_permission_responses_tableUpSql() return nil, err } - info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0644), modTime: time.Unix(1688509829, 0)} + info := bindataFileInfo{name: "1687416607_add_communities_check_channel_permission_responses_table.up.sql", size: 739, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc2, 0x6, 0x3, 0x1a, 0xde, 0x9d, 0xbc, 0x50, 0x9d, 0xf1, 0x6d, 0x5a, 0x1c, 0x28, 0x92, 0x19, 0x89, 0x76, 0x4e, 0x8b, 0x60, 0xa9, 0xf, 0xe9, 0x76, 0xf1, 0xee, 0x75, 0x92, 0xbd, 0xda, 0x72}} return a, nil } @@ -2084,7 +2084,7 @@ func _1687856939_add_community_tokens_decimalsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1689694156, 0)} + info := bindataFileInfo{name: "1687856939_add_community_tokens_decimals.up.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x59, 0x76, 0x42, 0x70, 0xc9, 0x7b, 0x16, 0xf6, 0xfe, 0x7, 0x1c, 0x99, 0xe5, 0x38, 0xfd, 0xa0, 0x3b, 0x93, 0x40, 0xbc, 0x66, 0xc2, 0xd1, 0xdd, 0xe9, 0xc7, 0xbf, 0xae, 0x36, 0xcc, 0x46, 0x57}} return a, nil } @@ -2104,7 +2104,7 @@ func _1687959987_modify_community_tokens_supply_as_stringUpSql() (*asset, error) return nil, err } - info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1689694156, 0)} + info := bindataFileInfo{name: "1687959987_modify_community_tokens_supply_as_string.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x57, 0x89, 0xbf, 0x9b, 0xed, 0x9b, 0x18, 0x3f, 0x84, 0xb5, 0x3c, 0x78, 0x40, 0x60, 0xea, 0x33, 0x26, 0x50, 0x3, 0xda, 0x28, 0x92, 0xd3, 0xb6, 0xff, 0x40, 0xa7, 0x19, 0x2, 0xa7, 0x17, 0xf9}} return a, nil } @@ -2124,7 +2124,7 @@ func _1689258900_add_airdrop_address_to_revealed_addressesUpSql() (*asset, error return nil, err } - info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1689694156, 0)} + info := bindataFileInfo{name: "1689258900_add_airdrop_address_to_revealed_addresses.up.sql", size: 99, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7e, 0xaf, 0x5c, 0xd, 0xe5, 0x1e, 0x67, 0x1a, 0x6d, 0xd, 0x28, 0x20, 0x7a, 0x1a, 0x45, 0x6e, 0xba, 0x80, 0x91, 0xb0, 0xd6, 0xfd, 0xc2, 0xb9, 0x42, 0x5c, 0x8d, 0x6e, 0x3e, 0x6e, 0xb2}} return a, nil } @@ -2144,11 +2144,31 @@ func _1689266326_create_communities_events_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0644), modTime: time.Unix(1689856170, 0)} + info := bindataFileInfo{name: "1689266326_create_communities_events_table.up.sql", size: 164, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x4e, 0xe, 0xba, 0x29, 0x16, 0x46, 0x38, 0x19, 0xa4, 0x5, 0x40, 0x46, 0xaf, 0x9a, 0x6, 0x89, 0xe0, 0x9c, 0xcc, 0xec, 0x8a, 0xb, 0x40, 0x85, 0x6f, 0xcc, 0x5, 0x24, 0x2a, 0x33, 0xfa}} return a, nil } +var __1689931300_add_community_tokens_deployer_and_priv_levelUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xce\xcf\xcd\x2d\xcd\xcb\x2c\xa9\x8c\x2f\xc9\xcf\x4e\xcd\x2b\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x53\x48\x49\x2d\xc8\xc9\xaf\x4c\x2d\x52\x08\x71\x8d\x08\x51\xf0\xf3\x0f\x51\xf0\x0b\xf5\xf1\x51\x70\x71\x75\x73\x0c\xf5\x09\x51\x50\x52\xb2\xe6\x22\xd6\xa8\x82\xa2\xcc\xb2\xcc\x9c\xd4\xf4\xd4\xe2\xf8\x9c\xd4\xb2\xd4\x1c\x05\x4f\x3f\x2c\x26\x1a\x59\x73\x01\x02\x00\x00\xff\xff\x7a\x52\x66\x6c\x9c\x00\x00\x00") + +func _1689931300_add_community_tokens_deployer_and_priv_levelUpSqlBytes() ([]byte, error) { + return bindataRead( + __1689931300_add_community_tokens_deployer_and_priv_levelUpSql, + "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", + ) +} + +func _1689931300_add_community_tokens_deployer_and_priv_levelUpSql() (*asset, error) { + bytes, err := _1689931300_add_community_tokens_deployer_and_priv_levelUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1689931300_add_community_tokens_deployer_and_priv_level.up.sql", size: 156, mode: os.FileMode(0644), modTime: time.Unix(1691148026, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3f, 0x24, 0xd9, 0x4d, 0xe, 0x4b, 0xe3, 0x4c, 0xd1, 0xc, 0x72, 0xd4, 0x99, 0xe4, 0xb9, 0xb8, 0xe9, 0x38, 0x9e, 0x11, 0x48, 0xea, 0xe3, 0x5d, 0xd9, 0xd0, 0xef, 0x96, 0x38, 0x5a, 0xd4, 0xa5}} + return a, nil +} + var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") func readmeMdBytes() ([]byte, error) { @@ -2164,7 +2184,7 @@ func readmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}} return a, nil } @@ -2184,7 +2204,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1684179677, 0)} + info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1691050123, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}} return a, nil } @@ -2280,218 +2300,124 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ - "000001_init.down.db.sql": _000001_initDownDbSql, - - "000001_init.up.db.sql": _000001_initUpDbSql, - - "000002_add_last_ens_clock_value.up.sql": _000002_add_last_ens_clock_valueUpSql, - - "1586358095_add_replace.up.sql": _1586358095_add_replaceUpSql, - - "1588665364_add_image_data.up.sql": _1588665364_add_image_dataUpSql, - - "1589365189_add_pow_target.up.sql": _1589365189_add_pow_targetUpSql, - - "1591277220_add_index_messages.up.sql": _1591277220_add_index_messagesUpSql, - - "1593087212_add_mute_chat_and_raw_message_fields.up.sql": _1593087212_add_mute_chat_and_raw_message_fieldsUpSql, - - "1595862781_add_audio_data.up.sql": _1595862781_add_audio_dataUpSql, - - "1595865249_create_emoji_reactions_table.up.sql": _1595865249_create_emoji_reactions_tableUpSql, - - "1596805115_create_group_chat_invitations_table.up.sql": _1596805115_create_group_chat_invitations_tableUpSql, - - "1597322655_add_invitation_admin_chat_field.up.sql": _1597322655_add_invitation_admin_chat_fieldUpSql, - - "1597757544_add_nickname.up.sql": _1597757544_add_nicknameUpSql, - - "1598955122_add_mentions.up.sql": _1598955122_add_mentionsUpSql, - - "1599641390_add_emoji_reactions_index.up.sql": _1599641390_add_emoji_reactions_indexUpSql, - - "1599720851_add_seen_index_remove_long_messages.up.sql": _1599720851_add_seen_index_remove_long_messagesUpSql, - - "1603198582_add_profile_chat_field.up.sql": _1603198582_add_profile_chat_fieldUpSql, - - "1603816533_add_links.up.sql": _1603816533_add_linksUpSql, - - "1603888149_create_chat_identity_last_published_table.up.sql": _1603888149_create_chat_identity_last_published_tableUpSql, - - "1605075346_add_communities.up.sql": _1605075346_add_communitiesUpSql, - - "1610117927_add_message_cache.up.sql": _1610117927_add_message_cacheUpSql, - - "1610959908_add_dont_wrap_to_raw_messages.up.sql": _1610959908_add_dont_wrap_to_raw_messagesUpSql, - - "1610960912_add_send_on_personal_topic.up.sql": _1610960912_add_send_on_personal_topicUpSql, - - "1612870480_add_datasync_id.up.sql": _1612870480_add_datasync_idUpSql, - - "1614152139_add_communities_request_to_join.up.sql": _1614152139_add_communities_request_to_joinUpSql, - - "1615374373_add_confirmations.up.sql": _1615374373_add_confirmationsUpSql, - - "1617694931_add_notification_center.up.sql": _1617694931_add_notification_centerUpSql, - - "1618923660_create_pin_messages.up.sql": _1618923660_create_pin_messagesUpSql, - - "1619094007_add_joined_chat_field.up.sql": _1619094007_add_joined_chat_fieldUpSql, - - "1619099821_add_last_synced_field.up.sql": _1619099821_add_last_synced_fieldUpSql, - - "1621933219_add_mentioned.up.sql": _1621933219_add_mentionedUpSql, - - "1622010048_add_unviewed_mentions_count.up.sql": _1622010048_add_unviewed_mentions_countUpSql, - - "1622061278_add_message_activity_center_notification_field.up.sql": _1622061278_add_message_activity_center_notification_fieldUpSql, - - "1622464518_set_synced_to_from.up.sql": _1622464518_set_synced_to_fromUpSql, - - "1622464519_add_chat_description.up.sql": _1622464519_add_chat_descriptionUpSql, - - "1622622253_add_pinned_by_to_pin_messages.up.sql": _1622622253_add_pinned_by_to_pin_messagesUpSql, - - "1623938329_add_author_activity_center_notification_field.up.sql": _1623938329_add_author_activity_center_notification_fieldUpSql, - - "1623938330_add_edit_messages.up.sql": _1623938330_add_edit_messagesUpSql, - - "1624978434_add_muted_community.up.sql": _1624978434_add_muted_communityUpSql, - - "1625018910_add_repply_message_activity_center_notification_field.up.sql": _1625018910_add_repply_message_activity_center_notification_fieldUpSql, - - "1625762506_add_deleted_messages.up.sql": _1625762506_add_deleted_messagesUpSql, - - "1627388946_add_communities_synced_at.up.sql": _1627388946_add_communities_synced_atUpSql, - - "1628280060_create-usermessages-index.sql": _1628280060_createUsermessagesIndexSql, - - "1632303896_modify_contacts_table.up.sql": _1632303896_modify_contacts_tableUpSql, - - "1633349838_add_emoji_column_in_chats.up.sql": _1633349838_add_emoji_column_in_chatsUpSql, - - "1634831235_add_highlight_column_in_chats.up.sql": _1634831235_add_highlight_column_in_chatsUpSql, - - "1634896007_add_last_updated_locally_and_removed.up.sql": _1634896007_add_last_updated_locally_and_removedUpSql, - - "1635840039_add_clock_read_at_column_in_chats.up.sql": _1635840039_add_clock_read_at_column_in_chatsUpSql, - - "1637852321_add_received_invitation_admin_column_in_chats.up.sql": _1637852321_add_received_invitation_admin_column_in_chatsUpSql, - - "1645034601_display_name.up.sql": _1645034601_display_nameUpSql, - - "1645034602_add_mutual_contact_request.up.sql": _1645034602_add_mutual_contact_requestUpSql, - - "1650373957_add_contact_request_state.up.sql": _1650373957_add_contact_request_stateUpSql, - - "1656958989_contact_verification.up.sql": _1656958989_contact_verificationUpSql, - - "1658236268_add_discord_message_authors_table.up.sql": _1658236268_add_discord_message_authors_tableUpSql, - - "1659619997_add_discord_messages_table.up.sql": _1659619997_add_discord_messages_tableUpSql, - - "1660226788_create_chat_identity_social_links.up.sql": _1660226788_create_chat_identity_social_linksUpSql, - - "1660226789_add_walletconnectsessions_table.up.sql": _1660226789_add_walletconnectsessions_tableUpSql, - - "1661242854_add_communities_requests_to_leave.up.sql": _1661242854_add_communities_requests_to_leaveUpSql, - - "1662044232_add_chat_image.up.sql": _1662044232_add_chat_imageUpSql, - - "1662106895_add_chat_first_message_timestamp.up.sql": _1662106895_add_chat_first_message_timestampUpSql, - - "1662723928_add_discord_author_image_fields.up.sql": _1662723928_add_discord_author_image_fieldsUpSql, - - "1664195977_add_deleted_for_mes.up.sql": _1664195977_add_deleted_for_mesUpSql, - - "1664367420_add_discord_attachments_table.up.sql": _1664367420_add_discord_attachments_tableUpSql, - - "1665079662_add_spectated_column_in_communities.up.sql": _1665079662_add_spectated_column_in_communitiesUpSql, - - "1665479047_add_community_id_in_notifications.up.sql": _1665479047_add_community_id_in_notificationsUpSql, - - "1665484435_add_encrypted_messages.up.sql": _1665484435_add_encrypted_messagesUpSql, - - "1665560200_add_contact_verification_individual.up.sql": _1665560200_add_contact_verification_individualUpSql, - - "1670921937_add_album_id.up.sql": _1670921937_add_album_idUpSql, - - "1673373000_add_replied.up.sql": _1673373000_add_repliedUpSql, - - "1673428910_add_image_width_height.up.sql": _1673428910_add_image_width_heightUpSql, - - "1674210659_add_contact_request_local_clock.up.sql": _1674210659_add_contact_request_local_clockUpSql, - - "1675212323_add_deleted_by.up.sql": _1675212323_add_deleted_byUpSql, - - "1675247084_add_activity_center_states.up.sql": _1675247084_add_activity_center_statesUpSql, - - "1675272329_fix_protocol_migration.up.sql": _1675272329_fix_protocol_migrationUpSql, - - "1676998418_fix_activity_center_migration.up.sql": _1676998418_fix_activity_center_migrationUpSql, - + "000001_init.down.db.sql": _000001_initDownDbSql, + "000001_init.up.db.sql": _000001_initUpDbSql, + "000002_add_last_ens_clock_value.up.sql": _000002_add_last_ens_clock_valueUpSql, + "1586358095_add_replace.up.sql": _1586358095_add_replaceUpSql, + "1588665364_add_image_data.up.sql": _1588665364_add_image_dataUpSql, + "1589365189_add_pow_target.up.sql": _1589365189_add_pow_targetUpSql, + "1591277220_add_index_messages.up.sql": _1591277220_add_index_messagesUpSql, + "1593087212_add_mute_chat_and_raw_message_fields.up.sql": _1593087212_add_mute_chat_and_raw_message_fieldsUpSql, + "1595862781_add_audio_data.up.sql": _1595862781_add_audio_dataUpSql, + "1595865249_create_emoji_reactions_table.up.sql": _1595865249_create_emoji_reactions_tableUpSql, + "1596805115_create_group_chat_invitations_table.up.sql": _1596805115_create_group_chat_invitations_tableUpSql, + "1597322655_add_invitation_admin_chat_field.up.sql": _1597322655_add_invitation_admin_chat_fieldUpSql, + "1597757544_add_nickname.up.sql": _1597757544_add_nicknameUpSql, + "1598955122_add_mentions.up.sql": _1598955122_add_mentionsUpSql, + "1599641390_add_emoji_reactions_index.up.sql": _1599641390_add_emoji_reactions_indexUpSql, + "1599720851_add_seen_index_remove_long_messages.up.sql": _1599720851_add_seen_index_remove_long_messagesUpSql, + "1603198582_add_profile_chat_field.up.sql": _1603198582_add_profile_chat_fieldUpSql, + "1603816533_add_links.up.sql": _1603816533_add_linksUpSql, + "1603888149_create_chat_identity_last_published_table.up.sql": _1603888149_create_chat_identity_last_published_tableUpSql, + "1605075346_add_communities.up.sql": _1605075346_add_communitiesUpSql, + "1610117927_add_message_cache.up.sql": _1610117927_add_message_cacheUpSql, + "1610959908_add_dont_wrap_to_raw_messages.up.sql": _1610959908_add_dont_wrap_to_raw_messagesUpSql, + "1610960912_add_send_on_personal_topic.up.sql": _1610960912_add_send_on_personal_topicUpSql, + "1612870480_add_datasync_id.up.sql": _1612870480_add_datasync_idUpSql, + "1614152139_add_communities_request_to_join.up.sql": _1614152139_add_communities_request_to_joinUpSql, + "1615374373_add_confirmations.up.sql": _1615374373_add_confirmationsUpSql, + "1617694931_add_notification_center.up.sql": _1617694931_add_notification_centerUpSql, + "1618923660_create_pin_messages.up.sql": _1618923660_create_pin_messagesUpSql, + "1619094007_add_joined_chat_field.up.sql": _1619094007_add_joined_chat_fieldUpSql, + "1619099821_add_last_synced_field.up.sql": _1619099821_add_last_synced_fieldUpSql, + "1621933219_add_mentioned.up.sql": _1621933219_add_mentionedUpSql, + "1622010048_add_unviewed_mentions_count.up.sql": _1622010048_add_unviewed_mentions_countUpSql, + "1622061278_add_message_activity_center_notification_field.up.sql": _1622061278_add_message_activity_center_notification_fieldUpSql, + "1622464518_set_synced_to_from.up.sql": _1622464518_set_synced_to_fromUpSql, + "1622464519_add_chat_description.up.sql": _1622464519_add_chat_descriptionUpSql, + "1622622253_add_pinned_by_to_pin_messages.up.sql": _1622622253_add_pinned_by_to_pin_messagesUpSql, + "1623938329_add_author_activity_center_notification_field.up.sql": _1623938329_add_author_activity_center_notification_fieldUpSql, + "1623938330_add_edit_messages.up.sql": _1623938330_add_edit_messagesUpSql, + "1624978434_add_muted_community.up.sql": _1624978434_add_muted_communityUpSql, + "1625018910_add_repply_message_activity_center_notification_field.up.sql": _1625018910_add_repply_message_activity_center_notification_fieldUpSql, + "1625762506_add_deleted_messages.up.sql": _1625762506_add_deleted_messagesUpSql, + "1627388946_add_communities_synced_at.up.sql": _1627388946_add_communities_synced_atUpSql, + "1628280060_create-usermessages-index.sql": _1628280060_createUsermessagesIndexSql, + "1632303896_modify_contacts_table.up.sql": _1632303896_modify_contacts_tableUpSql, + "1633349838_add_emoji_column_in_chats.up.sql": _1633349838_add_emoji_column_in_chatsUpSql, + "1634831235_add_highlight_column_in_chats.up.sql": _1634831235_add_highlight_column_in_chatsUpSql, + "1634896007_add_last_updated_locally_and_removed.up.sql": _1634896007_add_last_updated_locally_and_removedUpSql, + "1635840039_add_clock_read_at_column_in_chats.up.sql": _1635840039_add_clock_read_at_column_in_chatsUpSql, + "1637852321_add_received_invitation_admin_column_in_chats.up.sql": _1637852321_add_received_invitation_admin_column_in_chatsUpSql, + "1645034601_display_name.up.sql": _1645034601_display_nameUpSql, + "1645034602_add_mutual_contact_request.up.sql": _1645034602_add_mutual_contact_requestUpSql, + "1650373957_add_contact_request_state.up.sql": _1650373957_add_contact_request_stateUpSql, + "1656958989_contact_verification.up.sql": _1656958989_contact_verificationUpSql, + "1658236268_add_discord_message_authors_table.up.sql": _1658236268_add_discord_message_authors_tableUpSql, + "1659619997_add_discord_messages_table.up.sql": _1659619997_add_discord_messages_tableUpSql, + "1660226788_create_chat_identity_social_links.up.sql": _1660226788_create_chat_identity_social_linksUpSql, + "1660226789_add_walletconnectsessions_table.up.sql": _1660226789_add_walletconnectsessions_tableUpSql, + "1661242854_add_communities_requests_to_leave.up.sql": _1661242854_add_communities_requests_to_leaveUpSql, + "1662044232_add_chat_image.up.sql": _1662044232_add_chat_imageUpSql, + "1662106895_add_chat_first_message_timestamp.up.sql": _1662106895_add_chat_first_message_timestampUpSql, + "1662723928_add_discord_author_image_fields.up.sql": _1662723928_add_discord_author_image_fieldsUpSql, + "1664195977_add_deleted_for_mes.up.sql": _1664195977_add_deleted_for_mesUpSql, + "1664367420_add_discord_attachments_table.up.sql": _1664367420_add_discord_attachments_tableUpSql, + "1665079662_add_spectated_column_in_communities.up.sql": _1665079662_add_spectated_column_in_communitiesUpSql, + "1665479047_add_community_id_in_notifications.up.sql": _1665479047_add_community_id_in_notificationsUpSql, + "1665484435_add_encrypted_messages.up.sql": _1665484435_add_encrypted_messagesUpSql, + "1665560200_add_contact_verification_individual.up.sql": _1665560200_add_contact_verification_individualUpSql, + "1670921937_add_album_id.up.sql": _1670921937_add_album_idUpSql, + "1673373000_add_replied.up.sql": _1673373000_add_repliedUpSql, + "1673428910_add_image_width_height.up.sql": _1673428910_add_image_width_heightUpSql, + "1674210659_add_contact_request_local_clock.up.sql": _1674210659_add_contact_request_local_clockUpSql, + "1675212323_add_deleted_by.up.sql": _1675212323_add_deleted_byUpSql, + "1675247084_add_activity_center_states.up.sql": _1675247084_add_activity_center_statesUpSql, + "1675272329_fix_protocol_migration.up.sql": _1675272329_fix_protocol_migrationUpSql, + "1676998418_fix_activity_center_migration.up.sql": _1676998418_fix_activity_center_migrationUpSql, "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": _1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, - - "1677486338_add_community_tokens_table.up.sql": _1677486338_add_community_tokens_tableUpSql, - - "1678292329_add_collapsed_categories.up.sql": _1678292329_add_collapsed_categoriesUpSql, - - "1678800760_add_index_to_raw_messages.up.sql": _1678800760_add_index_to_raw_messagesUpSql, - + "1677486338_add_community_tokens_table.up.sql": _1677486338_add_community_tokens_tableUpSql, + "1678292329_add_collapsed_categories.up.sql": _1678292329_add_collapsed_categoriesUpSql, + "1678800760_add_index_to_raw_messages.up.sql": _1678800760_add_index_to_raw_messagesUpSql, "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": _1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, - - "1679326850_add_community_token_owners.up.sql": _1679326850_add_community_token_ownersUpSql, - - "1680011500_add_album_images_count.up.sql": _1680011500_add_album_images_countUpSql, - - "1680114896_add_index_on_album_id.up.sql": _1680114896_add_index_on_album_idUpSql, - - "1681655289_add_mute_till.up.sql": _1681655289_add_mute_tillUpSql, - - "1681934966_add_index_response_to.up.sql": _1681934966_add_index_response_toUpSql, - - "1682528339_add_index_user_messages_unseen.up.sql": _1682528339_add_index_user_messages_unseenUpSql, - - "1683707289_recreate_deleted_for_mes.up.sql": _1683707289_recreate_deleted_for_mesUpSql, - - "1683725607_mark_discord_messages_as_seen.up.sql": _1683725607_mark_discord_messages_as_seenUpSql, - - "1684174617_add_url_previews_to_user_messages.up.sql": _1684174617_add_url_previews_to_user_messagesUpSql, - - "1684175608_add_token_balances.up.sql": _1684175608_add_token_balancesUpSql, - - "1684979808_sync_activity_center_notifications.up.sql": _1684979808_sync_activity_center_notificationsUpSql, - - "1685383829_add_communities_mute_till.up.sql": _1685383829_add_communities_mute_tillUpSql, - - "1685964183_add_chainids_to_revealed_addresses.up.sql": _1685964183_add_chainids_to_revealed_addressesUpSql, - - "1687370421_add_communities_muted_till_new.up.sql": _1687370421_add_communities_muted_till_newUpSql, - - "1687416607_add_communities_check_channel_permission_responses_table.up.sql": _1687416607_add_communities_check_channel_permission_responses_tableUpSql, - - "1687856939_add_community_tokens_decimals.up.sql": _1687856939_add_community_tokens_decimalsUpSql, - - "1687959987_modify_community_tokens_supply_as_string.up.sql": _1687959987_modify_community_tokens_supply_as_stringUpSql, - - "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": _1689258900_add_airdrop_address_to_revealed_addressesUpSql, - - "1689266326_create_communities_events_table.up.sql": _1689266326_create_communities_events_tableUpSql, - + "1679326850_add_community_token_owners.up.sql": _1679326850_add_community_token_ownersUpSql, + "1680011500_add_album_images_count.up.sql": _1680011500_add_album_images_countUpSql, + "1680114896_add_index_on_album_id.up.sql": _1680114896_add_index_on_album_idUpSql, + "1681655289_add_mute_till.up.sql": _1681655289_add_mute_tillUpSql, + "1681934966_add_index_response_to.up.sql": _1681934966_add_index_response_toUpSql, + "1682528339_add_index_user_messages_unseen.up.sql": _1682528339_add_index_user_messages_unseenUpSql, + "1683707289_recreate_deleted_for_mes.up.sql": _1683707289_recreate_deleted_for_mesUpSql, + "1683725607_mark_discord_messages_as_seen.up.sql": _1683725607_mark_discord_messages_as_seenUpSql, + "1684174617_add_url_previews_to_user_messages.up.sql": _1684174617_add_url_previews_to_user_messagesUpSql, + "1684175608_add_token_balances.up.sql": _1684175608_add_token_balancesUpSql, + "1684979808_sync_activity_center_notifications.up.sql": _1684979808_sync_activity_center_notificationsUpSql, + "1685383829_add_communities_mute_till.up.sql": _1685383829_add_communities_mute_tillUpSql, + "1685964183_add_chainids_to_revealed_addresses.up.sql": _1685964183_add_chainids_to_revealed_addressesUpSql, + "1687370421_add_communities_muted_till_new.up.sql": _1687370421_add_communities_muted_till_newUpSql, + "1687416607_add_communities_check_channel_permission_responses_table.up.sql": _1687416607_add_communities_check_channel_permission_responses_tableUpSql, + "1687856939_add_community_tokens_decimals.up.sql": _1687856939_add_community_tokens_decimalsUpSql, + "1687959987_modify_community_tokens_supply_as_string.up.sql": _1687959987_modify_community_tokens_supply_as_stringUpSql, + "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": _1689258900_add_airdrop_address_to_revealed_addressesUpSql, + "1689266326_create_communities_events_table.up.sql": _1689266326_create_communities_events_tableUpSql, + "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": _1689931300_add_community_tokens_deployer_and_priv_levelUpSql, "README.md": readmeMd, - - "doc.go": docGo, + "doc.go": docGo, } +// AssetDebug is true if the assets were built with the debug flag enabled. +const AssetDebug = false + // AssetDir returns the file names below a certain // directory embedded in the file by go-bindata. // For example if you run go-bindata on data/... and data contains the // following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png +// +// data/ +// foo.txt +// img/ +// a.png +// b.png +// // then AssetDir("data") would return []string{"foo.txt", "img"}, // AssetDir("data/img") would return []string{"a.png", "b.png"}, // AssetDir("foo.txt") and AssetDir("notexist") would return an error, and @@ -2524,107 +2450,108 @@ type bintree struct { } var _bintree = &bintree{nil, map[string]*bintree{ - "000001_init.down.db.sql": &bintree{_000001_initDownDbSql, map[string]*bintree{}}, - "000001_init.up.db.sql": &bintree{_000001_initUpDbSql, map[string]*bintree{}}, - "000002_add_last_ens_clock_value.up.sql": &bintree{_000002_add_last_ens_clock_valueUpSql, map[string]*bintree{}}, - "1586358095_add_replace.up.sql": &bintree{_1586358095_add_replaceUpSql, map[string]*bintree{}}, - "1588665364_add_image_data.up.sql": &bintree{_1588665364_add_image_dataUpSql, map[string]*bintree{}}, - "1589365189_add_pow_target.up.sql": &bintree{_1589365189_add_pow_targetUpSql, map[string]*bintree{}}, - "1591277220_add_index_messages.up.sql": &bintree{_1591277220_add_index_messagesUpSql, map[string]*bintree{}}, - "1593087212_add_mute_chat_and_raw_message_fields.up.sql": &bintree{_1593087212_add_mute_chat_and_raw_message_fieldsUpSql, map[string]*bintree{}}, - "1595862781_add_audio_data.up.sql": &bintree{_1595862781_add_audio_dataUpSql, map[string]*bintree{}}, - "1595865249_create_emoji_reactions_table.up.sql": &bintree{_1595865249_create_emoji_reactions_tableUpSql, map[string]*bintree{}}, - "1596805115_create_group_chat_invitations_table.up.sql": &bintree{_1596805115_create_group_chat_invitations_tableUpSql, map[string]*bintree{}}, - "1597322655_add_invitation_admin_chat_field.up.sql": &bintree{_1597322655_add_invitation_admin_chat_fieldUpSql, map[string]*bintree{}}, - "1597757544_add_nickname.up.sql": &bintree{_1597757544_add_nicknameUpSql, map[string]*bintree{}}, - "1598955122_add_mentions.up.sql": &bintree{_1598955122_add_mentionsUpSql, map[string]*bintree{}}, - "1599641390_add_emoji_reactions_index.up.sql": &bintree{_1599641390_add_emoji_reactions_indexUpSql, map[string]*bintree{}}, - "1599720851_add_seen_index_remove_long_messages.up.sql": &bintree{_1599720851_add_seen_index_remove_long_messagesUpSql, map[string]*bintree{}}, - "1603198582_add_profile_chat_field.up.sql": &bintree{_1603198582_add_profile_chat_fieldUpSql, map[string]*bintree{}}, - "1603816533_add_links.up.sql": &bintree{_1603816533_add_linksUpSql, map[string]*bintree{}}, - "1603888149_create_chat_identity_last_published_table.up.sql": &bintree{_1603888149_create_chat_identity_last_published_tableUpSql, map[string]*bintree{}}, - "1605075346_add_communities.up.sql": &bintree{_1605075346_add_communitiesUpSql, map[string]*bintree{}}, - "1610117927_add_message_cache.up.sql": &bintree{_1610117927_add_message_cacheUpSql, map[string]*bintree{}}, - "1610959908_add_dont_wrap_to_raw_messages.up.sql": &bintree{_1610959908_add_dont_wrap_to_raw_messagesUpSql, map[string]*bintree{}}, - "1610960912_add_send_on_personal_topic.up.sql": &bintree{_1610960912_add_send_on_personal_topicUpSql, map[string]*bintree{}}, - "1612870480_add_datasync_id.up.sql": &bintree{_1612870480_add_datasync_idUpSql, map[string]*bintree{}}, - "1614152139_add_communities_request_to_join.up.sql": &bintree{_1614152139_add_communities_request_to_joinUpSql, map[string]*bintree{}}, - "1615374373_add_confirmations.up.sql": &bintree{_1615374373_add_confirmationsUpSql, map[string]*bintree{}}, - "1617694931_add_notification_center.up.sql": &bintree{_1617694931_add_notification_centerUpSql, map[string]*bintree{}}, - "1618923660_create_pin_messages.up.sql": &bintree{_1618923660_create_pin_messagesUpSql, map[string]*bintree{}}, - "1619094007_add_joined_chat_field.up.sql": &bintree{_1619094007_add_joined_chat_fieldUpSql, map[string]*bintree{}}, - "1619099821_add_last_synced_field.up.sql": &bintree{_1619099821_add_last_synced_fieldUpSql, map[string]*bintree{}}, - "1621933219_add_mentioned.up.sql": &bintree{_1621933219_add_mentionedUpSql, map[string]*bintree{}}, - "1622010048_add_unviewed_mentions_count.up.sql": &bintree{_1622010048_add_unviewed_mentions_countUpSql, map[string]*bintree{}}, - "1622061278_add_message_activity_center_notification_field.up.sql": &bintree{_1622061278_add_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1622464518_set_synced_to_from.up.sql": &bintree{_1622464518_set_synced_to_fromUpSql, map[string]*bintree{}}, - "1622464519_add_chat_description.up.sql": &bintree{_1622464519_add_chat_descriptionUpSql, map[string]*bintree{}}, - "1622622253_add_pinned_by_to_pin_messages.up.sql": &bintree{_1622622253_add_pinned_by_to_pin_messagesUpSql, map[string]*bintree{}}, - "1623938329_add_author_activity_center_notification_field.up.sql": &bintree{_1623938329_add_author_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1623938330_add_edit_messages.up.sql": &bintree{_1623938330_add_edit_messagesUpSql, map[string]*bintree{}}, - "1624978434_add_muted_community.up.sql": &bintree{_1624978434_add_muted_communityUpSql, map[string]*bintree{}}, - "1625018910_add_repply_message_activity_center_notification_field.up.sql": &bintree{_1625018910_add_repply_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, - "1625762506_add_deleted_messages.up.sql": &bintree{_1625762506_add_deleted_messagesUpSql, map[string]*bintree{}}, - "1627388946_add_communities_synced_at.up.sql": &bintree{_1627388946_add_communities_synced_atUpSql, map[string]*bintree{}}, - "1628280060_create-usermessages-index.sql": &bintree{_1628280060_createUsermessagesIndexSql, map[string]*bintree{}}, - "1632303896_modify_contacts_table.up.sql": &bintree{_1632303896_modify_contacts_tableUpSql, map[string]*bintree{}}, - "1633349838_add_emoji_column_in_chats.up.sql": &bintree{_1633349838_add_emoji_column_in_chatsUpSql, map[string]*bintree{}}, - "1634831235_add_highlight_column_in_chats.up.sql": &bintree{_1634831235_add_highlight_column_in_chatsUpSql, map[string]*bintree{}}, - "1634896007_add_last_updated_locally_and_removed.up.sql": &bintree{_1634896007_add_last_updated_locally_and_removedUpSql, map[string]*bintree{}}, - "1635840039_add_clock_read_at_column_in_chats.up.sql": &bintree{_1635840039_add_clock_read_at_column_in_chatsUpSql, map[string]*bintree{}}, - "1637852321_add_received_invitation_admin_column_in_chats.up.sql": &bintree{_1637852321_add_received_invitation_admin_column_in_chatsUpSql, map[string]*bintree{}}, - "1645034601_display_name.up.sql": &bintree{_1645034601_display_nameUpSql, map[string]*bintree{}}, - "1645034602_add_mutual_contact_request.up.sql": &bintree{_1645034602_add_mutual_contact_requestUpSql, map[string]*bintree{}}, - "1650373957_add_contact_request_state.up.sql": &bintree{_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}}, - "1656958989_contact_verification.up.sql": &bintree{_1656958989_contact_verificationUpSql, map[string]*bintree{}}, - "1658236268_add_discord_message_authors_table.up.sql": &bintree{_1658236268_add_discord_message_authors_tableUpSql, map[string]*bintree{}}, - "1659619997_add_discord_messages_table.up.sql": &bintree{_1659619997_add_discord_messages_tableUpSql, map[string]*bintree{}}, - "1660226788_create_chat_identity_social_links.up.sql": &bintree{_1660226788_create_chat_identity_social_linksUpSql, map[string]*bintree{}}, - "1660226789_add_walletconnectsessions_table.up.sql": &bintree{_1660226789_add_walletconnectsessions_tableUpSql, map[string]*bintree{}}, - "1661242854_add_communities_requests_to_leave.up.sql": &bintree{_1661242854_add_communities_requests_to_leaveUpSql, map[string]*bintree{}}, - "1662044232_add_chat_image.up.sql": &bintree{_1662044232_add_chat_imageUpSql, map[string]*bintree{}}, - "1662106895_add_chat_first_message_timestamp.up.sql": &bintree{_1662106895_add_chat_first_message_timestampUpSql, map[string]*bintree{}}, - "1662723928_add_discord_author_image_fields.up.sql": &bintree{_1662723928_add_discord_author_image_fieldsUpSql, map[string]*bintree{}}, - "1664195977_add_deleted_for_mes.up.sql": &bintree{_1664195977_add_deleted_for_mesUpSql, map[string]*bintree{}}, - "1664367420_add_discord_attachments_table.up.sql": &bintree{_1664367420_add_discord_attachments_tableUpSql, map[string]*bintree{}}, - "1665079662_add_spectated_column_in_communities.up.sql": &bintree{_1665079662_add_spectated_column_in_communitiesUpSql, map[string]*bintree{}}, - "1665479047_add_community_id_in_notifications.up.sql": &bintree{_1665479047_add_community_id_in_notificationsUpSql, map[string]*bintree{}}, - "1665484435_add_encrypted_messages.up.sql": &bintree{_1665484435_add_encrypted_messagesUpSql, map[string]*bintree{}}, - "1665560200_add_contact_verification_individual.up.sql": &bintree{_1665560200_add_contact_verification_individualUpSql, map[string]*bintree{}}, - "1670921937_add_album_id.up.sql": &bintree{_1670921937_add_album_idUpSql, map[string]*bintree{}}, - "1673373000_add_replied.up.sql": &bintree{_1673373000_add_repliedUpSql, map[string]*bintree{}}, - "1673428910_add_image_width_height.up.sql": &bintree{_1673428910_add_image_width_heightUpSql, map[string]*bintree{}}, - "1674210659_add_contact_request_local_clock.up.sql": &bintree{_1674210659_add_contact_request_local_clockUpSql, map[string]*bintree{}}, - "1675212323_add_deleted_by.up.sql": &bintree{_1675212323_add_deleted_byUpSql, map[string]*bintree{}}, - "1675247084_add_activity_center_states.up.sql": &bintree{_1675247084_add_activity_center_statesUpSql, map[string]*bintree{}}, - "1675272329_fix_protocol_migration.up.sql": &bintree{_1675272329_fix_protocol_migrationUpSql, map[string]*bintree{}}, - "1676998418_fix_activity_center_migration.up.sql": &bintree{_1676998418_fix_activity_center_migrationUpSql, map[string]*bintree{}}, - "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": &bintree{_1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, map[string]*bintree{}}, - "1677486338_add_community_tokens_table.up.sql": &bintree{_1677486338_add_community_tokens_tableUpSql, map[string]*bintree{}}, - "1678292329_add_collapsed_categories.up.sql": &bintree{_1678292329_add_collapsed_categoriesUpSql, map[string]*bintree{}}, - "1678800760_add_index_to_raw_messages.up.sql": &bintree{_1678800760_add_index_to_raw_messagesUpSql, map[string]*bintree{}}, - "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": &bintree{_1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, map[string]*bintree{}}, - "1679326850_add_community_token_owners.up.sql": &bintree{_1679326850_add_community_token_ownersUpSql, map[string]*bintree{}}, - "1680011500_add_album_images_count.up.sql": &bintree{_1680011500_add_album_images_countUpSql, map[string]*bintree{}}, - "1680114896_add_index_on_album_id.up.sql": &bintree{_1680114896_add_index_on_album_idUpSql, map[string]*bintree{}}, - "1681655289_add_mute_till.up.sql": &bintree{_1681655289_add_mute_tillUpSql, map[string]*bintree{}}, - "1681934966_add_index_response_to.up.sql": &bintree{_1681934966_add_index_response_toUpSql, map[string]*bintree{}}, - "1682528339_add_index_user_messages_unseen.up.sql": &bintree{_1682528339_add_index_user_messages_unseenUpSql, map[string]*bintree{}}, - "1683707289_recreate_deleted_for_mes.up.sql": &bintree{_1683707289_recreate_deleted_for_mesUpSql, map[string]*bintree{}}, - "1683725607_mark_discord_messages_as_seen.up.sql": &bintree{_1683725607_mark_discord_messages_as_seenUpSql, map[string]*bintree{}}, - "1684174617_add_url_previews_to_user_messages.up.sql": &bintree{_1684174617_add_url_previews_to_user_messagesUpSql, map[string]*bintree{}}, - "1684175608_add_token_balances.up.sql": &bintree{_1684175608_add_token_balancesUpSql, map[string]*bintree{}}, - "1684979808_sync_activity_center_notifications.up.sql": &bintree{_1684979808_sync_activity_center_notificationsUpSql, map[string]*bintree{}}, - "1685383829_add_communities_mute_till.up.sql": &bintree{_1685383829_add_communities_mute_tillUpSql, map[string]*bintree{}}, - "1685964183_add_chainids_to_revealed_addresses.up.sql": &bintree{_1685964183_add_chainids_to_revealed_addressesUpSql, map[string]*bintree{}}, - "1687370421_add_communities_muted_till_new.up.sql": &bintree{_1687370421_add_communities_muted_till_newUpSql, map[string]*bintree{}}, - "1687416607_add_communities_check_channel_permission_responses_table.up.sql": &bintree{_1687416607_add_communities_check_channel_permission_responses_tableUpSql, map[string]*bintree{}}, - "1687856939_add_community_tokens_decimals.up.sql": &bintree{_1687856939_add_community_tokens_decimalsUpSql, map[string]*bintree{}}, - "1687959987_modify_community_tokens_supply_as_string.up.sql": &bintree{_1687959987_modify_community_tokens_supply_as_stringUpSql, map[string]*bintree{}}, - "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": &bintree{_1689258900_add_airdrop_address_to_revealed_addressesUpSql, map[string]*bintree{}}, - "1689266326_create_communities_events_table.up.sql": &bintree{_1689266326_create_communities_events_tableUpSql, map[string]*bintree{}}, - "README.md": &bintree{readmeMd, map[string]*bintree{}}, - "doc.go": &bintree{docGo, map[string]*bintree{}}, + "000001_init.down.db.sql": {_000001_initDownDbSql, map[string]*bintree{}}, + "000001_init.up.db.sql": {_000001_initUpDbSql, map[string]*bintree{}}, + "000002_add_last_ens_clock_value.up.sql": {_000002_add_last_ens_clock_valueUpSql, map[string]*bintree{}}, + "1586358095_add_replace.up.sql": {_1586358095_add_replaceUpSql, map[string]*bintree{}}, + "1588665364_add_image_data.up.sql": {_1588665364_add_image_dataUpSql, map[string]*bintree{}}, + "1589365189_add_pow_target.up.sql": {_1589365189_add_pow_targetUpSql, map[string]*bintree{}}, + "1591277220_add_index_messages.up.sql": {_1591277220_add_index_messagesUpSql, map[string]*bintree{}}, + "1593087212_add_mute_chat_and_raw_message_fields.up.sql": {_1593087212_add_mute_chat_and_raw_message_fieldsUpSql, map[string]*bintree{}}, + "1595862781_add_audio_data.up.sql": {_1595862781_add_audio_dataUpSql, map[string]*bintree{}}, + "1595865249_create_emoji_reactions_table.up.sql": {_1595865249_create_emoji_reactions_tableUpSql, map[string]*bintree{}}, + "1596805115_create_group_chat_invitations_table.up.sql": {_1596805115_create_group_chat_invitations_tableUpSql, map[string]*bintree{}}, + "1597322655_add_invitation_admin_chat_field.up.sql": {_1597322655_add_invitation_admin_chat_fieldUpSql, map[string]*bintree{}}, + "1597757544_add_nickname.up.sql": {_1597757544_add_nicknameUpSql, map[string]*bintree{}}, + "1598955122_add_mentions.up.sql": {_1598955122_add_mentionsUpSql, map[string]*bintree{}}, + "1599641390_add_emoji_reactions_index.up.sql": {_1599641390_add_emoji_reactions_indexUpSql, map[string]*bintree{}}, + "1599720851_add_seen_index_remove_long_messages.up.sql": {_1599720851_add_seen_index_remove_long_messagesUpSql, map[string]*bintree{}}, + "1603198582_add_profile_chat_field.up.sql": {_1603198582_add_profile_chat_fieldUpSql, map[string]*bintree{}}, + "1603816533_add_links.up.sql": {_1603816533_add_linksUpSql, map[string]*bintree{}}, + "1603888149_create_chat_identity_last_published_table.up.sql": {_1603888149_create_chat_identity_last_published_tableUpSql, map[string]*bintree{}}, + "1605075346_add_communities.up.sql": {_1605075346_add_communitiesUpSql, map[string]*bintree{}}, + "1610117927_add_message_cache.up.sql": {_1610117927_add_message_cacheUpSql, map[string]*bintree{}}, + "1610959908_add_dont_wrap_to_raw_messages.up.sql": {_1610959908_add_dont_wrap_to_raw_messagesUpSql, map[string]*bintree{}}, + "1610960912_add_send_on_personal_topic.up.sql": {_1610960912_add_send_on_personal_topicUpSql, map[string]*bintree{}}, + "1612870480_add_datasync_id.up.sql": {_1612870480_add_datasync_idUpSql, map[string]*bintree{}}, + "1614152139_add_communities_request_to_join.up.sql": {_1614152139_add_communities_request_to_joinUpSql, map[string]*bintree{}}, + "1615374373_add_confirmations.up.sql": {_1615374373_add_confirmationsUpSql, map[string]*bintree{}}, + "1617694931_add_notification_center.up.sql": {_1617694931_add_notification_centerUpSql, map[string]*bintree{}}, + "1618923660_create_pin_messages.up.sql": {_1618923660_create_pin_messagesUpSql, map[string]*bintree{}}, + "1619094007_add_joined_chat_field.up.sql": {_1619094007_add_joined_chat_fieldUpSql, map[string]*bintree{}}, + "1619099821_add_last_synced_field.up.sql": {_1619099821_add_last_synced_fieldUpSql, map[string]*bintree{}}, + "1621933219_add_mentioned.up.sql": {_1621933219_add_mentionedUpSql, map[string]*bintree{}}, + "1622010048_add_unviewed_mentions_count.up.sql": {_1622010048_add_unviewed_mentions_countUpSql, map[string]*bintree{}}, + "1622061278_add_message_activity_center_notification_field.up.sql": {_1622061278_add_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1622464518_set_synced_to_from.up.sql": {_1622464518_set_synced_to_fromUpSql, map[string]*bintree{}}, + "1622464519_add_chat_description.up.sql": {_1622464519_add_chat_descriptionUpSql, map[string]*bintree{}}, + "1622622253_add_pinned_by_to_pin_messages.up.sql": {_1622622253_add_pinned_by_to_pin_messagesUpSql, map[string]*bintree{}}, + "1623938329_add_author_activity_center_notification_field.up.sql": {_1623938329_add_author_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1623938330_add_edit_messages.up.sql": {_1623938330_add_edit_messagesUpSql, map[string]*bintree{}}, + "1624978434_add_muted_community.up.sql": {_1624978434_add_muted_communityUpSql, map[string]*bintree{}}, + "1625018910_add_repply_message_activity_center_notification_field.up.sql": {_1625018910_add_repply_message_activity_center_notification_fieldUpSql, map[string]*bintree{}}, + "1625762506_add_deleted_messages.up.sql": {_1625762506_add_deleted_messagesUpSql, map[string]*bintree{}}, + "1627388946_add_communities_synced_at.up.sql": {_1627388946_add_communities_synced_atUpSql, map[string]*bintree{}}, + "1628280060_create-usermessages-index.sql": {_1628280060_createUsermessagesIndexSql, map[string]*bintree{}}, + "1632303896_modify_contacts_table.up.sql": {_1632303896_modify_contacts_tableUpSql, map[string]*bintree{}}, + "1633349838_add_emoji_column_in_chats.up.sql": {_1633349838_add_emoji_column_in_chatsUpSql, map[string]*bintree{}}, + "1634831235_add_highlight_column_in_chats.up.sql": {_1634831235_add_highlight_column_in_chatsUpSql, map[string]*bintree{}}, + "1634896007_add_last_updated_locally_and_removed.up.sql": {_1634896007_add_last_updated_locally_and_removedUpSql, map[string]*bintree{}}, + "1635840039_add_clock_read_at_column_in_chats.up.sql": {_1635840039_add_clock_read_at_column_in_chatsUpSql, map[string]*bintree{}}, + "1637852321_add_received_invitation_admin_column_in_chats.up.sql": {_1637852321_add_received_invitation_admin_column_in_chatsUpSql, map[string]*bintree{}}, + "1645034601_display_name.up.sql": {_1645034601_display_nameUpSql, map[string]*bintree{}}, + "1645034602_add_mutual_contact_request.up.sql": {_1645034602_add_mutual_contact_requestUpSql, map[string]*bintree{}}, + "1650373957_add_contact_request_state.up.sql": {_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}}, + "1656958989_contact_verification.up.sql": {_1656958989_contact_verificationUpSql, map[string]*bintree{}}, + "1658236268_add_discord_message_authors_table.up.sql": {_1658236268_add_discord_message_authors_tableUpSql, map[string]*bintree{}}, + "1659619997_add_discord_messages_table.up.sql": {_1659619997_add_discord_messages_tableUpSql, map[string]*bintree{}}, + "1660226788_create_chat_identity_social_links.up.sql": {_1660226788_create_chat_identity_social_linksUpSql, map[string]*bintree{}}, + "1660226789_add_walletconnectsessions_table.up.sql": {_1660226789_add_walletconnectsessions_tableUpSql, map[string]*bintree{}}, + "1661242854_add_communities_requests_to_leave.up.sql": {_1661242854_add_communities_requests_to_leaveUpSql, map[string]*bintree{}}, + "1662044232_add_chat_image.up.sql": {_1662044232_add_chat_imageUpSql, map[string]*bintree{}}, + "1662106895_add_chat_first_message_timestamp.up.sql": {_1662106895_add_chat_first_message_timestampUpSql, map[string]*bintree{}}, + "1662723928_add_discord_author_image_fields.up.sql": {_1662723928_add_discord_author_image_fieldsUpSql, map[string]*bintree{}}, + "1664195977_add_deleted_for_mes.up.sql": {_1664195977_add_deleted_for_mesUpSql, map[string]*bintree{}}, + "1664367420_add_discord_attachments_table.up.sql": {_1664367420_add_discord_attachments_tableUpSql, map[string]*bintree{}}, + "1665079662_add_spectated_column_in_communities.up.sql": {_1665079662_add_spectated_column_in_communitiesUpSql, map[string]*bintree{}}, + "1665479047_add_community_id_in_notifications.up.sql": {_1665479047_add_community_id_in_notificationsUpSql, map[string]*bintree{}}, + "1665484435_add_encrypted_messages.up.sql": {_1665484435_add_encrypted_messagesUpSql, map[string]*bintree{}}, + "1665560200_add_contact_verification_individual.up.sql": {_1665560200_add_contact_verification_individualUpSql, map[string]*bintree{}}, + "1670921937_add_album_id.up.sql": {_1670921937_add_album_idUpSql, map[string]*bintree{}}, + "1673373000_add_replied.up.sql": {_1673373000_add_repliedUpSql, map[string]*bintree{}}, + "1673428910_add_image_width_height.up.sql": {_1673428910_add_image_width_heightUpSql, map[string]*bintree{}}, + "1674210659_add_contact_request_local_clock.up.sql": {_1674210659_add_contact_request_local_clockUpSql, map[string]*bintree{}}, + "1675212323_add_deleted_by.up.sql": {_1675212323_add_deleted_byUpSql, map[string]*bintree{}}, + "1675247084_add_activity_center_states.up.sql": {_1675247084_add_activity_center_statesUpSql, map[string]*bintree{}}, + "1675272329_fix_protocol_migration.up.sql": {_1675272329_fix_protocol_migrationUpSql, map[string]*bintree{}}, + "1676998418_fix_activity_center_migration.up.sql": {_1676998418_fix_activity_center_migrationUpSql, map[string]*bintree{}}, + "1677278861_add_deleted_column_to_activity_center_notifications_table.up.sql": {_1677278861_add_deleted_column_to_activity_center_notifications_tableUpSql, map[string]*bintree{}}, + "1677486338_add_community_tokens_table.up.sql": {_1677486338_add_community_tokens_tableUpSql, map[string]*bintree{}}, + "1678292329_add_collapsed_categories.up.sql": {_1678292329_add_collapsed_categoriesUpSql, map[string]*bintree{}}, + "1678800760_add_index_to_raw_messages.up.sql": {_1678800760_add_index_to_raw_messagesUpSql, map[string]*bintree{}}, + "1678877478_add_communities_requests_to_join_revealed_addresses_table.up.sql": {_1678877478_add_communities_requests_to_join_revealed_addresses_tableUpSql, map[string]*bintree{}}, + "1679326850_add_community_token_owners.up.sql": {_1679326850_add_community_token_ownersUpSql, map[string]*bintree{}}, + "1680011500_add_album_images_count.up.sql": {_1680011500_add_album_images_countUpSql, map[string]*bintree{}}, + "1680114896_add_index_on_album_id.up.sql": {_1680114896_add_index_on_album_idUpSql, map[string]*bintree{}}, + "1681655289_add_mute_till.up.sql": {_1681655289_add_mute_tillUpSql, map[string]*bintree{}}, + "1681934966_add_index_response_to.up.sql": {_1681934966_add_index_response_toUpSql, map[string]*bintree{}}, + "1682528339_add_index_user_messages_unseen.up.sql": {_1682528339_add_index_user_messages_unseenUpSql, map[string]*bintree{}}, + "1683707289_recreate_deleted_for_mes.up.sql": {_1683707289_recreate_deleted_for_mesUpSql, map[string]*bintree{}}, + "1683725607_mark_discord_messages_as_seen.up.sql": {_1683725607_mark_discord_messages_as_seenUpSql, map[string]*bintree{}}, + "1684174617_add_url_previews_to_user_messages.up.sql": {_1684174617_add_url_previews_to_user_messagesUpSql, map[string]*bintree{}}, + "1684175608_add_token_balances.up.sql": {_1684175608_add_token_balancesUpSql, map[string]*bintree{}}, + "1684979808_sync_activity_center_notifications.up.sql": {_1684979808_sync_activity_center_notificationsUpSql, map[string]*bintree{}}, + "1685383829_add_communities_mute_till.up.sql": {_1685383829_add_communities_mute_tillUpSql, map[string]*bintree{}}, + "1685964183_add_chainids_to_revealed_addresses.up.sql": {_1685964183_add_chainids_to_revealed_addressesUpSql, map[string]*bintree{}}, + "1687370421_add_communities_muted_till_new.up.sql": {_1687370421_add_communities_muted_till_newUpSql, map[string]*bintree{}}, + "1687416607_add_communities_check_channel_permission_responses_table.up.sql": {_1687416607_add_communities_check_channel_permission_responses_tableUpSql, map[string]*bintree{}}, + "1687856939_add_community_tokens_decimals.up.sql": {_1687856939_add_community_tokens_decimalsUpSql, map[string]*bintree{}}, + "1687959987_modify_community_tokens_supply_as_string.up.sql": {_1687959987_modify_community_tokens_supply_as_stringUpSql, map[string]*bintree{}}, + "1689258900_add_airdrop_address_to_revealed_addresses.up.sql": {_1689258900_add_airdrop_address_to_revealed_addressesUpSql, map[string]*bintree{}}, + "1689266326_create_communities_events_table.up.sql": {_1689266326_create_communities_events_tableUpSql, map[string]*bintree{}}, + "1689931300_add_community_tokens_deployer_and_priv_level.up.sql": {_1689931300_add_community_tokens_deployer_and_priv_levelUpSql, map[string]*bintree{}}, + "README.md": {readmeMd, map[string]*bintree{}}, + "doc.go": {docGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. @@ -2641,7 +2568,7 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + err = os.WriteFile(_filePath(dir, name), data, info.Mode()) if err != nil { return err } diff --git a/protocol/migrations/sqlite/1689931300_add_community_tokens_deployer_and_priv_level.up.sql b/protocol/migrations/sqlite/1689931300_add_community_tokens_deployer_and_priv_level.up.sql new file mode 100644 index 000000000..c87914aa9 --- /dev/null +++ b/protocol/migrations/sqlite/1689931300_add_community_tokens_deployer_and_priv_level.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE community_tokens ADD COLUMN deployer TEXT NOT NULL DEFAULT ""; +ALTER TABLE community_tokens ADD COLUMN privileges_level INT NOT NULL DEFAULT 2; diff --git a/services/collectibles/api.go b/services/collectibles/api.go index 282e61557..19e20d1b7 100644 --- a/services/collectibles/api.go +++ b/services/collectibles/api.go @@ -15,8 +15,10 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" "github.com/status-im/status-go/account" - "github.com/status-im/status-go/contracts/assets" - "github.com/status-im/status-go/contracts/collectibles" + "github.com/status-im/status-go/contracts/community-tokens/assets" + "github.com/status-im/status-go/contracts/community-tokens/collectibles" + "github.com/status-im/status-go/contracts/community-tokens/ownertoken" + "github.com/status-im/status-go/eth-node/crypto" "github.com/status-im/status-go/params" "github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/rpc" @@ -59,6 +61,8 @@ type DeploymentParameters struct { Transferable bool `json:"transferable"` RemoteSelfDestruct bool `json:"remoteSelfDestruct"` TokenURI string `json:"tokenUri"` + OwnerTokenAddress string `json:"ownerTokenAddress"` + MasterTokenAddress string `json:"masterTokenAddress"` } func (d *DeploymentParameters) GetSupply() *big.Int { @@ -115,7 +119,8 @@ func (api *API) DeployCollectibles(ctx context.Context, chainID uint64, deployme address, tx, _, err := collectibles.DeployCollectibles(transactOpts, ethClient, deploymentParameters.Name, deploymentParameters.Symbol, deploymentParameters.GetSupply(), deploymentParameters.RemoteSelfDestruct, deploymentParameters.Transferable, - deploymentParameters.TokenURI) + deploymentParameters.TokenURI, common.HexToAddress(deploymentParameters.OwnerTokenAddress), + common.HexToAddress(deploymentParameters.MasterTokenAddress)) if err != nil { log.Error(err.Error()) return DeploymentDetails{}, err @@ -131,6 +136,77 @@ func (api *API) DeployCollectibles(ctx context.Context, chainID uint64, deployme return DeploymentDetails{address.Hex(), tx.Hash().Hex()}, nil } +func (api *API) DeployOwnerToken(ctx context.Context, chainID uint64, ownerTokenParameters DeploymentParameters, masterTokenParameters DeploymentParameters, txArgs transactions.SendTxArgs, password string) (DeploymentDetails, error) { + err := ownerTokenParameters.Validate(false) + if err != nil { + return DeploymentDetails{}, err + } + + err = masterTokenParameters.Validate(false) + if err != nil { + return DeploymentDetails{}, err + } + + transactOpts := txArgs.ToTransactOpts(utils.GetSigner(chainID, api.accountsManager, api.config.KeyStoreDir, txArgs.From, password)) + + ethClient, err := api.RPCClient.EthClient(chainID) + if err != nil { + log.Error(err.Error()) + return DeploymentDetails{}, err + } + + signerPubKey := []byte{} + + address, tx, _, err := ownertoken.DeployOwnerToken(transactOpts, ethClient, ownerTokenParameters.Name, + ownerTokenParameters.Symbol, ownerTokenParameters.TokenURI, + masterTokenParameters.Name, masterTokenParameters.Symbol, + masterTokenParameters.TokenURI, signerPubKey) + if err != nil { + log.Error(err.Error()) + return DeploymentDetails{}, err + } + + go api.rpcFiltersSrvc.TriggerTransactionSentToUpstreamEvent(&rpcfilters.PendingTxInfo{ + Hash: tx.Hash(), + Type: string(transactions.DeployOwnerToken), + From: common.Address(txArgs.From), + ChainID: chainID, + }) + + return DeploymentDetails{address.Hex(), tx.Hash().Hex()}, nil +} + +func (api *API) GetMasterTokenContractAddressFromHash(ctx context.Context, chainID uint64, txHash string) (string, error) { + ethClient, err := api.RPCClient.EthClient(chainID) + if err != nil { + return "", err + } + + receipt, err := ethClient.TransactionReceipt(ctx, common.HexToHash(txHash)) + if err != nil { + return "", err + } + + logMasterTokenCreatedSig := []byte("MasterTokenCreated(address)") + logMasterTokenCreatedSigHash := crypto.Keccak256Hash(logMasterTokenCreatedSig) + + for _, vLog := range receipt.Logs { + if vLog.Topics[0].Hex() == logMasterTokenCreatedSigHash.Hex() { + ownerTokenABI, err := abi.JSON(strings.NewReader(ownertoken.OwnerTokenABI)) + if err != nil { + return "", err + } + event := new(ownertoken.OwnerTokenMasterTokenCreated) + err = ownerTokenABI.UnpackIntoInterface(event, "MasterTokenCreated", vLog.Data) + if err != nil { + return "", err + } + return event.MasterToken.Hex(), nil + } + } + return "", fmt.Errorf("can't find master token address in transaction: %v", txHash) +} + func (api *API) DeployAssets(ctx context.Context, chainID uint64, deploymentParameters DeploymentParameters, txArgs transactions.SendTxArgs, password string) (DeploymentDetails, error) { err := deploymentParameters.Validate(true) @@ -165,7 +241,7 @@ func (api *API) DeployAssets(ctx context.Context, chainID uint64, deploymentPara // Returns gas units + 10% func (api *API) DeployCollectiblesEstimate(ctx context.Context) (uint64, error) { - gasAmount := uint64(1960645) + gasAmount := uint64(2091605) return gasAmount + uint64(float32(gasAmount)*0.1), nil } @@ -175,6 +251,12 @@ func (api *API) DeployAssetsEstimate(ctx context.Context) (uint64, error) { return gasAmount + uint64(float32(gasAmount)*0.1), nil } +// Returns gas units + 10% +func (api *API) DeployOwnerTokenEstimate(ctx context.Context) (uint64, error) { + ownerGasAmount := uint64(4389457) + return ownerGasAmount + uint64(float32(ownerGasAmount)*0.1), nil +} + func (api *API) newCollectiblesInstance(chainID uint64, contractAddress string) (*collectibles.Collectibles, error) { backend, err := api.RPCClient.EthClient(chainID) if err != nil { @@ -228,16 +310,16 @@ func (api *API) MintTokens(ctx context.Context, chainID uint64, contractAddress } } -func (api *API) EstimateMintTokens(ctx context.Context, chainID uint64, contractAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { +func (api *API) EstimateMintTokens(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { tokenType, err := api.db.GetTokenType(chainID, contractAddress) if err != nil { return 0, err } switch tokenType { case protobuf.CommunityTokenType_ERC721: - return api.EstimateMintCollectibles(ctx, chainID, contractAddress, walletAddresses, amount) + return api.EstimateMintCollectibles(ctx, chainID, contractAddress, fromAddress, walletAddresses, amount) case protobuf.CommunityTokenType_ERC20: - return api.EstimateMintAssets(ctx, chainID, contractAddress, walletAddresses, amount) + return api.EstimateMintAssets(ctx, chainID, contractAddress, fromAddress, walletAddresses, amount) default: return 0, fmt.Errorf("unknown token type: %v", tokenType) } @@ -274,13 +356,13 @@ func (api *API) MintCollectibles(ctx context.Context, chainID uint64, contractAd return tx.Hash().Hex(), nil } -func (api *API) EstimateMintCollectibles(ctx context.Context, chainID uint64, contractAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { +func (api *API) EstimateMintCollectibles(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { err := api.validateWalletsAndAmounts(walletAddresses, amount) if err != nil { return 0, err } usersAddresses := api.prepareMintCollectiblesData(walletAddresses, amount) - return api.estimateMethod(ctx, chainID, contractAddress, "mintTo", usersAddresses) + return api.estimateMethod(ctx, chainID, contractAddress, fromAddress, "mintTo", usersAddresses) } func (api *API) prepareMintAssetsData(walletAddresses []string, amount *bigint.BigInt) ([]common.Address, []*big.Int) { @@ -327,13 +409,13 @@ func (api *API) MintAssets(ctx context.Context, chainID uint64, contractAddress } // Estimate MintAssets cost. -func (api *API) EstimateMintAssets(ctx context.Context, chainID uint64, contractAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { +func (api *API) EstimateMintAssets(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, walletAddresses []string, amount *bigint.BigInt) (uint64, error) { err := api.validateWalletsAndAmounts(walletAddresses, amount) if err != nil { return 0, err } usersAddresses, amountsList := api.prepareMintAssetsData(walletAddresses, amount) - return api.estimateMethod(ctx, chainID, contractAddress, "mintTo", usersAddresses, amountsList) + return api.estimateMethod(ctx, chainID, contractAddress, fromAddress, "mintTo", usersAddresses, amountsList) } // This is only ERC721 function @@ -397,7 +479,7 @@ func (api *API) RemoteBurn(ctx context.Context, chainID uint64, contractAddress } // This is only ERC721 function -func (api *API) EstimateRemoteBurn(ctx context.Context, chainID uint64, contractAddress string, tokenIds []*bigint.BigInt) (uint64, error) { +func (api *API) EstimateRemoteBurn(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, tokenIds []*bigint.BigInt) (uint64, error) { err := api.validateTokens(tokenIds) if err != nil { return 0, err @@ -408,10 +490,10 @@ func (api *API) EstimateRemoteBurn(ctx context.Context, chainID uint64, contract tempTokenIds = append(tempTokenIds, v.Int) } - return api.estimateMethod(ctx, chainID, contractAddress, "remoteBurn", tempTokenIds) + return api.estimateMethod(ctx, chainID, contractAddress, fromAddress, "remoteBurn", tempTokenIds) } -func (api *API) GetContractInstance(chainID uint64, contractAddress string) (*collectibles.Collectibles, error) { +func (api *API) GetCollectiblesContractInstance(chainID uint64, contractAddress string) (*collectibles.Collectibles, error) { contractInst, err := api.newCollectiblesInstance(chainID, contractAddress) if err != nil { return nil, err @@ -427,36 +509,6 @@ func (api *API) GetAssetContractInstance(chainID uint64, contractAddress string) return contractInst, nil } -func (api *API) ContractOwner(ctx context.Context, chainID uint64, contractAddress string) (string, error) { - callOpts := &bind.CallOpts{Context: ctx, Pending: false} - tokenType, err := api.db.GetTokenType(chainID, contractAddress) - if err != nil { - return "", err - } - if tokenType == protobuf.CommunityTokenType_ERC721 { - contractInst, err := api.newCollectiblesInstance(chainID, contractAddress) - if err != nil { - return "", err - } - owner, err := contractInst.Owner(callOpts) - if err != nil { - return "", err - } - return owner.String(), nil - } else if tokenType == protobuf.CommunityTokenType_ERC20 { - contractInst, err := api.newAssetsInstance(chainID, contractAddress) - if err != nil { - return "", err - } - owner, err := contractInst.Owner(callOpts) - if err != nil { - return "", err - } - return owner.String(), nil - } - return "", fmt.Errorf("unknown token type: %v", tokenType) -} - func (api *API) RemainingSupply(ctx context.Context, chainID uint64, contractAddress string) (*bigint.BigInt, error) { tokenType, err := api.db.GetTokenType(chainID, contractAddress) if err != nil { @@ -616,7 +668,7 @@ func (api *API) Burn(ctx context.Context, chainID uint64, contractAddress string return tx.Hash().Hex(), nil } -func (api *API) EstimateBurn(ctx context.Context, chainID uint64, contractAddress string, burnAmount *bigint.BigInt) (uint64, error) { +func (api *API) EstimateBurn(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, burnAmount *bigint.BigInt) (uint64, error) { err := api.validateBurnAmount(ctx, burnAmount, chainID, contractAddress) if err != nil { return 0, err @@ -627,7 +679,7 @@ func (api *API) EstimateBurn(ctx context.Context, chainID uint64, contractAddres return 0, err } - return api.estimateMethod(ctx, chainID, contractAddress, "setMaxSupply", newMaxSupply) + return api.estimateMethod(ctx, chainID, contractAddress, fromAddress, "setMaxSupply", newMaxSupply) } func (api *API) validateWalletsAndAmounts(walletAddresses []string, amount *bigint.BigInt) error { @@ -677,7 +729,7 @@ func (api *API) packAssetsMethod(ctx context.Context, methodName string, args .. return assetsABI.Pack(methodName, args...) } -func (api *API) estimateMethod(ctx context.Context, chainID uint64, contractAddress string, methodName string, args ...interface{}) (uint64, error) { +func (api *API) estimateMethod(ctx context.Context, chainID uint64, contractAddress string, fromAddress string, methodName string, args ...interface{}) (uint64, error) { ethClient, err := api.RPCClient.EthClient(chainID) if err != nil { log.Error(err.Error()) @@ -702,13 +754,8 @@ func (api *API) estimateMethod(ctx context.Context, chainID uint64, contractAddr return 0, err } - ownerAddr, err := api.ContractOwner(ctx, chainID, contractAddress) - if err != nil { - return 0, err - } - toAddr := common.HexToAddress(contractAddress) - fromAddr := common.HexToAddress(ownerAddr) + fromAddr := common.HexToAddress(fromAddress) callMsg := ethereum.CallMsg{ From: fromAddr, diff --git a/services/collectibles/api_test.go b/services/collectibles/api_test.go index c99fee623..dcf7720ba 100644 --- a/services/collectibles/api_test.go +++ b/services/collectibles/api_test.go @@ -17,37 +17,37 @@ func TestDeploymentParameters(t *testing.T) { }{ { name: "emptyName", - parameters: DeploymentParameters{"", "SYMBOL", &bigint.BigInt{Int: big.NewInt(int64(123))}, false, false, false, ""}, + parameters: DeploymentParameters{"", "SYMBOL", &bigint.BigInt{Int: big.NewInt(int64(123))}, false, false, false, "", "", ""}, isError: true, }, { name: "emptySymbol", - parameters: DeploymentParameters{"NAME", "", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, ""}, + parameters: DeploymentParameters{"NAME", "", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, "", "", ""}, isError: true, }, { name: "negativeSupply", - parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, false, false, false, ""}, + parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, false, false, false, "", "", ""}, isError: true, }, { name: "zeroSupply", - parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(0)}, false, false, false, ""}, + parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(0)}, false, false, false, "", "", ""}, isError: false, }, { name: "negativeSupplyAndInfinite", - parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, true, false, false, ""}, + parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, true, false, false, "", "", ""}, isError: false, }, { name: "supplyGreaterThanMax", - parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply + 1)}, false, false, false, ""}, + parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply + 1)}, false, false, false, "", "", ""}, isError: true, }, { name: "supplyIsMax", - parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply)}, false, false, false, ""}, + parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply)}, false, false, false, "", "", ""}, isError: false, }, } @@ -63,10 +63,10 @@ func TestDeploymentParameters(t *testing.T) { }) } - notInfiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, ""} + notInfiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, "", "", ""} requiredSupply := big.NewInt(123) require.Equal(t, notInfiniteSupplyParams.GetSupply(), requiredSupply) - infiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, true, false, false, ""} + infiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, true, false, false, "", "", ""} requiredSupply = infiniteSupplyParams.GetInfiniteSupply() require.Equal(t, infiniteSupplyParams.GetSupply(), requiredSupply) } diff --git a/services/collectibles/database_test.go b/services/collectibles/database_test.go index e9f936a9d..7d8d7a3af 100644 --- a/services/collectibles/database_test.go +++ b/services/collectibles/database_test.go @@ -27,10 +27,10 @@ type DatabaseSuite struct { func (s *DatabaseSuite) addCommunityToken(db *sql.DB, token *token.CommunityToken) error { _, err := db.Exec(`INSERT INTO community_tokens (community_id, address, type, name, symbol, description, supply_str, - infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, token.CommunityID, token.Address, token.TokenType, token.Name, + infinite_supply, transferable, remote_self_destruct, chain_id, deploy_state, image_base64, decimals, deployer, privileges_level) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, token.CommunityID, token.Address, token.TokenType, token.Name, token.Symbol, token.Description, token.Supply.String(), token.InfiniteSupply, token.Transferable, token.RemoteSelfDestruct, - token.ChainID, token.DeployState, token.Base64Image, token.Decimals) + token.ChainID, token.DeployState, token.Base64Image, token.Decimals, token.Deployer, token.PrivilegesLevel) return err } @@ -49,6 +49,8 @@ func (s *DatabaseSuite) setupDatabase(db *sql.DB) error { ChainID: 1, DeployState: token.InProgress, Base64Image: "ABCD", + Deployer: "0xDEP1", + PrivilegesLevel: token.OwnerLevel, } token20 := &token.CommunityToken{ @@ -66,6 +68,8 @@ func (s *DatabaseSuite) setupDatabase(db *sql.DB) error { DeployState: token.Failed, Base64Image: "QWERTY", Decimals: 21, + Deployer: "0xDEP2", + PrivilegesLevel: token.CommunityLevel, } err := s.addCommunityToken(db, token721) diff --git a/services/ext/api.go b/services/ext/api.go index 4ad6eb482..1dfa5f3b0 100644 --- a/services/ext/api.go +++ b/services/ext/api.go @@ -1353,6 +1353,10 @@ func (api *PublicAPI) UpdateCommunityTokenState(chainID int, contractAddress str return api.service.messenger.UpdateCommunityTokenState(chainID, contractAddress, deployState) } +func (api *PublicAPI) UpdateCommunityTokenAddress(chainID int, oldContractAddress string, newContractAddress string) error { + return api.service.messenger.UpdateCommunityTokenAddress(chainID, oldContractAddress, newContractAddress) +} + func (api *PublicAPI) UpdateCommunityTokenSupply(chainID int, contractAddress string, supply *bigint.BigInt) error { return api.service.messenger.UpdateCommunityTokenSupply(chainID, contractAddress, supply) } diff --git a/services/wallet/collectibles/manager.go b/services/wallet/collectibles/manager.go index 41f58be51..0b9d1ef84 100644 --- a/services/wallet/collectibles/manager.go +++ b/services/wallet/collectibles/manager.go @@ -15,7 +15,7 @@ import ( "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" - "github.com/status-im/status-go/contracts/collectibles" + "github.com/status-im/status-go/contracts/community-tokens/collectibles" "github.com/status-im/status-go/rpc" "github.com/status-im/status-go/services/wallet/bigint" walletCommon "github.com/status-im/status-go/services/wallet/common" diff --git a/transactions/pending.go b/transactions/pending.go index 7a86fcf69..9af735d31 100644 --- a/transactions/pending.go +++ b/transactions/pending.go @@ -103,6 +103,7 @@ const ( AirdropCommunityToken PendingTrxType = "AirdropCommunityToken" RemoteDestructCollectible PendingTrxType = "RemoteDestructCollectible" BurnCommunityToken PendingTrxType = "BurnCommunityToken" + DeployOwnerToken PendingTrxType = "DeployOwnerToken" ) type PendingTransaction struct {