mirror of
				https://github.com/Instadapp/trustwallet-assets.git
				synced 2024-07-29 22:37:31 +00:00 
			
		
		
		
	Better error messages in whitelist check. (#3127)
Co-authored-by: Catenocrypt <catenocrypt@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									606d1a8e6f
								
							
						
					
					
						commit
						484c63ddeb
					
				|  | @ -1,7 +1,11 @@ | |||
| import { chainsWithBlacklist } from "../common/blockchains"; | ||||
| import { getChainAssetsList, getChainWhitelistPath, getChainBlacklistPath } from "../common/repo-structure"; | ||||
| import { readFileSync, writeFileSync } from "../common/filesystem"; | ||||
| import { arrayDiff, findCommonElementOrDuplicate } from "../common/types"; | ||||
| import { | ||||
|     arrayDiff, | ||||
|     findCommonElementOrDuplicate, | ||||
|     makeUnique | ||||
| } from "../common/types"; | ||||
| import { ActionInterface, CheckStepInterface } from "./interface"; | ||||
| import { formatSortJson, formatUniqueSortJson } from "../common/json"; | ||||
| import * as bluebird from "bluebird"; | ||||
|  | @ -20,28 +24,41 @@ async function checkUpdateWhiteBlackList(chain: string, checkOnly: boolean ): Pr | |||
| 
 | ||||
|     const commonElementsOrDuplicated = findCommonElementOrDuplicate(currentWhitelist, currentBlacklist); | ||||
|     if (commonElementsOrDuplicated && commonElementsOrDuplicated.length > 0) { | ||||
|         wrongMsg += `Blacklist and whitelist for chain ${chain} should have no common elements or duplicates, found ${commonElementsOrDuplicated.length}, ${commonElementsOrDuplicated[0]}\n`; | ||||
|         wrongMsg += `Blacklist and whitelist for chain ${chain} should have no common elements or duplicates, found ${commonElementsOrDuplicated}\n`; | ||||
|     } | ||||
|     const removedAssets = arrayDiff(currentWhitelist, assets); | ||||
|     if (removedAssets && removedAssets.length > 0) { | ||||
|         wrongMsg += `Whitelist for chain ${chain} contains non-exitent assets, found ${removedAssets.length}, ${removedAssets[0]}\n`; | ||||
|     const whitelistOrphan = arrayDiff(currentWhitelist, assets); | ||||
|     if (whitelistOrphan && whitelistOrphan.length > 0) { | ||||
|         wrongMsg += `Whitelist for chain ${chain} contains non-exitent assets, found ${whitelistOrphan.length}, ${whitelistOrphan[0]}\n`; | ||||
|     } | ||||
| 
 | ||||
|     const niceWhite = formatSortJson(assets); | ||||
|     if (niceWhite !== currentWhitelistText) { | ||||
|         wrongMsg += `Whitelist for chain ${chain} has inconsistent content of formatting\n`; | ||||
|     const newBlack = makeUnique(currentBlacklist.concat(whitelistOrphan)); | ||||
|     const newWhite = makeUnique(arrayDiff(assets, newBlack)); | ||||
|     //console.log(currentWhitelist.length, "vs.", newWhite.length);
 | ||||
|     //console.log(currentBlacklist.length, "vs.", newBlack.length);
 | ||||
| 
 | ||||
|     const wDiff1 = arrayDiff(newWhite, currentWhitelist); | ||||
|     if (wDiff1.length > 0) { | ||||
|         wrongMsg += `Some elements are missing from whitelist for chain ${chain}: ${wDiff1.length} ${wDiff1[0]}\n`; | ||||
|     } | ||||
|     const newBlackList = currentBlacklist.concat(removedAssets); | ||||
|     const niceBlack = formatUniqueSortJson(newBlackList); | ||||
|     if (niceBlack !== currentBlacklistText) { | ||||
|         wrongMsg += `Blacklist for chain ${chain} has inconsistent content of formatting\n`; | ||||
|     const wDiff2 = arrayDiff(currentWhitelist, newWhite); | ||||
|     if (wDiff2.length > 0) { | ||||
|         wrongMsg += `Some elements should be removed from whitelist for chain ${chain}: ${wDiff2.length} ${wDiff2[0]}\n`; | ||||
|     } | ||||
| 
 | ||||
|     const bDiff1 = arrayDiff(newBlack, currentBlacklist); | ||||
|     if (bDiff1.length > 0) { | ||||
|         wrongMsg += `Some elements are missing from blacklist for chain ${chain}: ${bDiff1.length} ${bDiff1[0]}\n`; | ||||
|     } | ||||
|     const bDiff2 = arrayDiff(currentBlacklist, newBlack); | ||||
|     if (bDiff2.length > 0) { | ||||
|         wrongMsg += `Some elements should be removed from blacklist for chain ${chain}: ${bDiff2.length} ${bDiff2[0]}\n`; | ||||
|     } | ||||
| 
 | ||||
|     if (wrongMsg.length > 0) { | ||||
|         if (!checkOnly) { | ||||
|             // update
 | ||||
|             writeFileSync(whitelistPath, niceWhite); | ||||
|             writeFileSync(blacklistPath, niceBlack); | ||||
|             writeFileSync(whitelistPath, formatSortJson(newWhite)); | ||||
|             writeFileSync(blacklistPath, formatSortJson(newBlack)); | ||||
|             console.log(`Updated white and blacklists for chain ${chain}`); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -46,6 +46,20 @@ export function findDuplicate(list: string[]): string { | |||
| 
 | ||||
| // Check that two lists have no common elements, and no duplicates in either.
 | ||||
| // Do a single check: checking for duplicates in the concatenated list.
 | ||||
| export function findCommonElementOrDuplicate(list1: string[], list2: string[]) { | ||||
| export function findCommonElementOrDuplicate(list1: string[], list2: string[]): string { | ||||
|     return findDuplicate(list1.concat(list2)); | ||||
| } | ||||
| 
 | ||||
| // Compare two arrays, order does not matter
 | ||||
| export function arrayEqual(a1: any[], a2: any[]): boolean { | ||||
|     if (a1.length != a2.length) { | ||||
|         return false; | ||||
|     } | ||||
|     if (!(arrayDiff(a1, a2).length == 0)) { | ||||
|         return false; | ||||
|     } | ||||
|     if (!(arrayDiff(a2, a1).length == 0)) { | ||||
|         return false; | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
|  |  | |||
|  | @ -15,7 +15,8 @@ import { | |||
|     mapList, | ||||
|     sortElements, | ||||
|     makeUnique, | ||||
|     arrayDiff | ||||
|     arrayDiff, | ||||
|     arrayEqual | ||||
| } from "../script/common/types"; | ||||
| import { findImagesToFetch } from "../script/action/binance"; | ||||
| 
 | ||||
|  | @ -75,6 +76,7 @@ describe("Test type helpers", () => { | |||
|     }); | ||||
|     test(`Test arrayDiff`, () => { | ||||
|         expect(arrayDiff(["a", "b", "c"], ["c"]), `4 elems with 1 duplicate`).toEqual(["a", "b"]); | ||||
|         expect(arrayDiff(["a", "b", "c"], ["d"]), `4 elems with 0 duplicate`).toEqual(["a", "b", "c"]); | ||||
|     }); | ||||
|     test(`Test findDuplicate`, () => { | ||||
|         expect(findDuplicate(["a", "bb", "ccc"]), `No duplicates`).toBe(null) | ||||
|  | @ -92,6 +94,12 @@ describe("Test type helpers", () => { | |||
|         expect(findCommonElementOrDuplicate(["a", "bb", "ccc", "1", "bb"], ["1", "22", "333", "22"]), `Intersection and duplicates`).toBe("22") | ||||
|         expect(findCommonElementOrDuplicate([], []), `Empty lists`).toBe(null) | ||||
|     }); | ||||
|     test(`Test arrayEqual`, () => { | ||||
|         expect(arrayEqual(["a", "b", "c"], ["a", "b", "c"]), `equal`).toBe(true); | ||||
|         expect(arrayEqual(["a", "b", "c", "d"], ["a", "b", "c"]), `length mismatch`).toBe(false); | ||||
|         expect(arrayEqual(["a", "b", "c"], ["a", "b", "b"]), `length mismatch`).toBe(false); | ||||
|         expect(arrayEqual(["a", "b", "b"], ["a", "b", "c"]), `length mismatch`).toBe(false); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| describe("Test action binance", () => { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Adam R
						Adam R