From 63b0afaa9e3468be0a270bb8362283829573d816 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Tue, 15 Feb 2022 15:27:17 +0100 Subject: [PATCH 1/5] :box: added md5 packages --- package-lock.json | 70 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 ++ 2 files changed, 72 insertions(+) diff --git a/package-lock.json b/package-lock.json index e195ae6c..aa7a732e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "class-validator": "^0.13.1", "dotenv": "^16.0.0", "inflected": "^2.1.0", + "md5": "^2.3.0", "nanoid": "^3.1.30", "signale": "^1.4.0", "type-graphql": "^1.2.0-rc.1" @@ -25,6 +26,7 @@ "@subsquid/substrate-typegen": "^0.2.1", "@types/chai": "^4.3.0", "@types/inflected": "^1.1.29", + "@types/md5": "^2.3.2", "@types/mocha": "^9.0.0", "@types/pg": "^8.6.1", "chai": "^4.3.4", @@ -1823,6 +1825,12 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, + "node_modules/@types/md5": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", + "integrity": "sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==", + "dev": true + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -2811,6 +2819,14 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "engines": { + "node": "*" + } + }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -3368,6 +3384,14 @@ "semver": "bin/semver" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, "node_modules/cssfilter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", @@ -4738,6 +4762,11 @@ "node": ">=8" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -5314,6 +5343,16 @@ "node": ">= 10" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -11219,6 +11258,12 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, + "@types/md5": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz", + "integrity": "sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og==", + "dev": true + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -11987,6 +12032,11 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -12435,6 +12485,11 @@ } } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, "cssfilter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", @@ -13482,6 +13537,11 @@ "binary-extensions": "^2.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-core-module": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", @@ -13910,6 +13970,16 @@ "ssri": "^8.0.0" } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index b2d93182..0b1cd3bd 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "class-validator": "^0.13.1", "dotenv": "^16.0.0", "inflected": "^2.1.0", + "md5": "^2.3.0", "nanoid": "^3.1.30", "signale": "^1.4.0", "type-graphql": "^1.2.0-rc.1" @@ -31,6 +32,7 @@ "@subsquid/substrate-typegen": "^0.2.1", "@types/chai": "^4.3.0", "@types/inflected": "^1.1.29", + "@types/md5": "^2.3.2", "@types/mocha": "^9.0.0", "@types/pg": "^8.6.1", "chai": "^4.3.4", From 8bd6375290440d414f15904d7aa8e0438b46c601 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Tue, 15 Feb 2022 15:30:19 +0100 Subject: [PATCH 2/5] :alien: updated nftentity with md5 hashes --- schema.graphql | 1 + src/model/generated/nftEntity.model.ts | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/schema.graphql b/schema.graphql index 52477085..59363928 100644 --- a/schema.graphql +++ b/schema.graphql @@ -37,6 +37,7 @@ type NFTEntity @entity { issuer: String sn: String id: ID! + hash: String! @index metadata: String currentOwner: String price: BigInt! diff --git a/src/model/generated/nftEntity.model.ts b/src/model/generated/nftEntity.model.ts index 374e1dfd..fba1b68d 100644 --- a/src/model/generated/nftEntity.model.ts +++ b/src/model/generated/nftEntity.model.ts @@ -33,6 +33,10 @@ export class NFTEntity { @PrimaryColumn_() id!: string + @Index_() + @Column_("text", {nullable: false}) + hash!: string + @Column_("text", {nullable: true}) metadata!: string | undefined | null From 0f433463acd5a9228b6877914f4d1dc0a6b75f99 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Tue, 15 Feb 2022 15:33:09 +0100 Subject: [PATCH 3/5] :zap: nft entity saves md5 hash --- src/mappings/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mappings/index.ts b/src/mappings/index.ts index edba804e..d854d80e 100644 --- a/src/mappings/index.ts +++ b/src/mappings/index.ts @@ -39,6 +39,7 @@ import { create, get } from './utils/entity' import { fetchMetadata } from './utils/metadata' import { Store} from '@subsquid/substrate-processor' import {updateCache} from './utils/cache' +import md5 from 'md5' export async function handleRemark(context: Context): Promise { @@ -158,8 +159,9 @@ async function mintNFT( canOrElseError(exists, collection, true) isOwnerOrElseError(collection, remark.caller) const final = create(NFTEntity, collection.id, {}) - - final.id = getNftId(nft, remark.blockNumber) + const id = getNftId(nft, remark.blockNumber) + final.id = id + final.hash = md5(id) final.issuer = remark.caller final.currentOwner = remark.caller final.blockNumber = BigInt(remark.blockNumber) From 204145f20ddc75786fa9c3cab2a0ae2cd3ed436a Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 16 Feb 2022 13:41:27 +0100 Subject: [PATCH 4/5] :card_file_box: added hash to the migration --- db/migrations/1645015239078-Data.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 db/migrations/1645015239078-Data.js diff --git a/db/migrations/1645015239078-Data.js b/db/migrations/1645015239078-Data.js new file mode 100644 index 00000000..7fe04d03 --- /dev/null +++ b/db/migrations/1645015239078-Data.js @@ -0,0 +1,13 @@ +module.exports = class Data1645015239078 { + name = 'Data1645015239078' + + async up(db) { + await db.query(`ALTER TABLE "nft_entity" ADD "hash" text NOT NULL`) + await db.query(`CREATE INDEX "IDX_16e57ac8478b6ea1f383e3eb03" ON "nft_entity" ("hash") `) + } + + async down(db) { + await db.query(`ALTER TABLE "nft_entity" DROP COLUMN "hash"`) + await db.query(`DROP INDEX "public"."IDX_16e57ac8478b6ea1f383e3eb03"`) + } +} From e309883a5627a22eb0b808893835bf5beb663f07 Mon Sep 17 00:00:00 2001 From: Viki Val Date: Wed, 16 Feb 2022 13:42:14 +0100 Subject: [PATCH 5/5] :robot: updated justfile to perform migration --- justfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/justfile b/justfile index 24e5e1e1..d266744b 100644 --- a/justfile +++ b/justfile @@ -45,7 +45,7 @@ migrate: @npx sqd db:migrate update NAME: - npx sqd db:create-migration -n "{{NAME}}" + npx sqd db:create-migration "{{NAME}}" test: npm run test:unit