fix(chains): drop node URLs that embed Nova's provider keys (#72)

* fix(chains): drop node URLs that embed Nova's Infura keys

Nova's configs carry Nova's own Infura project keys inside node URLs, and
every sync copied them into ours: Ethereum had four keyed Infura nodes and
Base one, across 43 published files. Our Android build already fills
`{INFURA_API_KEY}` from our own secret; the keyed URLs used another
organisation's quota and would break for every user when Nova rotates them.

- sync_from_nova.py strips nodes whose URL embeds an Infura key, and drops a
  chain left with no node (only Ethereum - Goerli, a retired testnet, in the
  dev files); merge-chains.py applies the same filter
- the published chain files are rewritten with that filter; nothing else in
  them changes (each file round-trips byte for byte through json.dump)
- check_pezkuwi_integrity.py refuses a keyed Infura URL under chains/

* fix(chains): strip every keyed provider URL, and make the gate fail closed

The first pass matched only `infura.io/.../v3/<lowercase hex>`, so it missed
`https://...infura.io/v3/<key>`, upper-case keys and hosts, and Nova's
OnFinality `?apikey=` URLs (Moonriver, and the Hades testnet in v20/v21
preConfigured). preConfigured was copied from Nova without the filter, and the
integrity check passed if grep itself failed.

- one predicate, is_keyed(), in sync_from_nova.py: Infura /v3/ ids and
  apikey/api_key/key/token query values, case-insensitive; {PLACEHOLDER}
  values are allowed
- preConfigured details are filtered after the copy; a chain left with no
  node loses its details file and its index entry (Hades, v20/v21 only)
- rewritten files keep their own indent, so the diff is the data change only
- check 5 imports is_keyed() and checks every string in every JSON file
  under chains/; an unreadable file or an empty tree is an error
- check 3 reports a grep error instead of passing on it
This commit is contained in:
SatoshiQaziMuhammed authored and GitHub committed 2026-10-17 20:55:00 +04:00
1 parent 8bd31ac686
commit 5ca2661eb2
59 files changed
+113 -1365

No files matched your search

-20
View File
@@ -1548,25 +1548,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
}
],
"explorers": [
@@ -7787,10 +7771,6 @@
{
"url": "wss://base-rpc.publicnode.com",
"name": "Base public node"
},
{
"url": "wss://base-mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Ifura node"
}
],
"explorers": [
-8
View File
@@ -1326,17 +1326,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-8
View File
@@ -1326,17 +1326,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-62
View File
@@ -1355,10 +1355,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
@@ -3332,18 +3328,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3375,52 +3359,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}",
"event": null
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-8
View File
@@ -1340,17 +1340,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-8
View File
@@ -1340,17 +1340,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-62
View File
@@ -1369,10 +1369,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
@@ -3371,18 +3367,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3414,52 +3398,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}",
"event": null
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-8
View File
@@ -1348,17 +1348,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-8
View File
@@ -1348,17 +1348,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-62
View File
@@ -1380,10 +1380,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
@@ -3387,18 +3383,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3430,52 +3414,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}",
"event": null
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-12
View File
@@ -1437,18 +1437,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-12
View File
@@ -1437,18 +1437,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-61
View File
@@ -1441,10 +1441,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
@@ -3569,18 +3565,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3611,51 +3595,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-12
View File
@@ -1512,18 +1512,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-12
View File
@@ -1512,18 +1512,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-57
View File
@@ -3822,18 +3822,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3864,51 +3852,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-12
View File
@@ -1503,18 +1503,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-12
View File
@@ -1503,18 +1503,6 @@
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-57
View File
@@ -3821,18 +3821,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3863,51 +3851,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-16
View File
@@ -1499,25 +1499,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-16
View File
@@ -1499,25 +1499,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
}
],
"explorers": [
-57
View File
@@ -3864,18 +3864,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3906,51 +3894,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-24
View File
@@ -1482,33 +1482,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-24
View File
@@ -1482,33 +1482,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-57
View File
@@ -3814,18 +3814,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3856,51 +3844,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-24
View File
@@ -1513,33 +1513,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-24
View File
@@ -1513,33 +1513,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-57
View File
@@ -3818,18 +3818,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3860,51 +3848,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-24
View File
@@ -1513,33 +1513,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-24
View File
@@ -1513,33 +1513,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-57
View File
@@ -3818,18 +3818,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3860,51 +3848,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-24
View File
@@ -1527,33 +1527,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-24
View File
@@ -1527,33 +1527,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
},
{
"url": "wss://mainnet.infura.io/ws/v3/5717b02168b5434ba23801e1ea755afb",
"name": "Infura node 7"
}
],
"explorers": [
-57
View File
@@ -3910,18 +3910,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3997,51 +3985,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-4
View File
@@ -183,10 +183,6 @@
"chainId": "65c489fb7bfaf4a27f283faf694a64a8d7ae8fc0ed970fc4ebbf25d03095e4d0",
"name": "Niskala (TESTNET)"
},
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)"
},
{
"chainId": "466edf864b4314b97f36e45ec21ddb39e0bdc52789377b91be0957d5afad2eb2",
"name": "Energy Web X Paseo (TESTNET)"
-4
View File
@@ -139,10 +139,6 @@
"chainId": "65c489fb7bfaf4a27f283faf694a64a8d7ae8fc0ed970fc4ebbf25d03095e4d0",
"name": "Niskala (TESTNET)"
},
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)"
},
{
"chainId": "466edf864b4314b97f36e45ec21ddb39e0bdc52789377b91be0957d5afad2eb2",
"name": "Energy Web X Paseo (TESTNET)"
@@ -1,19 +0,0 @@
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)",
"assets": [
{
"assetId": 0,
"symbol": "notNodl",
"precision": 11,
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/Default.svg"
}
],
"nodes": [
{
"url": "wss://node-6957502816543653888.lh.onfinality.io/ws?apikey=09b04494-3139-4b57-a5d1-e1c4c18748ce",
"name": "OnFinality"
}
],
"addressPrefix": 37
}
@@ -1,19 +0,0 @@
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)",
"assets": [
{
"assetId": 0,
"symbol": "notNodl",
"precision": 11,
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/Default.svg"
}
],
"nodes": [
{
"url": "wss://node-6957502816543653888.lh.onfinality.io/ws?apikey=09b04494-3139-4b57-a5d1-e1c4c18748ce",
"name": "OnFinality"
}
],
"addressPrefix": 37
}
-16
View File
@@ -1676,25 +1676,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
}
],
"explorers": [
-16
View File
@@ -1676,25 +1676,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
}
],
"explorers": [
-53
View File
@@ -3751,14 +3751,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3834,51 +3826,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-4
View File
@@ -187,10 +187,6 @@
"chainId": "65c489fb7bfaf4a27f283faf694a64a8d7ae8fc0ed970fc4ebbf25d03095e4d0",
"name": "Niskala (TESTNET)"
},
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)"
},
{
"chainId": "466edf864b4314b97f36e45ec21ddb39e0bdc52789377b91be0957d5afad2eb2",
"name": "Energy Web X Paseo (TESTNET)"
-4
View File
@@ -135,10 +135,6 @@
"chainId": "65c489fb7bfaf4a27f283faf694a64a8d7ae8fc0ed970fc4ebbf25d03095e4d0",
"name": "Niskala (TESTNET)"
},
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)"
},
{
"chainId": "466edf864b4314b97f36e45ec21ddb39e0bdc52789377b91be0957d5afad2eb2",
"name": "Energy Web X Paseo (TESTNET)"
@@ -1,19 +0,0 @@
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)",
"assets": [
{
"assetId": 0,
"symbol": "notNodl",
"precision": 11,
"icon": "Default.svg"
}
],
"nodes": [
{
"url": "wss://node-7273232234617282560.nv.onfinality.io/ws?apikey=b937a7d7-7395-49b9-b745-60a0342fa365",
"name": "OnFinality"
}
],
"addressPrefix": 37
}
@@ -1,19 +0,0 @@
{
"chainId": "d9d12d9139d020f658d4469fa5c02e331195227da62567d7bf9bbd1abaf77522",
"name": "Parachain Hades testnet (TESTNET)",
"assets": [
{
"assetId": 0,
"symbol": "notNodl",
"precision": 11,
"icon": "Default.svg"
}
],
"nodes": [
{
"url": "wss://node-7273232234617282560.nv.onfinality.io/ws?apikey=b937a7d7-7395-49b9-b745-60a0342fa365",
"name": "OnFinality"
}
],
"addressPrefix": 37
}
-16
View File
@@ -1626,25 +1626,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
}
],
"explorers": [
-16
View File
@@ -1626,25 +1626,9 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/32a2be59297444c9bcb2b61bb700c6fe",
"name": "Infura node 5"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 4"
},
{
"url": "wss://mainnet.infura.io/ws/v3/82fd5b2925e341719f10b7ed4376a646",
"name": "Infura node 6"
}
],
"explorers": [
-53
View File
@@ -3196,14 +3196,6 @@
"url": "https://1rpc.io/eth",
"name": "One rpc node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 2"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3279,51 +3271,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
-4
View File
@@ -1225,10 +1225,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
-4
View File
@@ -1283,10 +1283,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
-4
View File
@@ -1315,10 +1315,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
-4
View File
@@ -1329,10 +1329,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
-4
View File
@@ -1355,10 +1355,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
-8
View File
@@ -1281,17 +1281,9 @@
],
"nodeSelectionStrategy": "uniform",
"nodes": [
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-8
View File
@@ -1281,17 +1281,9 @@
],
"nodeSelectionStrategy": "uniform",
"nodes": [
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura node"
},
{
"url": "wss://mainnet.infura.io/ws/v3/9dddd77ac74043dc9a8dc48f82822c7d",
"name": "Infura node 2"
}
],
"explorers": [
-54
View File
@@ -1355,10 +1355,6 @@
}
],
"nodes": [
{
"url": "wss://moonriver.api.onfinality.io/ws?apikey=41935d3d-3d6c-4a90-a0e1-33c065401d05",
"name": "OnFinality node"
},
{
"url": "wss://moonriver.api.onfinality.io/public-ws",
"name": "OnFinality node"
@@ -3261,10 +3257,6 @@
],
"nodeSelectionStrategy": "uniform",
"nodes": [
{
"url": "wss://mainnet.infura.io/ws/v3/1e69544301064ef19edb194a14fb75f3",
"name": "Infura node 3"
},
{
"url": "wss://mainnet.infura.io/ws/v3/{INFURA_API_KEY}",
"name": "Infura test node"
@@ -3296,52 +3288,6 @@
"noSubstrateRuntime"
]
},
{
"chainId": "eip155:5",
"name": "Ethereum - Goerli",
"assets": [
{
"assetId": 0,
"symbol": "ETH",
"priceId": "ethereum",
"type": "evmNative",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/tokens/white/ETH.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://goerli.infura.io/ws/v3/25bd0a6e359240529b237e5dd8b19e1f",
"name": "Infura test node"
}
],
"explorers": [
{
"name": "Etherscan",
"extrinsic": "https://goerli.etherscan.io/tx/{hash}",
"account": "https://goerli.etherscan.io/address/{address}",
"event": null
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://api-goerli.etherscan.io/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ethereum_Goerli.svg",
"addressPrefix": 5,
"options": [
"testnet",
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
+42 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""Refuse the four regressions this repo has already had.
"""Refuse the five regressions this repo has already had.
Each check below exists because the thing it forbids happened, was fixed, and in two
cases came back. They are cheap; the failures they catch are not.
@@ -88,6 +88,8 @@ grep = subprocess.run(
capture_output=True,
text=True,
)
if grep.returncode not in (0, 1):
errors.append(f"grep for working-branch asset URLs failed: {grep.stderr.strip()}")
if grep.stdout.strip():
files = grep.stdout.strip().splitlines()
errors.append(
@@ -107,6 +109,43 @@ for fixture in ("pezkuwi_assets_for_testBalance.json",):
f"tests/{fixture} has drifted from pezkuwi-overlay/tests/{fixture}"
)
# ── 5. No third-party API key in a URL ───────────────────────────────────────
#
# Nova's configs shipped Nova's own provider keys (Infura project ids, OnFinality
# apikeys) inside node URLs, and every sync copied them into ours. Our builds fill
# {INFURA_API_KEY}-style placeholders from our own secrets; a keyed URL is someone
# else's quota and dies when they rotate it. The predicate is the one the sync
# uses, and every string in every JSON file is checked, so a file that does not
# parse is a failure, not a pass.
sys.path.insert(0, str(ROOT / "scripts"))
from sync_from_nova import is_keyed # noqa: E402
keyed_files = []
json_files = sorted(p for p in (ROOT / "chains").rglob("*.json"))
if not json_files:
errors.append("chains/ has no JSON files; the key check would have checked nothing")
for path in json_files:
try:
doc = json.loads(path.read_text(encoding="utf-8"))
except (OSError, ValueError) as exc:
errors.append(f"{path.relative_to(ROOT)} could not be read for the key check: {exc}")
continue
stack = [doc]
while stack:
node = stack.pop()
if isinstance(node, dict):
stack.extend(node.values())
elif isinstance(node, list):
stack.extend(node)
elif isinstance(node, str) and is_keyed(node):
keyed_files.append(path)
break
if keyed_files:
errors.append(
f"{len(keyed_files)} file(s) under chains/ embed a provider key in a URL; "
f"use a {{PLACEHOLDER}}, e.g. {keyed_files[0].relative_to(ROOT)}"
)
if errors:
for e in errors:
print(f"::error::{e}")
@@ -114,4 +153,5 @@ if errors:
sys.exit(1)
print("Pezkuwi integrity: on-chain assets only, sufficiency declared, "
"assets served from master, fixture in step with its source.")
"assets served from master, fixture in step with its source, "
"no third-party key in a node URL.")
+7
View File
@@ -15,8 +15,12 @@ Options:
import json
import argparse
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from sync_from_nova import strip_keyed_endpoints # noqa: E402
# Base paths
SCRIPT_DIR = Path(__file__).parent
ROOT_DIR = SCRIPT_DIR.parent
@@ -151,6 +155,9 @@ def merge_chains(nova_chains: list, pezkuwi_chains: list, filter_broken: bool =
nova_filtered.append(chain)
stats['nova_included'] += 1
nova_filtered = strip_keyed_endpoints(nova_filtered)
stats['nova_included'] = len(nova_filtered)
# Pezkuwi first, then Nova
merged = pezkuwi_chains + nova_filtered
stats['total'] = len(merged)
+64 -1
View File
@@ -19,6 +19,7 @@ Rules:
"""
import json
import re
import shutil
from pathlib import Path
@@ -51,6 +52,67 @@ def load_blacklist() -> set:
return set()
# Nova's configs carry Nova's own provider keys written into node URLs (Infura
# project ids, OnFinality apikeys). They are not ours to use: our builds fill
# placeholders like `{INFURA_API_KEY}` from our own secrets, and a keyed URL
# breaks for every user the day Nova rotates it. check_pezkuwi_integrity.py
# imports this same predicate, so the filter and the gate cannot disagree.
KEYED_ENDPOINT = re.compile(
r"infura\.io/(?:[^?#\s]*/)?v3/[0-9a-z]{32}"
r"|[?&](?:api[_-]?key|apikey|access[_-]?token|token|key)=(?!\{)[^&#\s]+",
re.IGNORECASE,
)
def is_keyed(url: str) -> bool:
"""True if the URL embeds a literal credential rather than a {PLACEHOLDER}."""
return bool(KEYED_ENDPOINT.search(url))
def strip_chain(chain: dict) -> dict | None:
"""The chain without keyed nodes; None if no node is left."""
nodes = chain.get('nodes')
if not isinstance(nodes, list):
return chain
kept = [n for n in nodes if not (isinstance(n, dict) and is_keyed(str(n.get('url', ''))))]
if not kept:
return None
return chain if len(kept) == len(nodes) else {**chain, 'nodes': kept}
def strip_keyed_endpoints(chains: list) -> list:
"""Drop nodes whose URL embeds a third-party key, and any chain left with no node."""
return [c for c in (strip_chain(c) for c in chains) if c is not None]
def rewrite_in_place(path: Path, data):
"""Rewrite a JSON file keeping its own indent and trailing newline, so a
filtered copy of Nova's file differs from it only where the data does."""
raw = path.read_text(encoding='utf-8')
second = raw.split('\n', 2)[1] if raw.count('\n') >= 1 else ''
indent = (len(second) - len(second.lstrip(' '))) or 2
out = json.dumps(data, indent=indent, ensure_ascii=False)
path.write_text(out + ('\n' if raw.endswith('\n') else ''), encoding='utf-8')
def strip_preconfigured(preconfig: Path):
"""Apply strip_chain to every details file; a chain left with no node is
removed together with its entry in the matching index."""
for details, index in (("details", "chains.json"), ("detailsDev", "chains_dev.json")):
dropped = set()
for f in sorted((preconfig / details).glob("*.json")):
chain = load_json(f)
stripped = strip_chain(chain)
if stripped is None:
dropped.add(chain.get('chainId'))
f.unlink()
elif stripped is not chain:
rewrite_in_place(f, stripped)
index_file = preconfig / index
if dropped and index_file.exists():
rewrite_in_place(index_file, [c for c in load_json(index_file) if c.get('chainId') not in dropped])
def merge_chains(nova_chains: list, pezkuwi_chains: list, blocked_ids: set) -> list:
"""Pezkuwi chains first, then Nova chains. Blocked chains excluded."""
pezkuwi_ids = {c['chainId'] for c in pezkuwi_chains}
@@ -58,7 +120,7 @@ def merge_chains(nova_chains: list, pezkuwi_chains: list, blocked_ids: set) -> l
c for c in nova_chains
if c['chainId'] not in pezkuwi_ids and c['chainId'] not in blocked_ids
]
return pezkuwi_chains + nova_filtered
return pezkuwi_chains + strip_keyed_endpoints(nova_filtered)
def merge_xcm(nova_xcm: dict, pezkuwi_xcm: dict) -> dict:
@@ -143,6 +205,7 @@ def sync_chains():
if output_preconfig.exists():
shutil.rmtree(output_preconfig)
shutil.copytree(nova_preconfig, output_preconfig)
strip_preconfigured(output_preconfig)
def sync_xcm():