From e5a7886b9c82792eddb42feef1495ec4ed10ff76 Mon Sep 17 00:00:00 2001 From: uxname Date: Tue, 30 Jul 2024 14:45:43 +0300 Subject: [PATCH] Init --- .gitignore | 76 +++++++++++++++ ...4567890abcdef1234567890abcdef12345678.json | 16 ++++ ...34567890abcdef1234567890abcdef12345678.png | Bin 0 -> 23383 bytes package-lock.json | 71 ++++++++++++++ package.json | 20 ++++ scripts/token-schema.json | 88 ++++++++++++++++++ scripts/verifier.js | 45 +++++++++ 7 files changed, 316 insertions(+) create mode 100644 .gitignore create mode 100644 data/0x1234567890abcdef1234567890abcdef12345678.json create mode 100644 data/icons/0x1234567890abcdef1234567890abcdef12345678.png create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scripts/token-schema.json create mode 100644 scripts/verifier.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f0c92ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets +.history/ +*.vsix +cmake-build-*/ +*.iws +out/ +atlassian-ide-plugin.xml +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json +pids +*.pid +*.seed +*.pid.lock +lib-cov +coverage +*.lcov +.nyc_output +.grunt +bower_components +.lock-wscript +build/Release +node_modules/ +jspm_packages/ +web_modules/ +*.tsbuildinfo +.npm +.eslintcache +.stylelintcache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ +.node_repl_history +*.tgz +.yarn-integrity +.env +.env.development.local +.env.test.local +.env.production.local +.env.local +.cache +.parcel-cache +.next +out +.nuxt +dist +.cache/ +.vuepress/dist +.temp +.docusaurus +.serverless/ +.fusebox/ +.dynamodb/ +.tern-port +.vscode-test +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* +.idea \ No newline at end of file diff --git a/data/0x1234567890abcdef1234567890abcdef12345678.json b/data/0x1234567890abcdef1234567890abcdef12345678.json new file mode 100644 index 0000000..a678422 --- /dev/null +++ b/data/0x1234567890abcdef1234567890abcdef12345678.json @@ -0,0 +1,16 @@ +{ + "name": "ExampleToken", + "ticker": "EXT", + "title": "Example Token Network", + "iconFileName": "0x1234567890abcdef1234567890abcdef12345678.png", + "infoURL": "https://example.com/info", + "contractAddress": "0x1234567890abcdef1234567890abcdef12345678", + "type": "fungible", + "decimals": 18, + "description": "This is an example token used for demonstrating the JSON schema validation.", + "website": "https://example.com", + "whitepaper": "https://example.com/whitepaper", + "initialSupply": 1000000, + "totalSupply": 5000000, + "maxSupply": 10000000 +} diff --git a/data/icons/0x1234567890abcdef1234567890abcdef12345678.png b/data/icons/0x1234567890abcdef1234567890abcdef12345678.png new file mode 100644 index 0000000000000000000000000000000000000000..875c3752e838d08372e400bb1ac314c434916ba3 GIT binary patch literal 23383 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 Q6v2kDM&_qW4V|L@2YiIFJpcdz literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..97ad226 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,71 @@ +{ + "name": "token-list", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "token-list", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f624dd7 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "token-list", + "version": "1.0.0", + "description": "Vara Network token list", + "main": "scripts/verifier.js", + "scripts": { + "start": "node scripts/verifier.js" + }, + "keywords": [ + "vara network", + "varan wallet", + "token list" + ], + "author": "uxname", + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1" + } +} diff --git a/scripts/token-schema.json b/scripts/token-schema.json new file mode 100644 index 0000000..b68cca9 --- /dev/null +++ b/scripts/token-schema.json @@ -0,0 +1,88 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Token Schema", + "description": "Schema for validating token information in a blockchain context.", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the token." + }, + "ticker": { + "type": "string", + "description": "The short name of the token." + }, + "title": { + "type": "string", + "description": "The full name of the network or token." + }, + "iconFileName": { + "type": "string", + "description": "The icon file name for the token." + }, + "infoURL": { + "type": "string", + "format": "uri", + "description": "URL for additional information about the token." + }, + "contractAddress": { + "type": "string", + "description": "The smart contract address of the token." + }, + "type": { + "type": "string", + "enum": [ + "fungible", + "nft" + ], + "description": "The type of token (fungible or NFT)." + }, + "decimals": { + "type": "integer", + "description": "The number of decimal places." + }, + "description": { + "type": "string", + "description": "A description of the token.", + "default": "" + }, + "website": { + "type": "string", + "format": "uri", + "description": "Link to the project's website.", + "default": "" + }, + "whitepaper": { + "type": "string", + "format": "uri", + "description": "Link to the project's whitepaper.", + "default": "" + }, + "initialSupply": { + "type": "number", + "description": "The initial supply of tokens.", + "default": 0 + }, + "totalSupply": { + "type": "number", + "description": "The total supply of tokens.", + "default": 0 + }, + "maxSupply": { + "type": "number", + "description": "The maximum supply of tokens.", + "default": 0 + } + }, + "required": [ + "name", + "ticker", + "title", + "iconFileName", + "infoURL", + "contractAddress", + "type", + "decimals" + ], + "additionalProperties": false +} diff --git a/scripts/verifier.js b/scripts/verifier.js new file mode 100644 index 0000000..4604e30 --- /dev/null +++ b/scripts/verifier.js @@ -0,0 +1,45 @@ +const Ajv = require('ajv'); +const addFormats = require('ajv-formats'); +const fs = require('fs'); +const path = require('path'); + +const schema = require('./token-schema.json'); + +function validateJsonFile(filePath) { + try { + const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); + const valid = validate(data); + if (valid) { + console.log(`File ${path.basename(filePath)} is valid.`); + } else { + console.log(`File ${path.basename(filePath)} is invalid:`, validate.errors); + } + } catch (error) { + console.error(`Error reading or parsing the file ${path.basename(filePath)}:`, error); + } +} + +function validateAllJsonFilesInDirectory(directoryPath) { + fs.readdir(directoryPath, (err, files) => { + if (err) { + console.error('Error reading directory:', err); + return; + } + + files.forEach(file => { + const filePath = path.join(directoryPath, file); + if (path.extname(file) === '.json') { + validateJsonFile(filePath); + } + }); + }); +} + +const ajv = new Ajv(); +addFormats(ajv); + +const validate = ajv.compile(schema); + +const dataDirectoryPath = path.resolve(process.cwd(), 'data'); + +validateAllJsonFilesInDirectory(dataDirectoryPath);