diff --git a/package-lock.json b/package-lock.json index 1f703a0..0da0ac4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "unique-marketplace-backend", - "version": "3.0.240", + "version": "3.0.249", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "unique-marketplace-backend", - "version": "3.0.240", + "version": "3.0.249", "license": "GPL-3.0", "dependencies": { "@commitlint/cli": "^17.6.1", @@ -26,7 +26,7 @@ "@sentry/node": "^7.38.0", "@types/multer": "^1.4.7", "@unique-nft/accounts": "^0.3.5", - "@unique-nft/sdk": "^0.2.11", + "@unique-nft/sdk": "^0.2.23", "@unique-nft/solidity-interfaces": "^0.55.1", "@willsoto/nestjs-prometheus": "^5.1.0", "axios": "^1.0.0", @@ -39,7 +39,7 @@ "helmet": "^6.1.2", "husky": "^8.0.3", "minio": "^7.1.1", - "nestjs-graphile-worker": "^0.3.1", + "nestjs-graphile-worker": "^0.7.0", "nestjs-typeorm-paginate": "^4.0.3", "pg": "^8.9.0", "pg-connection-string": "^2.5.0", @@ -12190,16 +12190,28 @@ } }, "node_modules/@unique-nft/sdk": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@unique-nft/sdk/-/sdk-0.2.11.tgz", - "integrity": "sha512-euthPpavduPBqYfdUwEgZbfplZc68l0eTbGIfno5zenRYw6mLMnAeKHEvMOYLMkdAeWYbtNwvjbwOBIo4NOw3Q==", + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@unique-nft/sdk/-/sdk-0.2.23.tgz", + "integrity": "sha512-VupyKOWEo8pRrEFdSfjRNffM4EsXViz4BdwZHBm/ywy/jBQxTALyslYchMdMPfmYiyqdcHXJ5oVRMBrVQlXpAg==", "dependencies": { + "@unique-nft/sr25519": "^0.0.1", + "@unique-nft/utils": "^0.3.12", "abi-coder": "^4.1.1", "axios": "^0.27.2", "form-data": "^4.0.0", "socket.io-client": "^4.5.4" } }, + "node_modules/@unique-nft/sdk/node_modules/@unique-nft/utils": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@unique-nft/utils/-/utils-0.3.14.tgz", + "integrity": "sha512-GJWPaSCM5ZvKJOiLY53LlngBZGAzySk4mSkcWoCUftqgNaeCekOadCDBiy2jmRhIEKpxE6wDRW/gT+2S8JtjvA==", + "dependencies": { + "@noble/hashes": "^1.1.2", + "base-x": "^4.0.0", + "utf-helpers": "^0.0.3" + } + }, "node_modules/@unique-nft/sdk/node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", @@ -12218,6 +12230,15 @@ "ethers": "^5.7.2" } }, + "node_modules/@unique-nft/sr25519": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@unique-nft/sr25519/-/sr25519-0.0.1.tgz", + "integrity": "sha512-LedK8lwoCvHuye0hfraG/caBfmmp4nFEizWzaLusPSMLnQY8o4fVbQuiBM7ahX3YMOOv8o/VSKiyf7X4WtOk2Q==", + "dependencies": { + "@noble/hashes": "^1.2.0", + "base-x": "^4.0.0" + } + }, "node_modules/@unique-nft/utils": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@unique-nft/utils/-/utils-0.3.11.tgz", @@ -28676,18 +28697,16 @@ "dev": true }, "node_modules/nestjs-graphile-worker": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/nestjs-graphile-worker/-/nestjs-graphile-worker-0.3.1.tgz", - "integrity": "sha512-IE2EkaJplwh8P85vVQ0J4n2nOrqriLfZIfW30Y6u6fKxxi/yu+DrMRxisTnDIMCGkdpevH2+reSSw4bJmtM7sA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/nestjs-graphile-worker/-/nestjs-graphile-worker-0.7.0.tgz", + "integrity": "sha512-aU5aXR3cdFN2HFqMs2A7kEmOCKE60bQt6DU0GapCdlF3DOybGIOEVdrjVmwu/SEHTq0XCwKin0RBf8H1FBbv7A==", "dependencies": { - "@nestjs/config": "^2.2.0", - "@nestjs/core": "^9.2.1", - "reflect-metadata": "^0.1.13" + "reflect-metadata": "^0.1.12" }, "peerDependencies": { - "@nestjs/common": "^9.0.0", - "@nestjs/core": "^9.0.0", - "graphile-worker": "^0.13.0" + "@nestjs/common": "^9.0.0 || ^10.0.0", + "@nestjs/core": "^9.0.0 || ^10.0.0", + "graphile-worker": "^0.13.0 || ^0.14.0 || ^0.15.0 || ^0.16.0" } }, "node_modules/nestjs-typeorm-paginate": { @@ -46895,16 +46914,28 @@ } }, "@unique-nft/sdk": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@unique-nft/sdk/-/sdk-0.2.11.tgz", - "integrity": "sha512-euthPpavduPBqYfdUwEgZbfplZc68l0eTbGIfno5zenRYw6mLMnAeKHEvMOYLMkdAeWYbtNwvjbwOBIo4NOw3Q==", + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/@unique-nft/sdk/-/sdk-0.2.23.tgz", + "integrity": "sha512-VupyKOWEo8pRrEFdSfjRNffM4EsXViz4BdwZHBm/ywy/jBQxTALyslYchMdMPfmYiyqdcHXJ5oVRMBrVQlXpAg==", "requires": { + "@unique-nft/sr25519": "^0.0.1", + "@unique-nft/utils": "^0.3.12", "abi-coder": "^4.1.1", "axios": "^0.27.2", "form-data": "^4.0.0", "socket.io-client": "^4.5.4" }, "dependencies": { + "@unique-nft/utils": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@unique-nft/utils/-/utils-0.3.14.tgz", + "integrity": "sha512-GJWPaSCM5ZvKJOiLY53LlngBZGAzySk4mSkcWoCUftqgNaeCekOadCDBiy2jmRhIEKpxE6wDRW/gT+2S8JtjvA==", + "requires": { + "@noble/hashes": "^1.1.2", + "base-x": "^4.0.0", + "utf-helpers": "^0.0.3" + } + }, "axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", @@ -46925,6 +46956,15 @@ "ethers": "^5.7.2" } }, + "@unique-nft/sr25519": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@unique-nft/sr25519/-/sr25519-0.0.1.tgz", + "integrity": "sha512-LedK8lwoCvHuye0hfraG/caBfmmp4nFEizWzaLusPSMLnQY8o4fVbQuiBM7ahX3YMOOv8o/VSKiyf7X4WtOk2Q==", + "requires": { + "@noble/hashes": "^1.2.0", + "base-x": "^4.0.0" + } + }, "@unique-nft/utils": { "version": "0.3.11", "resolved": "https://registry.npmjs.org/@unique-nft/utils/-/utils-0.3.11.tgz", @@ -59505,13 +59545,11 @@ "dev": true }, "nestjs-graphile-worker": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/nestjs-graphile-worker/-/nestjs-graphile-worker-0.3.1.tgz", - "integrity": "sha512-IE2EkaJplwh8P85vVQ0J4n2nOrqriLfZIfW30Y6u6fKxxi/yu+DrMRxisTnDIMCGkdpevH2+reSSw4bJmtM7sA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/nestjs-graphile-worker/-/nestjs-graphile-worker-0.7.0.tgz", + "integrity": "sha512-aU5aXR3cdFN2HFqMs2A7kEmOCKE60bQt6DU0GapCdlF3DOybGIOEVdrjVmwu/SEHTq0XCwKin0RBf8H1FBbv7A==", "requires": { - "@nestjs/config": "^2.2.0", - "@nestjs/core": "^9.2.1", - "reflect-metadata": "^0.1.13" + "reflect-metadata": "^0.1.12" } }, "nestjs-typeorm-paginate": { diff --git a/package.json b/package.json index 7c98be5..5caf2bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "unique-marketplace-backend", - "version": "3.0.240", + "version": "3.0.249", "description": "Backend project for unique marketplace", "author": "Unique Network", "private": true, @@ -52,7 +52,7 @@ "@sentry/node": "^7.38.0", "@types/multer": "^1.4.7", "@unique-nft/accounts": "^0.3.5", - "@unique-nft/sdk": "^0.2.11", + "@unique-nft/sdk": "^0.2.23", "@unique-nft/solidity-interfaces": "^0.55.1", "@willsoto/nestjs-prometheus": "^5.1.0", "axios": "^1.0.0", @@ -65,7 +65,7 @@ "helmet": "^6.1.2", "husky": "^8.0.3", "minio": "^7.1.1", - "nestjs-graphile-worker": "^0.3.1", + "nestjs-graphile-worker": "^0.7.0", "nestjs-typeorm-paginate": "^4.0.3", "pg": "^8.9.0", "pg-connection-string": "^2.5.0", diff --git a/packages/common/modules/database/database.module.ts b/packages/common/modules/database/database.module.ts index c088bc4..4a51530 100644 --- a/packages/common/modules/database/database.module.ts +++ b/packages/common/modules/database/database.module.ts @@ -35,6 +35,7 @@ import { NormalizeAddress1688973356000, BannersEntity1689929097000, DeployContractV1_1690877576943, + DeployContractV2_1711532661239, } from './migrations'; import { BannersService, ContractService, OfferService, SettingsService } from './services'; import { OfferEventService } from './services/offer-event.service'; @@ -72,6 +73,7 @@ const migrations = [ NormalizeAddress1688973356000, BannersEntity1689929097000, DeployContractV1_1690877576943, + DeployContractV2_1711532661239, ]; function typeOrmModulesFactory( diff --git a/packages/common/modules/database/migrations/1711532661239-DeployContractV2.ts b/packages/common/modules/database/migrations/1711532661239-DeployContractV2.ts new file mode 100644 index 0000000..3be9577 --- /dev/null +++ b/packages/common/modules/database/migrations/1711532661239-DeployContractV2.ts @@ -0,0 +1,6 @@ +import { DeployContractBase } from './base/deploy'; + +export class DeployContractV2_1711532661239 extends DeployContractBase { + public readonly version: number = 2; + public readonly feeValue: number = 0; +} diff --git a/packages/common/modules/database/migrations/index.ts b/packages/common/modules/database/migrations/index.ts index 38e41a3..91d8a4b 100644 --- a/packages/common/modules/database/migrations/index.ts +++ b/packages/common/modules/database/migrations/index.ts @@ -16,3 +16,4 @@ export * from './1686310569001-VerifyMessageContract'; export * from './1688973356000-NormalizeAddress'; export * from './1689929097000-BannersEntity'; export * from './1690877576943-DeployContractV1'; +export * from './1711532661239-DeployContractV2'; diff --git a/packages/contracts/assemblies/1/abi.json b/packages/contracts/assemblies/1/abi.json index 0d7d63b..8e12c6d 100644 --- a/packages/contracts/assemblies/1/abi.json +++ b/packages/contracts/assemblies/1/abi.json @@ -594,29 +594,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "collectionId", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "tokenId", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "price", - "type": "uint256" - } - ], - "name": "changePrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -935,4 +912,4 @@ "stateMutability": "payable", "type": "receive" } -] \ No newline at end of file +] diff --git a/packages/contracts/assemblies/2/abi.json b/packages/contracts/assemblies/2/abi.json new file mode 100644 index 0000000..0d7d63b --- /dev/null +++ b/packages/contracts/assemblies/2/abi.json @@ -0,0 +1,938 @@ +[ + { + "inputs": [ + { + "internalType": "uint32", + "name": "fee", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "timestamp", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "CollectionInBlacklist", + "type": "error" + }, + { + "inputs": [], + "name": "CollectionNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "CollectionNotSupportedERC721", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "FailTransferToken", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "info", + "type": "string" + } + ], + "name": "InvalidArgument", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidMarketFee", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalRoyalty", + "type": "uint256" + } + ], + "name": "InvalidRoyaltiesError", + "type": "error" + }, + { + "inputs": [], + "name": "NotEnoughMoneyError", + "type": "error" + }, + { + "inputs": [], + "name": "OrderNotFound", + "type": "error" + }, + { + "inputs": [], + "name": "SellerIsNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "TokenIsAlreadyOnSale", + "type": "error" + }, + { + "inputs": [], + "name": "TokenIsNotApproved", + "type": "error" + }, + { + "inputs": [], + "name": "TooManyAmountRequested", + "type": "error" + }, + { + "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": false, + "internalType": "uint32", + "name": "version", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct Market.Order", + "name": "item", + "type": "tuple" + } + ], + "name": "TokenIsApproved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "version", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct Market.Order", + "name": "item", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "salesAmount", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct CrossAddress", + "name": "buyer", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "crossAddress", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct RoyaltyAmount[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "TokenIsPurchased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "version", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct Market.Order", + "name": "item", + "type": "tuple" + } + ], + "name": "TokenIsUpForSale", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "version", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct Market.Order", + "name": "item", + "type": "tuple" + } + ], + "name": "TokenPriceChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint32", + "name": "version", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "indexed": false, + "internalType": "struct Market.Order", + "name": "item", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "amount", + "type": "uint32" + } + ], + "name": "TokenRevoke", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + } + ], + "name": "addToBlacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "admins", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "buildVersion", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "buyer", + "type": "tuple" + } + ], + "name": "buy", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "changePrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + } + ], + "name": "checkApproved", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "ctime", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + } + ], + "name": "getOrder", + "outputs": [ + { + "components": [ + { + "internalType": "uint32", + "name": "id", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "internalType": "struct Market.Order", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketFee", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ownerAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + }, + { + "components": [ + { + "internalType": "address", + "name": "eth", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sub", + "type": "uint256" + } + ], + "internalType": "struct CrossAddress", + "name": "seller", + "type": "tuple" + } + ], + "name": "put", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + } + ], + "name": "removeFromBlacklist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "amount", + "type": "uint32" + } + ], + "name": "revoke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "tokenId", + "type": "uint32" + } + ], + "name": "revokeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "collectionId", + "type": "uint32" + }, + { + "internalType": "uint32[]", + "name": "tokenIdList", + "type": "uint32[]" + } + ], + "name": "revokeListAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "transferTo", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } +] \ No newline at end of file diff --git a/packages/contracts/assemblies/2/bytecode.txt b/packages/contracts/assemblies/2/bytecode.txt new file mode 100644 index 0000000..9ba3360 --- /dev/null +++ b/packages/contracts/assemblies/2/bytecode.txt @@ -0,0 +1 @@ +0x60806040526001600460006101000a81548163ffffffff021916908363ffffffff1602179055503480156200003357600080fd5b5060405162005bcd38038062005bcd833981810160405281019062000059919062000279565b620000796200006d6200012260201b60201c565b6200012a60201b60201c565b60018081905550816004806101000a81548163ffffffff021916908363ffffffff16021790555080600460086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550606460048054906101000a900463ffffffff1663ffffffff16106200011a576040517fa51819ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050620002c0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600063ffffffff82169050919050565b6200020e81620001f3565b81146200021a57600080fd5b50565b6000815190506200022e8162000203565b92915050565b600067ffffffffffffffff82169050919050565b620002538162000234565b81146200025f57600080fd5b50565b600081519050620002738162000248565b92915050565b60008060408385031215620002935762000292620001ee565b5b6000620002a3858286016200021d565b9250506020620002b68582860162000262565b9150509250929050565b6158fd80620002d06000396000f3fe6080604052600436106101395760003560e01c806361306e12116100ab5780638da5cb5b1161006f5780638da5cb5b146103e35780638f84aa091461040e5780639c911b9f14610439578063a77fa22314610462578063bbbbdbb61461048b578063f2fde38b146104b457610140565b806361306e1214610314578063704802751461033d578063715018a61461036657806376f99e411461037d57806388b1f012146103a657610140565b806339366f66116100fd57806339366f6614610215578063429b62e51461023e57806350ca79b31461027b57806351cff8d91461029757806354fd4d50146102c0578063569e3bb2146102eb57610140565b806304df02ca146101425780630ccf21561461016b5780631785f53c146101965780631f9164e8146101bf5780632e985100146101ea57610140565b3661014057005b005b34801561014e57600080fd5b506101696004803603810190610164919061402e565b6104dd565b005b34801561017757600080fd5b5061018061063f565b60405161018d919061406a565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b891906140e3565b610653565b005b3480156101cb57600080fd5b506101d46107d5565b6040516101e19190614133565b60405180910390f35b3480156101f657600080fd5b506101ff6107ef565b60405161020c919061406a565b60405180910390f35b34801561022157600080fd5b5061023c6004803603810190610237919061414e565b6107f4565b005b34801561024a57600080fd5b50610265600480360381019061026091906140e3565b610db8565b60405161027291906141a9565b60405180910390f35b610295600480360381019061029091906142db565b610dd8565b005b3480156102a357600080fd5b506102be60048036038101906102b991906140e3565b6117a6565b005b3480156102cc57600080fd5b506102d5611808565b6040516102e2919061406a565b60405180910390f35b3480156102f757600080fd5b50610312600480360381019061030d919061414e565b61180d565b005b34801561032057600080fd5b5061033b60048036038101906103369190614342565b611c19565b005b34801561034957600080fd5b50610364600480360381019061035f91906140e3565b6120f6565b005b34801561037257600080fd5b5061037b612281565b005b34801561038957600080fd5b506103a4600480360381019061039f919061402e565b612295565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061414e565b612400565b6040516103da919061446c565b60405180910390f35b3480156103ef57600080fd5b506103f861256d565b6040516104059190614496565b60405180910390f35b34801561041a57600080fd5b50610423612596565b6040516104309190614496565b60405180910390f35b34801561044557600080fd5b50610460600480360381019061045b91906144b1565b6125bc565b005b34801561046e57600080fd5b5061048960048036038101906104849190614591565b612c26565b005b34801561049757600080fd5b506104b260048036038101906104ad91906145f1565b612daf565b005b3480156104c057600080fd5b506104db60048036038101906104d691906140e3565b612eef565b005b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054c9190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806105ce5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61060d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610604906146e3565b60405180910390fd5b600260008263ffffffff1663ffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b60048054906101000a900463ffffffff1681565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c29190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107445750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077a906146e3565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b600460089054906101000a900467ffffffffffffffff1681565b600581565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561083f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108639190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108e55750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b906146e3565b60405180910390fd5b6000600360008463ffffffff1663ffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201548152602001600282016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816080015103610ac3576040517fd36d896500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ace84612f72565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc856040518263ffffffff1660e01b8152600401610b20919061473e565b602060405180830381865afa158015610b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b619190614659565b73ffffffffffffffffffffffffffffffffffffffff16141580610c355750610b8c8260a001516130b5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401610bdb919061473e565b602060405180830381865afa158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c9190614659565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610d77576000826060015190506000836060019063ffffffff16908163ffffffff16815250507f8b84a9d17a9abd56ec613d6f30cffec56a8b82edfb18ca0313e181ff8597604660008483604051610c9093929190614759565b60405180910390a1600360008663ffffffff1663ffffffff16815260200190815260200160002060008563ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549063ffffffff021916905560008201600c6101000a81549063ffffffff0219169055600182016000905560028201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050505050610db2565b7f4f47d62955656a48e44f8ef432fb998abb2153eaa66a9fe2f24e6764c6f494a7600083604051610da9929190614792565b60405180910390a15b50505050565b60066020528060005260406000206000915054906101000a900460ff1681565b80600001518160200151600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015610e1e5750600081145b15610e5e576040517f7ffc6cec000000000000000000000000000000000000000000000000000000008152600401610e559061482e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610e9c575060008114155b15610edc576040517f7ffc6cec000000000000000000000000000000000000000000000000000000008152600401610ed3906148e6565b60405180910390fd5b610ee461310b565b60003403610f27576040517f7ffc6cec000000000000000000000000000000000000000000000000000000008152600401610f1e90614952565b60405180910390fd5b60008463ffffffff1603610f70576040517f7ffc6cec000000000000000000000000000000000000000000000000000000008152600401610f67906149be565b60405180910390fd5b600260008763ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff1615610fd4576040517f15272a6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008863ffffffff1663ffffffff16815260200190815260200160002060008763ffffffff1663ffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201548152602001600282016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816080015103611173576040517fd36d896500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015163ffffffff168563ffffffff1611156111bd576040517fc8d8363500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008563ffffffff1682608001516111d59190614a0d565b90506000606460048054906101000a900463ffffffff1663ffffffff16836111fd9190614a0d565b6112079190614a7e565b905081341015611243576040517f0aae32c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112528460200151612f72565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc8b6040518263ffffffff1660e01b81526004016112a4919061473e565b602060405180830381865afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190614659565b73ffffffffffffffffffffffffffffffffffffffff1614611332576040517f9d0734e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87846060018181516113449190614aaf565b91509063ffffffff16908163ffffffff16815250506000846060015163ffffffff160361144957600360008b63ffffffff1663ffffffff16815260200190815260200160002060008a63ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549063ffffffff021916905560008201600c6101000a81549063ffffffff0219169055600182016000905560028201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050505061158c565b83600360008c63ffffffff1663ffffffff16815260200190815260200160002060008b63ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506080820151816001015560a08201518160020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550509050505b6000736c4e9fe1ae37a41e93cee429e8e1881abdcbb54f73ffffffffffffffffffffffffffffffffffffffff16632e7166838c6040518263ffffffff1660e01b81526004016115db919061406a565b602060405180830381865afa1580156115f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161c9190614659565b905060008190508073ffffffffffffffffffffffffffffffffffffffff1663d5cf430b8760a001518b89604001516040518463ffffffff1660e01b815260040161166893929190614b16565b600060405180830381600087803b15801561168257600080fd5b505af1158015611696573d6000803e3d6000fd5b505050506000806116b9848e63ffffffff16888a6116b49190614b4d565b61315a565b9150915085876116c99190614b4d565b821061170c57816040517f2c0e7e590000000000000000000000000000000000000000000000000000000081526004016117039190614b90565b60405180910390fd5b6117308860a0015183888a6117219190614b4d565b61172b9190614b4d565b6131e2565b8634111561174e5761174d8b88346117489190614b4d565b6131e2565b5b7f5b5c1d1ff240fa8cb7d6f07b0255cfab7647b22759c1bbeb3360f4bde817bd716000898e8e85604051611786959493929190614c89565b60405180910390a1505050505050505061179e61336a565b505050505050565b6117ae613373565b60004790506000811115611804578173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611802573d6000803e3d6000fd5b505b5050565b600081565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187c9190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118fe5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61193d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611934906146e3565b60405180910390fd5b6000600360008463ffffffff1663ffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201548152602001600282016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816080015103611adc576040517fd36d896500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816060015190506000826060019063ffffffff16908163ffffffff16815250507f8b84a9d17a9abd56ec613d6f30cffec56a8b82edfb18ca0313e181ff8597604660008383604051611b3293929190614759565b60405180910390a1600360008563ffffffff1663ffffffff16815260200190815260200160002060008463ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549063ffffffff021916905560008201600c6101000a81549063ffffffff0219169055600182016000905560028201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090555050505050505050565b60008163ffffffff1603611c62576040517f7ffc6cec000000000000000000000000000000000000000000000000000000008152600401611c59906149be565b60405180910390fd5b6000600360008563ffffffff1663ffffffff16815260200190815260200160002060008463ffffffff1663ffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201548152602001600282016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250508152505090506000816080015103611e01576040517fd36d896500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806060015163ffffffff168263ffffffff161115611e4b576040517fc8d8363500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e5a84848360a001516133f1565b8181606001818151611e6c9190614aaf565b91509063ffffffff16908163ffffffff16815250506000816060015163ffffffff1603611f7157600360008563ffffffff1663ffffffff16815260200190815260200160002060008463ffffffff1663ffffffff168152602001908152602001600020600080820160006101000a81549063ffffffff02191690556000820160046101000a81549063ffffffff02191690556000820160086101000a81549063ffffffff021916905560008201600c6101000a81549063ffffffff0219169055600182016000905560028201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160009055505050506120b4565b80600360008663ffffffff1663ffffffff16815260200190815260200160002060008563ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506080820151816001015560a08201518160020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550509050505b7f8b84a9d17a9abd56ec613d6f30cffec56a8b82edfb18ca0313e181ff85976046600082846040516120e893929190614759565b60405180910390a150505050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612141573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121659190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121e75750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d906146e3565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612289613373565b612293600061356d565b565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123049190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123865750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc906146e3565b60405180910390fd5b6001600260008363ffffffff1663ffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612408613ef3565b600360008463ffffffff1663ffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201548152602001600282016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152505081525050905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600001518160200151600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156126025750600081145b15612642576040517f7ffc6cec0000000000000000000000000000000000000000000000000000000081526004016126399061482e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612680575060008114155b156126c0576040517f7ffc6cec0000000000000000000000000000000000000000000000000000000081526004016126b7906148e6565b60405180910390fd5b6126cb8787856133f1565b6000850361270e576040517f7ffc6cec00000000000000000000000000000000000000000000000000000000815260040161270590614d33565b60405180910390fd5b60008463ffffffff1603612757576040517f7ffc6cec00000000000000000000000000000000000000000000000000000000815260040161274e906149be565b60405180910390fd5b600260008863ffffffff1663ffffffff16815260200190815260200160002060009054906101000a900460ff16156127bb576040517f15272a6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008963ffffffff1663ffffffff16815260200190815260200160002060008863ffffffff1663ffffffff168152602001908152602001600020600101541115612835576040517f3747997a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061284088612f72565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e896040518263ffffffff1660e01b8152600401612892919061473e565b602060405180830381865afa1580156128af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d39190614659565b73ffffffffffffffffffffffffffffffffffffffff1614612920576040517fdc3e890d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc896040518263ffffffff1660e01b8152600401612970919061473e565b602060405180830381865afa15801561298d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b19190614659565b73ffffffffffffffffffffffffffffffffffffffff16146129fe576040517f9d0734e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c00160405280600063ffffffff1681526020018a63ffffffff1681526020018963ffffffff1681526020018763ffffffff1681526020018881526020018681525090506004600081819054906101000a900463ffffffff1680929190612a6a90614d53565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000019063ffffffff16908163ffffffff168152505080600360008b63ffffffff1663ffffffff16815260200190815260200160002060008a63ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff1602179055506080820151816001015560a08201518160020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550509050507f6953fbf20328d3ddc5c537c26c8487f6b94f9bc0dde05bd365aabb2475cde16c600082604051612c13929190614792565b60405180910390a1505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c959190614659565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612d175750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d906146e3565b60405180910390fd5b60005b82829050811015612da957612d9584848484818110612d7b57612d7a614d7f565b5b9050602002016020810190612d90919061402e565b61180d565b600181612da29190614dae565b9050612d59565b50505050565b6000600360008563ffffffff1663ffffffff16815260200190815260200160002060008463ffffffff1663ffffffff16815260200190815260200160002090506000816001015403612e2d576040517fd36d896500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ea68484836002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815250506133f1565b8181600101819055507fdd113bcb34eb0ae236ff1e9626bd8e4b0aab35eff063c9c42d6cdc16df44c534600082604051612ee1929190614fd1565b60405180910390a150505050565b612ef7613373565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5d9061506d565b60405180910390fd5b612f6f8161356d565b50565b600080736c4e9fe1ae37a41e93cee429e8e1881abdcbb54f73ffffffffffffffffffffffffffffffffffffffff16632e716683846040518263ffffffff1660e01b8152600401612fc2919061406a565b602060405180830381865afa158015612fdf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130039190614659565b90506000813b905060008103613045576040517f8482949e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130756380ac58cd60e01b8373ffffffffffffffffffffffffffffffffffffffff1661363190919063ffffffff16565b6130ab576040517f26b0399a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8192505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146130fa5781600001519050613106565b60608260200151901c90505b919050565b600260015403613150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613147906150d9565b60405180910390fd5b6002600181905550565b60006060600061316b868686613656565b90506000805b82518110156131d157600083828151811061318f5761318e614d7f565b5b602002602001015190508060200151836131a99190614dae565b92506131bd816000015182602001516131e2565b5080806131c9906150f9565b915050613171565b508082935093505050935093915050565b6000736c4e9fe1ae37a41e93cee429e8e1881abdcbb54f73ffffffffffffffffffffffffffffffffffffffff16632e71668360006040518263ffffffff1660e01b8152600401613232919061517c565b602060405180830381865afa15801561324f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132739190614659565b90506000819050600060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250905060006040518060400160405280876000015173ffffffffffffffffffffffffffffffffffffffff168152602001876020015181525090508273ffffffffffffffffffffffffffffffffffffffff1663d5cf430b8383886040518463ffffffff1660e01b815260040161331e939291906151c6565b6020604051808303816000875af115801561333d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133619190615229565b50505050505050565b60018081905550565b61337b61367c565b73ffffffffffffffffffffffffffffffffffffffff1661339961256d565b73ffffffffffffffffffffffffffffffffffffffff16146133ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e6906152a2565b60405180910390fd5b565b60006133fc84612f72565b905060008073ffffffffffffffffffffffffffffffffffffffff16836000015173ffffffffffffffffffffffffffffffffffffffff1614613443578260000151905061344f565b60608360200151901c90505b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b815260040161349f919061473e565b602060405180830381865afa1580156134bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e09190614659565b73ffffffffffffffffffffffffffffffffffffffff1614158061352f57503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613566576040517fdc3e890d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061363c83613684565b801561364e575061364d83836136d1565b5b905092915050565b606060006136648585613790565b9050613672816000856137b9565b9150509392505050565b600033905090565b60006136b0827f01ffc9a7000000000000000000000000000000000000000000000000000000006136d1565b80156136ca57506136c88263ffffffff60e01b6136d1565b155b9050919050565b6000806301ffc9a760e01b836040516024016136ed91906152fd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015613778575060208210155b80156137845750600081115b94505050505092915050565b606061379c838361393c565b905060008151036137b3576137b083613a60565b90505b92915050565b60606000845167ffffffffffffffff8111156137d8576137d76141da565b5b60405190808252806020026020018201604052801561381157816020015b6137fe613f47565b8152602001906001900390816137f65790505b5090506000805b865181101561392c5786818151811061383457613833614d7f565b5b60200260200101516060015115158615150361391957600087828151811061385f5761385e614d7f565b5b602002602001015160200151600a6138779190615458565b88838151811061388a57613889614d7f565b5b60200260200101516040015167ffffffffffffffff16876138ab9190614a0d565b6138b59190614a7e565b905060405180604001604052808984815181106138d5576138d4614d7f565b5b6020026020010151608001518152602001828152508484815181106138fd576138fc614d7f565b5b60200260200101819052506001836139159190614dae565b9250505b8080613924906150f9565b915050613818565b5080825281925050509392505050565b60608273ffffffffffffffffffffffffffffffffffffffff16637228c327836040518060400160405280600981526020017f726f79616c7469657300000000000000000000000000000000000000000000008152506040518363ffffffff1660e01b81526004016139ae929190615511565b600060405180830381865afa9250505080156139ed57506040513d6000823e3d601f19601f820116820180604052508101906139ea91906155e7565b60015b613a4d57600067ffffffffffffffff811115613a0c57613a0b6141da565b5b604051908082528060200260200182016040528015613a4557816020015b613a32613f67565b815260200190600190039081613a2a5790505b509050613a5a565b613a5681613b81565b9150505b92915050565b60608173ffffffffffffffffffffffffffffffffffffffff1663cf24fd6d6040518060400160405280600981526020017f726f79616c7469657300000000000000000000000000000000000000000000008152506040518263ffffffff1660e01b8152600401613ad09190615630565b600060405180830381865afa925050508015613b0f57506040513d6000823e3d601f19601f82011682018060405250810190613b0c91906155e7565b60015b613b6f57600067ffffffffffffffff811115613b2e57613b2d6141da565b5b604051908082528060200260200182016040528015613b6757816020015b613b54613f67565b815260200190600190039081613b4c5790505b509050613b7c565b613b7881613b81565b9150505b919050565b60606000825103613be857600067ffffffffffffffff811115613ba757613ba66141da565b5b604051908082528060200260200182016040528015613be057816020015b613bcd613f67565b815260200190600190039081613bc55790505b509050613df2565b600060408351613bf89190615652565b14613c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c2f9061571b565b60405180910390fd5b600060408351613c489190614a7e565b90506000600282613c599190614a0d565b905060008267ffffffffffffffff811115613c7757613c766141da565b5b604051908082528060200260200182016040528015613cb057816020015b613c9d613f67565b815260200190600190039081613c955790505b5090506000604067ffffffffffffffff811115613cd057613ccf6141da565b5b6040519080825280601f01601f191660200182016040528015613d025781602001600182028036833780820191505090505b50905060208082015282604082015260008187604051602001613d26929190615782565b604051602081830303815290604052806020019051810190613d48919061587e565b905060005b85811015613de857613db782600283613d669190614a0d565b81518110613d7757613d76614d7f565b5b6020026020010151836001600285613d8f9190614a0d565b613d999190614dae565b81518110613daa57613da9614d7f565b5b6020026020010151613df7565b848281518110613dca57613dc9614d7f565b5b60200260200101819052508080613de0906150f9565b915050613d4d565b5082955050505050505b919050565b613dff613f67565b600060f884901c9050600080604c6001901b861611905060008060486001901b8716149050600060ff604088901c169050600067ffffffffffffffff88169050600083613e77576040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200189815250613ea4565b60405180604001604052808973ffffffffffffffffffffffffffffffffffffffff16815260200160008152505b905060006040518060a001604052808860ff1681526020018560ff1681526020018467ffffffffffffffff16815260200187151581526020018381525090508097505050505050505092915050565b6040518060c00160405280600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff16815260200160008152602001613f41613fae565b81525090565b6040518060400160405280613f5a613fae565b8152602001600081525090565b6040518060a00160405280600060ff168152602001600060ff168152602001600067ffffffffffffffff168152602001600015158152602001613fa8613fae565b81525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b61400b81613ff2565b811461401657600080fd5b50565b60008135905061402881614002565b92915050565b60006020828403121561404457614043613fe8565b5b600061405284828501614019565b91505092915050565b61406481613ff2565b82525050565b600060208201905061407f600083018461405b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006140b082614085565b9050919050565b6140c0816140a5565b81146140cb57600080fd5b50565b6000813590506140dd816140b7565b92915050565b6000602082840312156140f9576140f8613fe8565b5b6000614107848285016140ce565b91505092915050565b600067ffffffffffffffff82169050919050565b61412d81614110565b82525050565b60006020820190506141486000830184614124565b92915050565b6000806040838503121561416557614164613fe8565b5b600061417385828601614019565b925050602061418485828601614019565b9150509250929050565b60008115159050919050565b6141a38161418e565b82525050565b60006020820190506141be600083018461419a565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614212826141c9565b810181811067ffffffffffffffff82111715614231576142306141da565b5b80604052505050565b6000614244613fde565b90506142508282614209565b919050565b6000819050919050565b61426881614255565b811461427357600080fd5b50565b6000813590506142858161425f565b92915050565b6000604082840312156142a1576142a06141c4565b5b6142ab604061423a565b905060006142bb848285016140ce565b60008301525060206142cf84828501614276565b60208301525092915050565b60008060008060a085870312156142f5576142f4613fe8565b5b600061430387828801614019565b945050602061431487828801614019565b935050604061432587828801614019565b92505060606143368782880161428b565b91505092959194509250565b60008060006060848603121561435b5761435a613fe8565b5b600061436986828701614019565b935050602061437a86828701614019565b925050604061438b86828701614019565b9150509250925092565b61439e81613ff2565b82525050565b6143ad81614255565b82525050565b6143bc816140a5565b82525050565b6040820160008201516143d860008501826143b3565b5060208201516143eb60208501826143a4565b50505050565b60e0820160008201516144076000850182614395565b50602082015161441a6020850182614395565b50604082015161442d6040850182614395565b5060608201516144406060850182614395565b50608082015161445360808501826143a4565b5060a082015161446660a08501826143c2565b50505050565b600060e08201905061448160008301846143f1565b92915050565b614490816140a5565b82525050565b60006020820190506144ab6000830184614487565b92915050565b600080600080600060c086880312156144cd576144cc613fe8565b5b60006144db88828901614019565b95505060206144ec88828901614019565b94505060406144fd88828901614276565b935050606061450e88828901614019565b925050608061451f8882890161428b565b9150509295509295909350565b600080fd5b600080fd5b600080fd5b60008083601f8401126145515761455061452c565b5b8235905067ffffffffffffffff81111561456e5761456d614531565b5b60208301915083602082028301111561458a57614589614536565b5b9250929050565b6000806000604084860312156145aa576145a9613fe8565b5b60006145b886828701614019565b935050602084013567ffffffffffffffff8111156145d9576145d8613fed565b5b6145e58682870161453b565b92509250509250925092565b60008060006060848603121561460a57614609613fe8565b5b600061461886828701614019565b935050602061462986828701614019565b925050604061463a86828701614276565b9150509250925092565b600081519050614653816140b7565b92915050565b60006020828403121561466f5761466e613fe8565b5b600061467d84828501614644565b91505092915050565b600082825260208201905092915050565b7f4f6e6c792061646d696e2063616e000000000000000000000000000000000000600082015250565b60006146cd600e83614686565b91506146d882614697565b602082019050919050565b600060208201905081810360008301526146fc816146c0565b9050919050565b6000819050919050565b600061472861472361471e84613ff2565b614703565b614255565b9050919050565b6147388161470d565b82525050565b6000602082019050614753600083018461472f565b92915050565b60006101208201905061476f600083018661405b565b61477c60208301856143f1565b61478a61010083018461405b565b949350505050565b6000610100820190506147a8600083018561405b565b6147b560208301846143f1565b9392505050565b7f457468657265756d20616e64205375627374726174652061646472657373657360008201527f2063616e6e6f74206265206e756c6c206174207468652073616d652074696d65602082015250565b6000614818604083614686565b9150614823826147bc565b604082019050919050565b600060208201905081810360008301526148478161480b565b9050919050565b7f457468657265756d20616e64205375627374726174652061646472657373657360008201527f2063616e6e6f74206265206e6f74206e756c6c206174207468652073616d652060208201527f74696d6500000000000000000000000000000000000000000000000000000000604082015250565b60006148d0604483614686565b91506148db8261484e565b606082019050919050565b600060208201905081810360008301526148ff816148c3565b9050919050565b7f6d73672e76616c7565206d757374206e6f74206265207a65726f000000000000600082015250565b600061493c601a83614686565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f616d6f756e74206d757374206e6f74206265207a65726f000000000000000000600082015250565b60006149a8601783614686565b91506149b382614972565b602082019050919050565b600060208201905081810360008301526149d78161499b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a1882614255565b9150614a2383614255565b9250828202614a3181614255565b91508282048414831517614a4857614a476149de565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a8982614255565b9150614a9483614255565b925082614aa457614aa3614a4f565b5b828204905092915050565b6000614aba82613ff2565b9150614ac583613ff2565b9250828203905063ffffffff811115614ae157614ae06149de565b5b92915050565b604082016000820151614afd60008501826143b3565b506020820151614b1060208501826143a4565b50505050565b600060a082019050614b2b6000830186614ae7565b614b386040830185614ae7565b614b45608083018461472f565b949350505050565b6000614b5882614255565b9150614b6383614255565b9250828203905081811115614b7b57614b7a6149de565b5b92915050565b614b8a81614255565b82525050565b6000602082019050614ba56000830184614b81565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b606082016000820151614bed60008501826143c2565b506020820151614c0060408501826143a4565b50505050565b6000614c128383614bd7565b60608301905092915050565b6000602082019050919050565b6000614c3682614bab565b614c408185614bb6565b9350614c4b83614bc7565b8060005b83811015614c7c578151614c638882614c06565b9750614c6e83614c1e565b925050600181019050614c4f565b5085935050505092915050565b600061018082019050614c9f600083018861405b565b614cac60208301876143f1565b614cba61010083018661405b565b614cc8610120830185614ae7565b818103610160830152614cdb8184614c2b565b90509695505050505050565b7f7072696365206d757374206e6f74206265207a65726f00000000000000000000600082015250565b6000614d1d601683614686565b9150614d2882614ce7565b602082019050919050565b60006020820190508181036000830152614d4c81614d10565b9050919050565b6000614d5e82613ff2565b915063ffffffff8203614d7457614d736149de565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614db982614255565b9150614dc483614255565b9250828201905080821115614ddc57614ddb6149de565b5b92915050565b60008160001c9050919050565b600063ffffffff82169050919050565b6000614e12614e0d83614de2565b614def565b9050919050565b60008160201c9050919050565b6000614e39614e3483614e19565b614def565b9050919050565b60008160401c9050919050565b6000614e60614e5b83614e40565b614def565b9050919050565b60008160601c9050919050565b6000614e87614e8283614e67565b614def565b9050919050565b6000819050919050565b6000614eab614ea683614de2565b614e8e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614ee5614ee083614de2565b614eb2565b9050919050565b604082016000808301549050614f0181614ed2565b614f0e60008601826143b3565b5060018301549050614f1f81614e98565b614f2c60208601826143a4565b5050505050565b60e082016000808301549050614f4881614dff565b614f556000860182614395565b50614f5f81614e26565b614f6c6020860182614395565b50614f7681614e4d565b614f836040860182614395565b50614f8d81614e74565b614f9a6060860182614395565b5060018301549050614fab81614e98565b614fb860808601826143a4565b5060028301614fca60a0860182614eec565b5050505050565b600061010082019050614fe7600083018561405b565b614ff46020830184614f33565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615057602683614686565b915061506282614ffb565b604082019050919050565b600060208201905081810360008301526150868161504a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006150c3601f83614686565b91506150ce8261508d565b602082019050919050565b600060208201905081810360008301526150f2816150b6565b9050919050565b600061510482614255565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615136576151356149de565b5b600182019050919050565b6000819050919050565b600061516661516161515c84615141565b614703565b613ff2565b9050919050565b6151768161514b565b82525050565b6000602082019050615191600083018461516d565b92915050565b6040820160008201516151ad60008501826143b3565b5060208201516151c060208501826143a4565b50505050565b600060a0820190506151db6000830186615197565b6151e86040830185615197565b6151f56080830184614b81565b949350505050565b6152068161418e565b811461521157600080fd5b50565b600081519050615223816151fd565b92915050565b60006020828403121561523f5761523e613fe8565b5b600061524d84828501615214565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061528c602083614686565b915061529782615256565b602082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6152f7816152c2565b82525050565b600060208201905061531260008301846152ee565b92915050565b60008160011c9050919050565b6000808291508390505b600185111561536f5780860481111561534b5761534a6149de565b5b600185161561535a5780820291505b808102905061536885615318565b945061532f565b94509492505050565b6000826153885760019050615444565b816153965760009050615444565b81600181146153ac57600281146153b6576153e5565b6001915050615444565b60ff8411156153c8576153c76149de565b5b8360020a9150848211156153df576153de6149de565b5b50615444565b5060208310610133831016604e8410600b841016171561541a5782820a905083811115615415576154146149de565b5b615444565b6154278484846001615325565b9250905081840481111561543e5761543d6149de565b5b81810290505b9392505050565b600060ff82169050919050565b600061546382614255565b915061546e8361544b565b925061549b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615378565b905092915050565b600081519050919050565b60005b838110156154cc5780820151818401526020810190506154b1565b60008484015250505050565b60006154e3826154a3565b6154ed8185614686565b93506154fd8185602086016154ae565b615506816141c9565b840191505092915050565b60006040820190506155266000830185614b81565b818103602083015261553881846154d8565b90509392505050565b600080fd5b600067ffffffffffffffff821115615561576155606141da565b5b61556a826141c9565b9050602081019050919050565b600061558a61558584615546565b61423a565b9050828152602081018484840111156155a6576155a5615541565b5b6155b18482856154ae565b509392505050565b600082601f8301126155ce576155cd61452c565b5b81516155de848260208601615577565b91505092915050565b6000602082840312156155fd576155fc613fe8565b5b600082015167ffffffffffffffff81111561561b5761561a613fed565b5b615627848285016155b9565b91505092915050565b6000602082019050818103600083015261564a81846154d8565b905092915050565b600061565d82614255565b915061566883614255565b92508261567857615677614a4f565b5b828206905092915050565b7f496e76616c6964206279746573206c656e6774682c206578706563746564202860008201527f3332202a203229202a20556e69717565526f79616c7479506172747320636f7560208201527f6e74000000000000000000000000000000000000000000000000000000000000604082015250565b6000615705604283614686565b915061571082615683565b606082019050919050565b60006020820190508181036000830152615734816156f8565b9050919050565b600081519050919050565b600081905092915050565b600061575c8261573b565b6157668185615746565b93506157768185602086016154ae565b80840191505092915050565b600061578e8285615751565b915061579a8284615751565b91508190509392505050565b600067ffffffffffffffff8211156157c1576157c06141da565b5b602082029050602081019050919050565b6000815190506157e18161425f565b92915050565b60006157fa6157f5846157a6565b61423a565b9050808382526020820190506020840283018581111561581d5761581c614536565b5b835b81811015615846578061583288826157d2565b84526020840193505060208101905061581f565b5050509392505050565b600082601f8301126158655761586461452c565b5b81516158758482602086016157e7565b91505092915050565b60006020828403121561589457615893613fe8565b5b600082015167ffffffffffffffff8111156158b2576158b1613fed565b5b6158be84828501615850565b9150509291505056fea26469706673582212205e885da82605424c0ddf7f77de38b05e7541bb0b1fc5f8b2751856ad7c222a3664736f6c63430008130033 \ No newline at end of file diff --git a/packages/contracts/assemblies/2/market.ts b/packages/contracts/assemblies/2/market.ts new file mode 100644 index 0000000..0174d3f --- /dev/null +++ b/packages/contracts/assemblies/2/market.ts @@ -0,0 +1,1001 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { + FunctionFragment, + Result, + EventFragment, +} from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from '../../scripts/common-types'; + +export type CrossAddressStruct = { + eth: PromiseOrValue; + sub: PromiseOrValue; +}; + +export type CrossAddressStructOutput = [string, BigNumber] & { + eth: string; + sub: BigNumber; +}; + +export type RoyaltyAmountStruct = { + crossAddress: CrossAddressStruct; + amount: PromiseOrValue; +}; + +export type RoyaltyAmountStructOutput = [ + CrossAddressStructOutput, + BigNumber +] & { crossAddress: CrossAddressStructOutput; amount: BigNumber }; + +export declare namespace Market { + export type OrderStruct = { + id: PromiseOrValue; + collectionId: PromiseOrValue; + tokenId: PromiseOrValue; + amount: PromiseOrValue; + price: PromiseOrValue; + seller: CrossAddressStruct; + }; + + export type OrderStructOutput = [ + number, + number, + number, + number, + BigNumber, + CrossAddressStructOutput + ] & { + id: number; + collectionId: number; + tokenId: number; + amount: number; + price: BigNumber; + seller: CrossAddressStructOutput; + }; +} + +export interface MarketInterface extends utils.Interface { + functions: { + "addAdmin(address)": FunctionFragment; + "addToBlacklist(uint32)": FunctionFragment; + "admins(address)": FunctionFragment; + "buildVersion()": FunctionFragment; + "buy(uint32,uint32,uint32,(address,uint256))": FunctionFragment; + "changePrice(uint32,uint32,uint256)": FunctionFragment; + "checkApproved(uint32,uint32)": FunctionFragment; + "ctime()": FunctionFragment; + "getOrder(uint32,uint32)": FunctionFragment; + "marketFee()": FunctionFragment; + "owner()": FunctionFragment; + "ownerAddress()": FunctionFragment; + "put(uint32,uint32,uint256,uint32,(address,uint256))": FunctionFragment; + "removeAdmin(address)": FunctionFragment; + "removeFromBlacklist(uint32)": FunctionFragment; + "renounceOwnership()": FunctionFragment; + "revoke(uint32,uint32,uint32)": FunctionFragment; + "revokeAdmin(uint32,uint32)": FunctionFragment; + "revokeListAdmin(uint32,uint32[])": FunctionFragment; + "transferOwnership(address)": FunctionFragment; + "version()": FunctionFragment; + "withdraw(address)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "addAdmin" + | "addToBlacklist" + | "admins" + | "buildVersion" + | "buy" + | "changePrice" + | "checkApproved" + | "ctime" + | "getOrder" + | "marketFee" + | "owner" + | "ownerAddress" + | "put" + | "removeAdmin" + | "removeFromBlacklist" + | "renounceOwnership" + | "revoke" + | "revokeAdmin" + | "revokeListAdmin" + | "transferOwnership" + | "version" + | "withdraw" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "addAdmin", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "addToBlacklist", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "admins", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "buildVersion", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "buy", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + CrossAddressStruct + ] + ): string; + encodeFunctionData( + functionFragment: "changePrice", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "checkApproved", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "ctime", values?: undefined): string; + encodeFunctionData( + functionFragment: "getOrder", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "marketFee", values?: undefined): string; + encodeFunctionData(functionFragment: "owner", values?: undefined): string; + encodeFunctionData( + functionFragment: "ownerAddress", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "put", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + CrossAddressStruct + ] + ): string; + encodeFunctionData( + functionFragment: "removeAdmin", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "removeFromBlacklist", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "renounceOwnership", + values?: undefined + ): string; + encodeFunctionData( + functionFragment: "revoke", + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue + ] + ): string; + encodeFunctionData( + functionFragment: "revokeAdmin", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "revokeListAdmin", + values: [PromiseOrValue, PromiseOrValue[]] + ): string; + encodeFunctionData( + functionFragment: "transferOwnership", + values: [PromiseOrValue] + ): string; + encodeFunctionData(functionFragment: "version", values?: undefined): string; + encodeFunctionData( + functionFragment: "withdraw", + values: [PromiseOrValue] + ): string; + + decodeFunctionResult(functionFragment: "addAdmin", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "addToBlacklist", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "admins", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "buildVersion", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "buy", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "changePrice", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "checkApproved", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "ctime", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getOrder", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "marketFee", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "ownerAddress", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "put", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "removeAdmin", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "removeFromBlacklist", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "renounceOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "revoke", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "revokeAdmin", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "revokeListAdmin", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "transferOwnership", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; + + events: { + "OwnershipTransferred(address,address)": EventFragment; + "TokenIsApproved(uint32,tuple)": EventFragment; + "TokenIsPurchased(uint32,tuple,uint32,tuple,tuple[])": EventFragment; + "TokenIsUpForSale(uint32,tuple)": EventFragment; + "TokenPriceChanged(uint32,tuple)": EventFragment; + "TokenRevoke(uint32,tuple,uint32)": EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenIsApproved"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenIsPurchased"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenIsUpForSale"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenPriceChanged"): EventFragment; + getEvent(nameOrSignatureOrTopic: "TokenRevoke"): EventFragment; +} + +export interface OwnershipTransferredEventObject { + previousOwner: string; + newOwner: string; +} +export type OwnershipTransferredEvent = TypedEvent< + [string, string], + OwnershipTransferredEventObject +>; + +export type OwnershipTransferredEventFilter = + TypedEventFilter; + +export interface TokenIsApprovedEventObject { + version: number; + item: Market.OrderStructOutput; +} +export type TokenIsApprovedEvent = TypedEvent< + [number, Market.OrderStructOutput], + TokenIsApprovedEventObject +>; + +export type TokenIsApprovedEventFilter = TypedEventFilter; + +export interface TokenIsPurchasedEventObject { + version: number; + item: Market.OrderStructOutput; + salesAmount: number; + buyer: CrossAddressStructOutput; + royalties: RoyaltyAmountStructOutput[]; +} +export type TokenIsPurchasedEvent = TypedEvent< + [ + number, + Market.OrderStructOutput, + number, + CrossAddressStructOutput, + RoyaltyAmountStructOutput[] + ], + TokenIsPurchasedEventObject +>; + +export type TokenIsPurchasedEventFilter = + TypedEventFilter; + +export interface TokenIsUpForSaleEventObject { + version: number; + item: Market.OrderStructOutput; +} +export type TokenIsUpForSaleEvent = TypedEvent< + [number, Market.OrderStructOutput], + TokenIsUpForSaleEventObject +>; + +export type TokenIsUpForSaleEventFilter = + TypedEventFilter; + +export interface TokenPriceChangedEventObject { + version: number; + item: Market.OrderStructOutput; +} +export type TokenPriceChangedEvent = TypedEvent< + [number, Market.OrderStructOutput], + TokenPriceChangedEventObject +>; + +export type TokenPriceChangedEventFilter = + TypedEventFilter; + +export interface TokenRevokeEventObject { + version: number; + item: Market.OrderStructOutput; + amount: number; +} +export type TokenRevokeEvent = TypedEvent< + [number, Market.OrderStructOutput, number], + TokenRevokeEventObject +>; + +export type TokenRevokeEventFilter = TypedEventFilter; + +export interface Market extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: MarketInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + addAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addToBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + admins( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + buildVersion(overrides?: CallOverrides): Promise<[number]>; + + buy( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + buyer: CrossAddressStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + changePrice( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + checkApproved( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + ctime(overrides?: CallOverrides): Promise<[BigNumber]>; + + getOrder( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[Market.OrderStructOutput]>; + + marketFee(overrides?: CallOverrides): Promise<[number]>; + + owner(overrides?: CallOverrides): Promise<[string]>; + + ownerAddress(overrides?: CallOverrides): Promise<[string]>; + + put( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + amount: PromiseOrValue, + seller: CrossAddressStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeFromBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeAdmin( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeListAdmin( + collectionId: PromiseOrValue, + tokenIdList: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + version(overrides?: CallOverrides): Promise<[number]>; + + withdraw( + transferTo: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + addAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addToBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + admins( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + buildVersion(overrides?: CallOverrides): Promise; + + buy( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + buyer: CrossAddressStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + changePrice( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + checkApproved( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + ctime(overrides?: CallOverrides): Promise; + + getOrder( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + marketFee(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAddress(overrides?: CallOverrides): Promise; + + put( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + amount: PromiseOrValue, + seller: CrossAddressStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeFromBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeAdmin( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeListAdmin( + collectionId: PromiseOrValue, + tokenIdList: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + version(overrides?: CallOverrides): Promise; + + withdraw( + transferTo: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + callStatic: { + addAdmin( + admin: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + addToBlacklist( + collectionId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + admins( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + buildVersion(overrides?: CallOverrides): Promise; + + buy( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + buyer: CrossAddressStruct, + overrides?: CallOverrides + ): Promise; + + changePrice( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + checkApproved( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + ctime(overrides?: CallOverrides): Promise; + + getOrder( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + marketFee(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAddress(overrides?: CallOverrides): Promise; + + put( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + amount: PromiseOrValue, + seller: CrossAddressStruct, + overrides?: CallOverrides + ): Promise; + + removeAdmin( + admin: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + removeFromBlacklist( + collectionId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + renounceOwnership(overrides?: CallOverrides): Promise; + + revoke( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + revokeAdmin( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + revokeListAdmin( + collectionId: PromiseOrValue, + tokenIdList: PromiseOrValue[], + overrides?: CallOverrides + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + version(overrides?: CallOverrides): Promise; + + withdraw( + transferTo: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: { + "OwnershipTransferred(address,address)"( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + OwnershipTransferred( + previousOwner?: PromiseOrValue | null, + newOwner?: PromiseOrValue | null + ): OwnershipTransferredEventFilter; + + "TokenIsApproved(uint32,tuple)"( + version?: null, + item?: null + ): TokenIsApprovedEventFilter; + TokenIsApproved(version?: null, item?: null): TokenIsApprovedEventFilter; + + "TokenIsPurchased(uint32,tuple,uint32,tuple,tuple[])"( + version?: null, + item?: null, + salesAmount?: null, + buyer?: null, + royalties?: null + ): TokenIsPurchasedEventFilter; + TokenIsPurchased( + version?: null, + item?: null, + salesAmount?: null, + buyer?: null, + royalties?: null + ): TokenIsPurchasedEventFilter; + + "TokenIsUpForSale(uint32,tuple)"( + version?: null, + item?: null + ): TokenIsUpForSaleEventFilter; + TokenIsUpForSale(version?: null, item?: null): TokenIsUpForSaleEventFilter; + + "TokenPriceChanged(uint32,tuple)"( + version?: null, + item?: null + ): TokenPriceChangedEventFilter; + TokenPriceChanged( + version?: null, + item?: null + ): TokenPriceChangedEventFilter; + + "TokenRevoke(uint32,tuple,uint32)"( + version?: null, + item?: null, + amount?: null + ): TokenRevokeEventFilter; + TokenRevoke( + version?: null, + item?: null, + amount?: null + ): TokenRevokeEventFilter; + }; + + estimateGas: { + addAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addToBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + admins( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + buildVersion(overrides?: CallOverrides): Promise; + + buy( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + buyer: CrossAddressStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + changePrice( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + checkApproved( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + ctime(overrides?: CallOverrides): Promise; + + getOrder( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + marketFee(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAddress(overrides?: CallOverrides): Promise; + + put( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + amount: PromiseOrValue, + seller: CrossAddressStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeFromBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeAdmin( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeListAdmin( + collectionId: PromiseOrValue, + tokenIdList: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + version(overrides?: CallOverrides): Promise; + + withdraw( + transferTo: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; + + populateTransaction: { + addAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + addToBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + admins( + arg0: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + buildVersion(overrides?: CallOverrides): Promise; + + buy( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + buyer: CrossAddressStruct, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + changePrice( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + checkApproved( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + ctime(overrides?: CallOverrides): Promise; + + getOrder( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + marketFee(overrides?: CallOverrides): Promise; + + owner(overrides?: CallOverrides): Promise; + + ownerAddress(overrides?: CallOverrides): Promise; + + put( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + price: PromiseOrValue, + amount: PromiseOrValue, + seller: CrossAddressStruct, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeAdmin( + admin: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + removeFromBlacklist( + collectionId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + renounceOwnership( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revoke( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeAdmin( + collectionId: PromiseOrValue, + tokenId: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + revokeListAdmin( + collectionId: PromiseOrValue, + tokenIdList: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + transferOwnership( + newOwner: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + version(overrides?: CallOverrides): Promise; + + withdraw( + transferTo: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + }; +} + + +export type MarketEventNames = "OwnershipTransferred" | "TokenIsApproved" | "TokenIsPurchased" | "TokenIsUpForSale" | "TokenPriceChanged" | "TokenRevoke"; diff --git a/packages/contracts/src/Market.sol b/packages/contracts/src/Market.sol index 0fc2891..aba280f 100644 --- a/packages/contracts/src/Market.sol +++ b/packages/contracts/src/Market.sol @@ -23,7 +23,7 @@ contract Market is Ownable, ReentrancyGuard { } uint32 public constant version = 0; - uint32 public constant buildVersion = 4; + uint32 public constant buildVersion = 5; bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd; bytes4 private constant InterfaceId_ERC165 = 0x5755c3f2; CollectionHelpers private constant collectionHelpers = @@ -243,7 +243,7 @@ contract Market is Ownable, ReentrancyGuard { uint32 tokenId, uint256 price ) external { - Order memory order = orders[collectionId][tokenId]; + Order storage order = orders[collectionId][tokenId]; if (order.price == 0) { revert OrderNotFound(); diff --git a/packages/escrow/src/app/contract-events/contract-events.service.ts b/packages/escrow/src/app/contract-events/contract-events.service.ts index 19503e6..67adb28 100644 --- a/packages/escrow/src/app/contract-events/contract-events.service.ts +++ b/packages/escrow/src/app/contract-events/contract-events.service.ts @@ -1,4 +1,4 @@ -import { HasNextData, Sdk, SocketClient } from '@unique-nft/sdk/full'; +import { HasNextData, Sdk, SocketClient, SubscriptionEvents } from '@unique-nft/sdk/full'; import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { getContractAbi } from '@app/contracts/scripts'; import { CollectionEventsHandler, ContractEventsHandler } from './handlers'; @@ -25,17 +25,19 @@ export class ContractEventsService implements OnModuleInit { transports: ['websocket'], }); - this.client.on('collections', this.collectionEventsHandler.onEvent.bind(this.collectionEventsHandler)); - this.client.on('contract-logs', this.contractEventsHandler.onEvent.bind(this.contractEventsHandler)); + this.client.on(SubscriptionEvents.COLLECTIONS, this.collectionEventsHandler.onEvent.bind(this.collectionEventsHandler)); + this.client.on(SubscriptionEvents.CONTRACT_LOGS, this.contractEventsHandler.onEvent.bind(this.contractEventsHandler)); this.client.socket.on('connect_error', async (err) => { this.logger.error(`connect error`, err); }); - this.client.on('has-next', this.onHasNext.bind(this)); + this.client.on(SubscriptionEvents.HAS_NEXT, this.onHasNext.bind(this)); // todo type it after update sdk this.client.socket.on('subscribe-state', this.onSubscribeState.bind(this)); this.client.socket.on('connect', async () => { this.isClientConnected = true; + this.logger.log('connect'); + if (this.isModuleInit) { await this.initContracts(); } diff --git a/packages/escrow/src/app/sdk.service.ts b/packages/escrow/src/app/sdk.service.ts index aa8f581..2f709e7 100644 --- a/packages/escrow/src/app/sdk.service.ts +++ b/packages/escrow/src/app/sdk.service.ts @@ -1,4 +1,4 @@ -import { Injectable, Logger } from "@nestjs/common"; +import { Injectable, Logger } from '@nestjs/common'; import { ChainPropertiesResponse, @@ -26,7 +26,6 @@ export type TokenBalance = { @Injectable() export class SdkService { - private logger = new Logger('SDK'); constructor(private readonly sdk: Sdk) {} @@ -82,8 +81,19 @@ export class SdkService { return [...new Set(recurseBundle(bundle))]; } - async getTokenSchema(collectionId: number, tokenId: number): Promise { - return await this.sdk.tokens.get({ collectionId: collectionId, tokenId: tokenId }); + async getTokenSchema(collectionId: number, tokenId: number): Promise { + let token: TokenByIdResponse; + try { + token = await this.sdk.token.get({ collectionId: collectionId, tokenId: tokenId }); + } catch (error) { + if (error.message === 'Token not found') { + return null; + } + + throw error; + } + + return token; } /** @@ -150,12 +160,16 @@ export class SdkService { * @param collectionId * @param at */ - async getSchemaToken(tokenId: number, collectionId: number): Promise { + async getSchemaToken(tokenId: number, collectionId: number): Promise { let getSchema; try { getSchema = await this.sdk.token.get({ collectionId, tokenId }); } catch (e) { - this.logger.error(e); + if (e.message === 'Token not found') { + return null; + } + + throw e; } if (!getSchema) { return null; diff --git a/packages/escrow/src/collections/collections.service.ts b/packages/escrow/src/collections/collections.service.ts index 20149f3..1d7b034 100644 --- a/packages/escrow/src/collections/collections.service.ts +++ b/packages/escrow/src/collections/collections.service.ts @@ -97,7 +97,9 @@ export class CollectionsService { */ private async addTaskForAddTokensList(tokens: number[], collectionId: number, network: string) { if (tokens.length > 0) { - tokens.map(async (tokenId) => this.graphileService.addToken(collectionId, tokenId, network, true)); + for (let i = 0; i < tokens.length; i++) { + await this.graphileService.addToken(collectionId, tokens[i], network, true); + } } } } diff --git a/packages/escrow/src/collections/tokens.service.ts b/packages/escrow/src/collections/tokens.service.ts index 2c04ffa..1d2d7e2 100644 --- a/packages/escrow/src/collections/tokens.service.ts +++ b/packages/escrow/src/collections/tokens.service.ts @@ -48,9 +48,8 @@ export class TokensService { if (collection) { const chain = await this.sdk.getChainProperties(); //Check token lives in the chain - try { - await this.sdk.getTokenSchema(collectionId, tokenId); - } catch (e) { + const token = await this.sdk.getTokenSchema(collectionId, tokenId); + if (token == null) { await this.cleanTokenAndProperties(collectionId, tokenId, chain.token); this.logger.error('Token not found or burned!'); return; @@ -70,9 +69,7 @@ export class TokensService { await Promise.all([address, addressTo].map((a) => this.findAllParents(a, tokenMap, chain.token))); // Add the tokenId, collectionId, network chain to the list for update - if (event.method === EventMethod.ITEM_CREATED || event.method === EventMethod.TRANSFER) { - this.addTokenToMap(tokenMap, collectionId, tokenId, chain.token); - } + this.addTokenToMap(tokenMap, collectionId, tokenId, chain.token); } else { this.addTokenToMap(tokenMap, collectionId, tokenId, chain.token); } diff --git a/packages/escrow/src/tasks/properties.task.ts b/packages/escrow/src/tasks/properties.task.ts index ab2ea8a..7b11f63 100644 --- a/packages/escrow/src/tasks/properties.task.ts +++ b/packages/escrow/src/tasks/properties.task.ts @@ -32,12 +32,11 @@ export class PropertiesTask { */ @TaskHandler() async handler(payload: Market.Payload, helpers: Helpers): Promise { - this.addSearchIndexIfNotExists(payload); + await this.addSearchIndexIfNotExists(payload); } async getTokenInfoItems({ collectionId, tokenId }: CollectionToken): Promise { - const source = await this.preparePropertiesData(tokenId, collectionId); - return source; + return this.preparePropertiesData(tokenId, collectionId); } private findNestedToken(bundle: NestedToken, tokenId: number): NestedToken | undefined { @@ -60,7 +59,7 @@ export class PropertiesTask { collection: any; isBundle: boolean; serializeBundle: Array; - }> { + }> | null { const { isBundle } = await this.sdkService.isBundle(tokenId, collectionId); let token = null; let serializeBundle = []; @@ -69,6 +68,8 @@ export class PropertiesTask { this.sdkService.getBundle(tokenId, collectionId), this.sdkService.getTokenSchema(collectionId, tokenId), ]); + if (!tokenData) return null; + token = tokenData; if (bundle.tokenId === tokenId) { @@ -85,7 +86,9 @@ export class PropertiesTask { serializeBundle = this.sdkService.serializeBunlde(token); } else { token = await this.sdkService.getTokenSchema(collectionId, tokenId); + if (!token) return null; } + const collection = await this.sdkService.getSchemaCollection(collectionId); return { token, @@ -95,7 +98,7 @@ export class PropertiesTask { }; } - async addSearchIndexIfNotExists(collectionToken: CollectionToken): Promise { + async addSearchIndexIfNotExists(collectionToken: CollectionToken): Promise { const { collectionId, tokenId, network } = collectionToken; const dbIndexList = await this.propertiesRepository.find({ @@ -115,7 +118,9 @@ export class PropertiesTask { } const searchIndexItems = await this.getTokenInfoItems(collectionToken); - return this.saveProperties(collectionToken, searchIndexItems); + if (searchIndexItems) { + await this.saveProperties(collectionToken, searchIndexItems); + } } async saveProperties(collectionToken: CollectionToken, source: SerializeTokenType): Promise { @@ -157,10 +162,13 @@ export class PropertiesTask { return this.propertiesRepository.save(propertiesDataItems); } - async preparePropertiesData(tokenId: number, collectionId: number): Promise { + async preparePropertiesData(tokenId: number, collectionId: number): Promise { const tokenData = await this.tokenWithCollection(tokenId, collectionId); + if (!tokenData) { + return null; + } - const source = new Set(); + const source: Set = new Set(); // Collection source .add({ diff --git a/packages/market/src/sdk/sdk.service.ts b/packages/market/src/sdk/sdk.service.ts index a058ba6..61daddd 100644 --- a/packages/market/src/sdk/sdk.service.ts +++ b/packages/market/src/sdk/sdk.service.ts @@ -77,7 +77,7 @@ export class SdkMarketService { return true; } } catch (err) { - this.logger.error(`verify message error: ${err.message}`, err); + this.logger.error(`verify message error: ${err.code} - ${err.message}`, err, err.details); throw new BadRequestException(err); } } diff --git a/tools/get-token/index.html b/tools/get-token/index.html new file mode 100644 index 0000000..9c14430 --- /dev/null +++ b/tools/get-token/index.html @@ -0,0 +1,40 @@ + + + + + + Get metamask token for market + + +

Get metamask token for market

+ + + +