From d2a6283b298bcc376d8359e402939a623a22bb9e Mon Sep 17 00:00:00 2001 From: Bitcollar Max <63862537+bitcollarmax@users.noreply.github.com> Date: Fri, 17 Apr 2020 20:33:50 -0700 Subject: [PATCH] Upload Bitcollar Max (#1896) * Add files via upload * Add script moving 0xX..X.png from toor to it's folder in assets assuming file ETH. Co-authored-by: Mykola --- .../logo.png | Bin 0 -> 10437 bytes package-lock.json | 15 ++++++++ package.json | 1 + script/arrange_files.ts | 33 +++++++++++++----- src/test/helpers.ts | 10 +++--- 5 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 blockchains/ethereum/assets/0xF5Bb691215fd2839Bc14Aa93335e13d839A4767f/logo.png diff --git a/blockchains/ethereum/assets/0xF5Bb691215fd2839Bc14Aa93335e13d839A4767f/logo.png b/blockchains/ethereum/assets/0xF5Bb691215fd2839Bc14Aa93335e13d839A4767f/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5b18cb069db3b0522fdb16e8013e68b263eb47a0 GIT binary patch literal 10437 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 aMqm2vnn*-eotPn8aGY7Oy<^L(ng0W-H10P5 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index e92ee71e8..fbbe93e12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3989,6 +3989,12 @@ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, + "image-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/image-extensions/-/image-extensions-1.1.0.tgz", + "integrity": "sha1-uOa/YDnfAFbjM1AqALZjejEF2JQ=", + "dev": true + }, "image-size": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.8.3.tgz", @@ -4164,6 +4170,15 @@ "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", "dev": true }, + "is-image": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-image/-/is-image-3.0.0.tgz", + "integrity": "sha512-NNPLvwKZ/hqx1Wv+ayKvVeDOylIapVKSxK/guzmB9doAk0FEdK0KqFKbnwNbuMLEPqEY4NaBhxzB4e98fVOq2Q==", + "dev": true, + "requires": { + "image-extensions": "^1.1.0" + } + }, "is-my-ip-valid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", diff --git a/package.json b/package.json index 5672ff5eb..ed1f27a31 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "ethereum-checksum-address": "0.0.5", "eztz-lib": "^0.1.2", "image-size": "^0.8.3", + "is-image": "^3.0.0", "jest": "^25.2.7", "jest-expect-message": "^1.0.2", "nested-property": "^2.0.0", diff --git a/script/arrange_files.ts b/script/arrange_files.ts index 8c548f97f..180870a97 100644 --- a/script/arrange_files.ts +++ b/script/arrange_files.ts @@ -1,4 +1,5 @@ import * as fs from "fs" +const isImage = require("is-image"); import { ethSidechains, getChainAssetPath, @@ -12,27 +13,43 @@ import { makeDirIfDoestExist, readDirSync, toChecksum, + getRootDirFilesList, + rootDirAllowedFiles, + isEthereumAddress } from "../src/test/helpers" ethSidechains.forEach(chain => { - const assetsPath = getChainAssetsPath(chain) - const chainAssets = readDirSync(assetsPath) + const chainAssetsPath = getChainAssetsPath(chain) - chainAssets.forEach(async asset => { + readDirSync(chainAssetsPath).forEach(async asset => { const assetPath = getChainAssetPath(chain, asset) const isDir = await isPathDir(assetPath) if (!isDir) { - const assetName = getFileName(asset) - const checksum = toChecksum(assetName) + const checksum = toChecksum(getFileName(asset)) if (isChecksum(checksum) && getFileExt(asset).toLocaleLowerCase() === logoExtension) { - // Moves file like /assets/0x..XX.png => /asstes/0x..XX/logo.png - await makeDirIfDoestExist(assetsPath, checksum) - const newPath = `${assetsPath}/${checksum}/${logo}` + // Moves file like blockchains//assets/0x..XX.png => blockchains//asstes/0x..XX/logo.png + await makeDirIfDoestExist(chainAssetsPath, checksum) + const newPath = `${chainAssetsPath}/${checksum}/${logo}` fs.renameSync(assetPath, newPath) } } }) }) +// Moves asset/0xXX...XX.png => assets/blockchains/assets/0xXX...XX/logo.png +getRootDirFilesList().forEach(async file => { + const fileName = getFileName(file) + if(isImage(file) && !rootDirAllowedFiles.includes(file) && isEthereumAddress(fileName)) { + console.log({file}) + const checksum = toChecksum(fileName) + const ethreumAssetsPath = getChainAssetsPath("ethereum") + await makeDirIfDoestExist(ethreumAssetsPath, checksum) + fs.renameSync(`./${file}`, `${ethreumAssetsPath}/${checksum}/${logo}`) + } +}); + + + + diff --git a/src/test/helpers.ts b/src/test/helpers.ts index 813a805dd..08eccb88f 100644 --- a/src/test/helpers.ts +++ b/src/test/helpers.ts @@ -79,6 +79,7 @@ export const getChainBlacklist = (chain: string): string[] => { } return [] } +export const getRootDirFilesList = (): string[] => readDirSync(root) export const readDirSync = (path: string): string[] => fs.readdirSync(path) export const makeDirSync = (path: string) => fs.mkdirSync(path) @@ -107,6 +108,10 @@ export const isTRC20 = (address: string) => { isUpperCase(address) == false } +export const isEthereumAddress = (address: string): boolean => { + return web3.utils.isAddress(address) +} + export const isWavesAddress = (address: string) => { return address.length == 35 && address.startsWith("3P") && @@ -258,10 +263,7 @@ export function isAssetInfoHasAllKeys(path: string): [boolean, string] { return [isKeysCorrentType, `Check keys ${requiredKeys} vs ${infoKeys}`] } -function getArraysDiff(arr1 :string[], arr2: string[]): string[] { - return arr1.filter(d => !arr2.includes(d)) -} - +export const getArraysDiff = (arr1 :string[], arr2: string[]): string[] => arr1.filter(d => !arr2.includes(d)) export const getFileSizeInKilobyte = (path: string): number => fs.statSync(path).size / 1000 export const rootDirAllowedFiles = [