This commit is contained in:
uxname committed 2024-07-30 14:45:43 +03:00
commit e5a7886b9c
7 files changed
+316

No files matched your search

+76
View File
@@ -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
@@ -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
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+71
View File
@@ -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"
}
}
}
}
+20
View File
@@ -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"
}
}
+88
View File
@@ -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
}
+45
View File
@@ -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);