fix(dapp): removes reliance on caip-api pkg for blockchain data (#123)

See: https://walletconnect.slack.com/archives/C03RME3BS9L/p1677021657070509
This commit is contained in:
Ben Kremer 2023-02-22 18:01:39 +01:00 committed by GitHub
parent 8de8339179
commit 4bb9940a09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 183 additions and 77 deletions

View File

@ -24,7 +24,6 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"blockies-ts": "^1.0.0", "blockies-ts": "^1.0.0",
"bs58": "^5.0.0", "bs58": "^5.0.0",
"caip-api": "^2.0.0-beta.1",
"cosmos-wallet": "^1.2.0", "cosmos-wallet": "^1.2.0",
"eth-sig-util": "^2.5.3", "eth-sig-util": "^2.5.3",
"ethereumjs-util": "^7.0.6", "ethereumjs-util": "^7.0.6",

View File

@ -6,8 +6,40 @@ import {
NamespaceMetadata, NamespaceMetadata,
ChainMetadata, ChainMetadata,
ChainRequestRender, ChainRequestRender,
ChainsMap,
} from "../helpers"; } from "../helpers";
export const CosmosChainData: ChainsMap = {
"cosmoshub-4": {
name: "Cosmos Hub",
id: "cosmos:cosmoshub-4",
rpc: ["https://rpc.cosmos.network"],
slip44: 118,
testnet: false,
},
"irishub-1": {
name: "Irisnet",
id: "cosmos:irishub-1",
rpc: ["https://rpc.irisnet.org"],
slip44: 566,
testnet: false,
},
"kava-4": {
name: "Kava",
id: "cosmos:kava-4",
rpc: ["https://kava4.data.kava.io"],
slip44: 459,
testnet: false,
},
"columbus-4": {
name: "Terra",
id: "cosmos:columbus-4",
rpc: [],
slip44: 330,
testnet: false,
},
};
export const CosmosMetadata: NamespaceMetadata = { export const CosmosMetadata: NamespaceMetadata = {
"cosmoshub-4": { "cosmoshub-4": {
logo: BLOCKCHAIN_LOGO_BASE_URL + "cosmos:cosmoshub-4.png", logo: BLOCKCHAIN_LOGO_BASE_URL + "cosmos:cosmoshub-4.png",

View File

@ -6,6 +6,7 @@ import {
ChainRequestRender, ChainRequestRender,
convertHexToNumber, convertHexToNumber,
convertHexToUtf8, convertHexToUtf8,
ChainsMap,
} from "../helpers"; } from "../helpers";
import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants"; import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants";
@ -19,6 +20,100 @@ export const EIP155Colors = {
arbitrum: "44, 55, 75", arbitrum: "44, 55, 75",
}; };
export const EIP155ChainData: ChainsMap = {
"1": {
name: "Ethereum Mainnet",
id: "eip155:1",
rpc: ["https://api.mycryptoapi.com/eth"],
slip44: 60,
testnet: false,
},
"5": {
name: "Ethereum Goerli",
id: "eip155:5",
rpc: ["https://rpc.goerli.mudit.blog"],
slip44: 60,
testnet: true,
},
"10": {
name: "Optimism Mainnet",
id: "eip155:10",
rpc: ["https://mainnet.optimism.io"],
slip44: 60,
testnet: false,
},
"42": {
name: "Ethereum Kovan",
id: "eip155:42",
rpc: ["https://kovan.poa.network"],
slip44: 60,
testnet: true,
},
"69": {
name: "Optimism Kovan",
id: "eip155:69",
rpc: ["https://kovan.optimism.io"],
slip44: 60,
testnet: true,
},
"100": {
name: "xDAI",
id: "eip155:100",
rpc: ["https://dai.poa.network"],
slip44: 60,
testnet: false,
},
"137": {
name: "Polygon Mainnet",
id: "eip155:137",
rpc: ["https://rpc-mainnet.matic.network"],
slip44: 60,
testnet: false,
},
"420": {
name: "Optimism Goerli",
id: "eip155:420",
rpc: ["https://goerli.optimism.io"],
slip44: 60,
testnet: true,
},
"42161": {
name: "Arbitrum One",
id: "eip155:42161",
rpc: ["https://arb1.arbitrum.io/rpc"],
slip44: 60,
testnet: false,
},
"42220": {
name: "Celo Mainnet",
id: "eip155:42220",
rpc: ["https://forno.celo.org"],
slip44: 52752,
testnet: false,
},
"44787": {
name: "Celo Alfajores",
id: "eip155:44787",
rpc: ["https://alfajores-forno.celo-testnet.org"],
slip44: 52752,
testnet: true,
},
"80001": {
name: "Polygon Mumbai",
id: "eip155:80001",
rpc: ["https://rpc-mumbai.matic.today"],
slip44: 60,
testnet: true,
},
"421611": {
name: "Arbitrum Rinkeby",
id: "eip155:421611",
rpc: ["https://rinkeby.arbitrum.io/rpc"],
slip44: 60,
testnet: true,
},
};
export const EIP155Metadata: NamespaceMetadata = { export const EIP155Metadata: NamespaceMetadata = {
"1": { "1": {
name: "Ethereum", name: "Ethereum",

View File

@ -1,7 +1,5 @@
import { ChainsMap } from "caip-api"; import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers";
import { NamespaceMetadata, ChainMetadata } from "../helpers";
// TODO: add `elrond` namespace to `caip-api` package to avoid manual specification here.
export const ElrondChainData: ChainsMap = { export const ElrondChainData: ChainsMap = {
"1": { "1": {
id: "elrond:1", id: "elrond:1",

View File

@ -1,10 +1,10 @@
import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils";
import { ChainsMap } from "caip-api";
import { import {
NamespaceMetadata, NamespaceMetadata,
ChainMetadata, ChainMetadata,
ChainRequestRender, ChainRequestRender,
ChainsMap,
} from "../helpers"; } from "../helpers";
export const NearMetadata: NamespaceMetadata = { export const NearMetadata: NamespaceMetadata = {
@ -14,7 +14,6 @@ export const NearMetadata: NamespaceMetadata = {
}, },
}; };
// TODO: add `near` namespace to `caip-api` package to avoid manual specification here.
export const NearChainData: ChainsMap = { export const NearChainData: ChainsMap = {
testnet: { testnet: {
name: "NEAR Testnet", name: "NEAR Testnet",

View File

@ -1,10 +1,10 @@
import { ChainsMap } from "caip-api";
import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants"; import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants";
import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils"; import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils";
import { import {
NamespaceMetadata, NamespaceMetadata,
ChainMetadata, ChainMetadata,
ChainRequestRender, ChainRequestRender,
ChainsMap,
} from "../helpers"; } from "../helpers";
export const PolkadotChainData: ChainsMap = { export const PolkadotChainData: ChainsMap = {

View File

@ -1,7 +1,5 @@
import { ChainsMap } from "caip-api"; import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers";
import { NamespaceMetadata, ChainMetadata } from "../helpers";
// TODO: add `solana` namespace to `caip-api` package to avoid manual specification here.
export const SolanaChainData: ChainsMap = { export const SolanaChainData: ChainsMap = {
"4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ": { "4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ": {
id: "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ", id: "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ",

View File

@ -1,41 +1,39 @@
import { ChainsMap } from 'caip-api'; import { NamespaceMetadata, ChainMetadata, ChainsMap } from "../helpers";
import { NamespaceMetadata, ChainMetadata } from '../helpers';
// TODO: add `tron` namespace to `caip-api` package to avoid manual specification here.
export const TronChainData: ChainsMap = { export const TronChainData: ChainsMap = {
'0x2b6653dc': { "0x2b6653dc": {
id: 'tron:0x2b6653dc', id: "tron:0x2b6653dc",
name: 'Tron Mainnet', name: "Tron Mainnet",
rpc: [], rpc: [],
slip44: 195, slip44: 195,
testnet: false testnet: false,
}, },
'0xcd8690dc': { "0xcd8690dc": {
id: 'tron:0xcd8690dc', id: "tron:0xcd8690dc",
name: 'Tron Testnet', name: "Tron Testnet",
rpc: [], rpc: [],
slip44: 195, slip44: 195,
testnet: true testnet: true,
} },
}; };
export const TronMetadata: NamespaceMetadata = { export const TronMetadata: NamespaceMetadata = {
// Tron Mainnet // Tron Mainnet
'0x2b6653dc': { "0x2b6653dc": {
logo: 'https://tronscan.io/static/media/TRON.4a760cebd163969b2ee874abf2415e9a.svg', logo: "https://tronscan.io/static/media/TRON.4a760cebd163969b2ee874abf2415e9a.svg",
rgb: '183, 62, 49', rgb: "183, 62, 49",
}, },
// Tron TestNet // Tron TestNet
'0xcd8690dc': { "0xcd8690dc": {
logo: 'https://tronscan.io/static/media/TRON.4a760cebd163969b2ee874abf2415e9a.svg', logo: "https://tronscan.io/static/media/TRON.4a760cebd163969b2ee874abf2415e9a.svg",
rgb: '183, 62, 49', rgb: "183, 62, 49",
} },
}; };
export function getChainMetadata(chainId: string): ChainMetadata { export function getChainMetadata(chainId: string): ChainMetadata {
const reference = chainId.split(':')[1]; const reference = chainId.split(":")[1];
const metadata = TronMetadata[reference]; const metadata = TronMetadata[reference];
if (typeof metadata === 'undefined') { if (typeof metadata === "undefined") {
throw new Error(`No chain metadata found for chainId: ${chainId}`); throw new Error(`No chain metadata found for chainId: ${chainId}`);
} }
return metadata; return metadata;

View File

@ -1,6 +1,5 @@
import React, { PropsWithChildren, FC } from "react"; import React, { PropsWithChildren, FC } from "react";
import styled from "styled-components"; import styled from "styled-components";
import { ChainData } from "caip-api";
import Asset from "./Asset"; import Asset from "./Asset";
import Button from "./Button"; import Button from "./Button";
@ -14,6 +13,7 @@ import {
AccountBalances, AccountBalances,
ChainMetadata, ChainMetadata,
ChainNamespaces, ChainNamespaces,
ChainData,
} from "../helpers"; } from "../helpers";
import { fonts } from "../styles"; import { fonts } from "../styles";

View File

@ -1,4 +1,3 @@
import { apiGetChainNamespace, ChainsMap } from "caip-api";
import { import {
createContext, createContext,
ReactNode, ReactNode,
@ -9,10 +8,12 @@ import {
import { SolanaChainData } from "../chains/solana"; import { SolanaChainData } from "../chains/solana";
import { PolkadotChainData } from "../chains/polkadot"; import { PolkadotChainData } from "../chains/polkadot";
import { ElrondChainData } from "../chains/elrond"; import { ElrondChainData } from "../chains/elrond";
import { TronChainData } from '../chains/tron'; import { TronChainData } from "../chains/tron";
import { ChainNamespaces, getAllChainNamespaces } from "../helpers"; import { ChainNamespaces, ChainsMap, getAllChainNamespaces } from "../helpers";
import { NearChainData } from "../chains/near"; import { NearChainData } from "../chains/near";
import { CosmosChainData } from "../chains/cosmos";
import { EIP155ChainData } from "../chains/eip155";
/** /**
* Types * Types
@ -42,23 +43,32 @@ export function ChainDataContextProvider({
await Promise.all( await Promise.all(
namespaces.map(async (namespace) => { namespaces.map(async (namespace) => {
let chains: ChainsMap | undefined; let chains: ChainsMap | undefined;
try { switch (namespace) {
if (namespace === "solana") { case "solana":
chains = SolanaChainData; chains = SolanaChainData;
} else if (namespace === "polkadot") { break;
case "polkadot":
chains = PolkadotChainData; chains = PolkadotChainData;
} else if (namespace === "near") { break;
case "near":
chains = NearChainData; chains = NearChainData;
} else if (namespace === "elrond") { break;
case "elrond":
chains = ElrondChainData; chains = ElrondChainData;
} else if (namespace === 'tron') { break;
case "tron":
chains = TronChainData; chains = TronChainData;
} else { break;
chains = await apiGetChainNamespace(namespace); case "cosmos":
} chains = CosmosChainData;
} catch (e) { break;
// ignore error case "eip155":
chains = EIP155ChainData;
break;
default:
console.error("Unknown chain namespace: ", namespace);
} }
if (typeof chains !== "undefined") { if (typeof chains !== "undefined") {
chainData[namespace] = chains; chainData[namespace] = chains;
} }

View File

@ -1,5 +1,3 @@
import { ChainsMap } from "caip-api";
export interface AssetData { export interface AssetData {
symbol: string; symbol: string;
name: string; name: string;
@ -9,13 +7,13 @@ export interface AssetData {
export interface ChainData { export interface ChainData {
name: string; name: string;
short_name: string; id: string;
chain: string; rpc: string[];
network: string; slip44: number;
chain_id: number; testnet: boolean;
network_id: number; }
rpc_url: string; export interface ChainsMap {
native_currency: AssetData; [reference: string]: ChainData;
} }
export interface TxData { export interface TxData {
from: string; from: string;

View File

@ -2008,13 +2008,6 @@
"@jridgewell/resolve-uri" "3.1.0" "@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14" "@jridgewell/sourcemap-codec" "1.4.14"
"@json-rpc-tools/types@^2.0.0-beta.0":
version "2.0.0-beta.12"
resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-2.0.0-beta.12.tgz#358f77c48a844a3f55169c2db3b35c6af1cf4e8b"
integrity sha512-UM8w0RnD4DjYql/HlThe051ivW2Q8ulWarr7ux5Aas1UsOmcGQEg4slQo46p+BXgh1Nth7SHWS2tVnW/UUnCwQ==
dependencies:
keyvaluestorage-interface "^1.0.0"
"@lit-labs/ssr-dom-shim@^1.0.0": "@lit-labs/ssr-dom-shim@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.0.0.tgz#427e19a2765681fd83411cd72c55ba80a01e0523" resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.0.0.tgz#427e19a2765681fd83411cd72c55ba80a01e0523"
@ -4907,20 +4900,6 @@ cache-base@^1.0.1:
union-value "^1.0.0" union-value "^1.0.0"
unset-value "^1.0.0" unset-value "^1.0.0"
caip-api@^2.0.0-beta.1:
version "2.0.0-beta.1"
resolved "https://registry.yarnpkg.com/caip-api/-/caip-api-2.0.0-beta.1.tgz#23877b880396f855fc2cd7892d02c597f2d62ba7"
integrity sha512-pwVXYfAIV3V0QhsKfvamIvsnn7lSmrotukmbXndOE2EsA0dos5W8MLadlpG2U+VSDghCVWI6cY9oJbBuXWj2gg==
dependencies:
"@json-rpc-tools/types" "^2.0.0-beta.0"
axios "^0.21.1"
caip "^0.9.2"
caip@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/caip/-/caip-0.9.2.tgz#6aec668e459dc3a1830530f7bb8d06f0044a5391"
integrity sha512-o4aIUSR9lkn7B9lIw8Xgkj+hDh+S1PtsBphoSqP2Dt95gRWPniaqEpnPwiUEhaPQr84JzWIEm4Cck3lMZtIkTA==
call-bind@^1.0.0, call-bind@^1.0.2: call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"