149 lines
3.8 KiB
TypeScript
149 lines
3.8 KiB
TypeScript
import { JsonRpcRequest } from "@walletconnect/jsonrpc-utils";
|
|
|
|
import {
|
|
NamespaceMetadata,
|
|
ChainMetadata,
|
|
ChainRequestRender,
|
|
convertHexToNumber,
|
|
convertHexToUtf8,
|
|
} from "../helpers";
|
|
import { BLOCKCHAIN_LOGO_BASE_URL } from "../constants";
|
|
|
|
export const EIP155Colors = {
|
|
ethereum: "99, 125, 234",
|
|
optimism: "233, 1, 1",
|
|
goerli: "189, 174, 155",
|
|
xdai: "73, 169, 166",
|
|
polygon: "130, 71, 229",
|
|
celo: "60, 203, 132",
|
|
arbitrum: "44, 55, 75",
|
|
};
|
|
|
|
export const EIP155Metadata: NamespaceMetadata = {
|
|
"1": {
|
|
name: "Ethereum",
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:1.png",
|
|
rgb: EIP155Colors.ethereum,
|
|
},
|
|
"5": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:5.png",
|
|
rgb: EIP155Colors.goerli,
|
|
},
|
|
"10": {
|
|
name: "Optimism",
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:10.png",
|
|
rgb: EIP155Colors.optimism,
|
|
},
|
|
"42": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:42.png",
|
|
rgb: EIP155Colors.ethereum,
|
|
},
|
|
"69": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:69.png",
|
|
rgb: EIP155Colors.optimism,
|
|
},
|
|
"100": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:100.png",
|
|
rgb: EIP155Colors.xdai,
|
|
},
|
|
"137": {
|
|
name: "Polygon",
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:137.png",
|
|
rgb: EIP155Colors.polygon,
|
|
},
|
|
"80001": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:80001.png",
|
|
rgb: EIP155Colors.polygon,
|
|
},
|
|
"42161": {
|
|
name: "Arbitrum",
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:42161.png",
|
|
rgb: EIP155Colors.arbitrum,
|
|
},
|
|
"42220": {
|
|
name: "Celo",
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:42220.png",
|
|
rgb: EIP155Colors.celo,
|
|
},
|
|
"44787": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:44787.png",
|
|
rgb: EIP155Colors.celo,
|
|
},
|
|
"421611": {
|
|
logo: BLOCKCHAIN_LOGO_BASE_URL + "eip155:421611.png",
|
|
rgb: EIP155Colors.arbitrum,
|
|
},
|
|
};
|
|
export function getChainMetadata(chainId: string): ChainMetadata {
|
|
const reference = chainId.split(":")[1];
|
|
const metadata = EIP155Metadata[reference];
|
|
if (typeof metadata === "undefined") {
|
|
throw new Error(`No chain metadata found for chainId: ${chainId}`);
|
|
}
|
|
return metadata;
|
|
}
|
|
|
|
export function getChainRequestRender(request: JsonRpcRequest): ChainRequestRender[] {
|
|
let params = [{ label: "Method", value: request.method }];
|
|
|
|
switch (request.method) {
|
|
case "eth_sendTransaction":
|
|
case "eth_signTransaction":
|
|
params = [
|
|
...params,
|
|
{ label: "From", value: request.params[0].from },
|
|
{ label: "To", value: request.params[0].to },
|
|
{
|
|
label: "Gas Limit",
|
|
value: request.params[0].gas
|
|
? convertHexToNumber(request.params[0].gas)
|
|
: request.params[0].gasLimit
|
|
? convertHexToNumber(request.params[0].gasLimit)
|
|
: "",
|
|
},
|
|
{
|
|
label: "Gas Price",
|
|
value: convertHexToNumber(request.params[0].gasPrice),
|
|
},
|
|
{
|
|
label: "Nonce",
|
|
value: convertHexToNumber(request.params[0].nonce),
|
|
},
|
|
{
|
|
label: "Value",
|
|
value: request.params[0].value ? convertHexToNumber(request.params[0].value) : "",
|
|
},
|
|
{ label: "Data", value: request.params[0].data },
|
|
];
|
|
break;
|
|
|
|
case "eth_sign":
|
|
params = [
|
|
...params,
|
|
{ label: "Address", value: request.params[0] },
|
|
{ label: "Message", value: request.params[1] },
|
|
];
|
|
break;
|
|
case "personal_sign":
|
|
params = [
|
|
...params,
|
|
{ label: "Address", value: request.params[1] },
|
|
{
|
|
label: "Message",
|
|
value: convertHexToUtf8(request.params[0]),
|
|
},
|
|
];
|
|
break;
|
|
default:
|
|
params = [
|
|
...params,
|
|
{
|
|
label: "params",
|
|
value: JSON.stringify(request.params, null, "\t"),
|
|
},
|
|
];
|
|
break;
|
|
}
|
|
return params;
|
|
}
|