@b3dotfun/sdk 0.0.82-alpha.2 → 0.0.82-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,6 @@ const formatAddress_1 = require("../../../../shared/utils/formatAddress");
10
10
  const thirdweb_1 = require("../../../../shared/utils/thirdweb");
11
11
  const lucide_react_1 = require("lucide-react");
12
12
  const react_2 = require("thirdweb/react");
13
- const wagmi_1 = require("wagmi");
14
13
  const useConnectedWalletDisplay_1 = require("../../hooks/useConnectedWalletDisplay");
15
14
  var CryptoPaymentMethodType;
16
15
  (function (CryptoPaymentMethodType) {
@@ -20,18 +19,20 @@ var CryptoPaymentMethodType;
20
19
  CryptoPaymentMethodType["TRANSFER_CRYPTO"] = "transfer_crypto";
21
20
  })(CryptoPaymentMethodType || (exports.CryptoPaymentMethodType = CryptoPaymentMethodType = {}));
22
21
  function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, }) {
23
- const { connectedEOAWallet: connectedEOAWallet, connectedSmartWallet: connectedSmartWallet } = (0, react_1.useAccountWallet)();
24
- const { connector, address } = (0, wagmi_1.useAccount)();
25
- const { disconnect } = (0, wagmi_1.useDisconnect)();
22
+ const { connectedEOAWallet, connectedSmartWallet } = (0, react_1.useAccountWallet)();
23
+ const { disconnect } = (0, react_2.useDisconnect)();
26
24
  const { connect: openConnectModal } = (0, react_2.useConnectModal)();
27
- const setActiveWallet = (0, react_2.useSetActiveWallet)();
28
25
  const { data: eoaWalletInfo } = (0, react_2.useWalletInfo)(connectedEOAWallet?.id);
29
26
  const globalAddress = connectedSmartWallet?.getAccount()?.address;
30
27
  // Use custom hook to determine wallet display logic
31
- const { shouldShowConnectedEOA, shouldShowWagmiWallet } = (0, useConnectedWalletDisplay_1.useConnectedWalletDisplay)(selectedPaymentMethod);
28
+ const { shouldShowConnectedEOA } = (0, useConnectedWalletDisplay_1.useConnectedWalletDisplay)(selectedPaymentMethod);
32
29
  // Handle wallet connection using thirdweb modal
33
30
  const handleConnectWallet = async () => {
34
31
  try {
32
+ // Disconnect current wallet before connecting a new one
33
+ if (connectedEOAWallet) {
34
+ await disconnect(connectedEOAWallet);
35
+ }
35
36
  const wallet = await openConnectModal({ client: thirdweb_1.client, setActive: false });
36
37
  if (wallet) {
37
38
  // setActiveWallet(wallet);
@@ -59,31 +60,17 @@ function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod,
59
60
  react_1.toast.success("Multiple test 1");
60
61
  setTimeout(() => react_1.toast.info("Multiple test 2"), 200);
61
62
  setTimeout(() => react_1.toast.warning("Multiple test 3"), 400);
62
- }, className: "rounded bg-purple-600 px-2 py-1 text-xs font-medium text-white hover:bg-purple-700", children: "Multiple" })] })] })), (0, jsx_runtime_1.jsxs)("div", { className: "crypto-payment-methods flex flex-col gap-4", children: [(shouldShowConnectedEOA || shouldShowWagmiWallet || globalAddress) && ((0, jsx_runtime_1.jsxs)("div", { className: "installed-wallets", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Connected wallets" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [shouldShowConnectedEOA && ((0, jsx_runtime_1.jsx)("button", { onClick: () => {
63
+ }, className: "rounded bg-purple-600 px-2 py-1 text-xs font-medium text-white hover:bg-purple-700", children: "Multiple" })] })] })), (0, jsx_runtime_1.jsxs)("div", { className: "crypto-payment-methods flex flex-col gap-4", children: [(shouldShowConnectedEOA || globalAddress) && ((0, jsx_runtime_1.jsxs)("div", { className: "installed-wallets", children: [(0, jsx_runtime_1.jsx)("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Connected wallets" }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-2", children: [shouldShowConnectedEOA && ((0, jsx_runtime_1.jsx)("button", { onClick: () => {
63
64
  setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
64
65
  onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
65
- if (connectedEOAWallet) {
66
- setActiveWallet(connectedEOAWallet);
67
- }
68
- react_1.toast.success(`Selected ${eoaWalletInfo?.name || connector?.name || "wallet"}`);
66
+ react_1.toast.success(`Selected ${eoaWalletInfo?.name || "wallet"}`);
69
67
  }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet eoa-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
70
68
  ? "connected-wallet border-as-brand bg-as-brand/5"
71
- : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "h-5 w-5 text-blue-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-primary font-semibold", children: eoaWalletInfo?.name || connector?.name || "Connected Wallet" }), (0, jsx_runtime_1.jsx)("span", { className: "text-as-primary/60 text-sm", children: (0, formatAddress_1.shortenAddress)(connectedEOAWallet?.getAccount()?.address || "") })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && ((0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" })), (0, jsx_runtime_1.jsx)("button", { onClick: e => {
69
+ : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "h-5 w-5 text-blue-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-primary font-semibold", children: eoaWalletInfo?.name || "Connected Wallet" }), (0, jsx_runtime_1.jsx)("span", { className: "text-as-primary/60 text-sm", children: (0, formatAddress_1.shortenAddress)(connectedEOAWallet?.getAccount()?.address || "") })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && ((0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" })), (0, jsx_runtime_1.jsx)("button", { onClick: e => {
72
70
  e.stopPropagation();
73
- disconnect();
74
- react_1.toast.success("Wallet disconnected");
75
- if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
76
- setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
71
+ if (connectedEOAWallet) {
72
+ disconnect(connectedEOAWallet);
77
73
  }
78
- }, className: "text-as-primary/60 hover:text-as-primary/80 rounded-lg p-1.5 transition-colors", children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }) })] })] }) })), shouldShowWagmiWallet && ((0, jsx_runtime_1.jsx)("button", { onClick: () => {
79
- setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
80
- onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
81
- react_1.toast.success(`Selected ${connector?.name || "wallet"}`);
82
- }, className: (0, cn_1.cn)("crypto-payment-method-connect-wallet wagmi-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
83
- ? "connected-wallet border-as-brand bg-as-brand/5"
84
- : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center justify-between", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3", children: [(0, jsx_runtime_1.jsx)("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Wallet, { className: "h-5 w-5 text-blue-600" }) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col", children: [(0, jsx_runtime_1.jsx)("span", { className: "text-as-primary font-semibold", children: connector?.name || "Connected Wallet" }), (0, jsx_runtime_1.jsx)("span", { className: "text-as-primary/60 text-sm", children: (0, formatAddress_1.shortenAddress)(address || "") })] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && ((0, jsx_runtime_1.jsx)("div", { className: "h-2 w-2 rounded-full bg-green-500" })), (0, jsx_runtime_1.jsx)("button", { onClick: e => {
85
- e.stopPropagation();
86
- disconnect();
87
74
  react_1.toast.success("Wallet disconnected");
88
75
  if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
89
76
  setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
@@ -1,6 +1,44 @@
1
1
  import { components } from "../../anyspend/types/api";
2
2
  import { Account, Chain, PublicClient, Transport, WalletClient } from "viem";
3
3
  import { ChainType, IBaseChain, IEVMChain, ISolanaChain } from "../types/chain";
4
+ export declare const hyperEVM: {
5
+ blockExplorers: {
6
+ readonly default: {
7
+ readonly name: "HyperEVM Explorer";
8
+ readonly url: "https://hyperevmscan.io/";
9
+ };
10
+ };
11
+ blockTime?: number | undefined | undefined;
12
+ contracts?: {
13
+ [x: string]: import("viem").ChainContract | {
14
+ [sourceId: number]: import("viem").ChainContract | undefined;
15
+ } | undefined;
16
+ ensRegistry?: import("viem").ChainContract | undefined;
17
+ ensUniversalResolver?: import("viem").ChainContract | undefined;
18
+ multicall3?: import("viem").ChainContract | undefined;
19
+ erc6492Verifier?: import("viem").ChainContract | undefined;
20
+ } | undefined;
21
+ ensTlds?: readonly string[] | undefined;
22
+ id: 999;
23
+ name: "HyperEVM";
24
+ nativeCurrency: {
25
+ readonly name: "HyperEVM";
26
+ readonly symbol: "HYPE";
27
+ readonly decimals: 18;
28
+ };
29
+ experimental_preconfirmationTime?: number | undefined | undefined;
30
+ rpcUrls: {
31
+ readonly default: {
32
+ readonly http: readonly ["https://rpc.hyperliquid.xyz/evm"];
33
+ };
34
+ };
35
+ sourceId?: number | undefined | undefined;
36
+ testnet?: boolean | undefined | undefined;
37
+ custom?: Record<string, unknown> | undefined;
38
+ fees?: import("viem").ChainFees<undefined> | undefined;
39
+ formatters?: undefined;
40
+ serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
41
+ };
4
42
  export declare const EVM_MAINNET: Record<number, IEVMChain>;
5
43
  export declare const EVM_TESTNET: Record<number, IEVMChain>;
6
44
  export declare const SOLANA_MAINNET: ISolanaChain;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ALL_CHAINS = exports.SOLANA_CHAINS = exports.EVM_CHAINS = exports.SOLANA_MAINNET = exports.EVM_TESTNET = exports.EVM_MAINNET = void 0;
6
+ exports.ALL_CHAINS = exports.SOLANA_CHAINS = exports.EVM_CHAINS = exports.SOLANA_MAINNET = exports.EVM_TESTNET = exports.EVM_MAINNET = exports.hyperEVM = void 0;
7
7
  exports.getSolanaChains = getSolanaChains;
8
8
  exports.getAllEvmChains = getAllEvmChains;
9
9
  exports.getChainType = getChainType;
@@ -31,6 +31,13 @@ const token_1 = require("./token");
31
31
  function getCustomEvmChain(chain, rpcUrl) {
32
32
  return (0, viem_1.defineChain)({ ...chain, rpcUrls: { default: { http: [rpcUrl] } } });
33
33
  }
34
+ exports.hyperEVM = (0, viem_1.defineChain)({
35
+ id: token_1.HYPEREVM_CHAIN_ID,
36
+ name: "HyperEVM",
37
+ nativeCurrency: { name: "HyperEVM", symbol: "HYPE", decimals: 18 },
38
+ rpcUrls: { default: { http: ["https://rpc.hyperliquid.xyz/evm"] } },
39
+ blockExplorers: { default: { name: "HyperEVM Explorer", url: "https://hyperevmscan.io/" } },
40
+ });
34
41
  // export const b4testnet = defineChain({
35
42
  // id: 19934,
36
43
  // name: "B4 Testnet",
@@ -174,6 +181,20 @@ exports.EVM_MAINNET = {
174
181
  coingeckoName: "abstract",
175
182
  wethAddress: "0x3439153eb7af838ad19d56e1571fbd09333c2809",
176
183
  },
184
+ [exports.hyperEVM.id]: {
185
+ id: exports.hyperEVM.id,
186
+ name: exports.hyperEVM.name,
187
+ logoUrl: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
188
+ type: chain_1.ChainType.EVM,
189
+ nativeRequired: (0, viem_1.parseEther)("0.01"),
190
+ canDepositNative: true,
191
+ defaultToken: (0, token_1.getHyperEVMNativeToken)(),
192
+ nativeToken: (0, token_1.getHyperEVMNativeToken)(),
193
+ viem: exports.hyperEVM,
194
+ pollingInterval: 1000, // 1 second for Hyperliquid
195
+ coingeckoName: "hyperevm",
196
+ wethAddress: "0x5555555555555555555555555555555555555555",
197
+ },
177
198
  };
178
199
  exports.EVM_TESTNET = {
179
200
  // [sepolia.id]: {
@@ -1,7 +1,10 @@
1
1
  import { components } from "../../anyspend/types/api";
2
+ export declare const HYPERLIQUID_CHAIN_ID = 1337;
3
+ export declare const HYPEREVM_CHAIN_ID = 999;
2
4
  export declare function isNativeToken(address: string): boolean;
3
5
  export declare function getSolanaToken(): components["schemas"]["Token"];
4
6
  export declare function getEthToken(chainId: number): components["schemas"]["Token"];
5
7
  export declare function getPolToken(): components["schemas"]["Token"];
6
8
  export declare function getBnbToken(): components["schemas"]["Token"];
7
9
  export declare function getAvaxToken(): components["schemas"]["Token"];
10
+ export declare function getHyperEVMNativeToken(): components["schemas"]["Token"];
@@ -1,13 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HYPEREVM_CHAIN_ID = exports.HYPERLIQUID_CHAIN_ID = void 0;
3
4
  exports.isNativeToken = isNativeToken;
4
5
  exports.getSolanaToken = getSolanaToken;
5
6
  exports.getEthToken = getEthToken;
6
7
  exports.getPolToken = getPolToken;
7
8
  exports.getBnbToken = getBnbToken;
8
9
  exports.getAvaxToken = getAvaxToken;
9
- const chains_1 = require("viem/chains");
10
+ exports.getHyperEVMNativeToken = getHyperEVMNativeToken;
10
11
  const constants_1 = require("../../anyspend/constants");
12
+ const chains_1 = require("viem/chains");
13
+ exports.HYPERLIQUID_CHAIN_ID = 1337;
14
+ exports.HYPEREVM_CHAIN_ID = 999;
11
15
  function isNativeToken(address) {
12
16
  return address.toLowerCase() === constants_1.RELAY_ETH_ADDRESS || address.toLowerCase() === constants_1.RELAY_SOL_ADDRESS;
13
17
  }
@@ -71,3 +75,15 @@ function getAvaxToken() {
71
75
  },
72
76
  };
73
77
  }
78
+ function getHyperEVMNativeToken() {
79
+ return {
80
+ chainId: exports.HYPEREVM_CHAIN_ID,
81
+ address: constants_1.RELAY_ETH_ADDRESS,
82
+ symbol: "HYPE",
83
+ name: "HYPE",
84
+ decimals: 18,
85
+ metadata: {
86
+ logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
87
+ },
88
+ };
89
+ }
@@ -5,8 +5,7 @@ import { cn } from "../../../../shared/utils/cn.js";
5
5
  import { shortenAddress } from "../../../../shared/utils/formatAddress.js";
6
6
  import { client } from "../../../../shared/utils/thirdweb.js";
7
7
  import { ChevronLeft, ChevronRightCircle, Wallet, X, ZapIcon } from "lucide-react";
8
- import { useConnectModal, useSetActiveWallet, useWalletInfo } from "thirdweb/react";
9
- import { useAccount, useDisconnect } from "wagmi";
8
+ import { useConnectModal, useDisconnect, useWalletInfo } from "thirdweb/react";
10
9
  import { useConnectedWalletDisplay } from "../../hooks/useConnectedWalletDisplay.js";
11
10
  export var CryptoPaymentMethodType;
12
11
  (function (CryptoPaymentMethodType) {
@@ -16,18 +15,20 @@ export var CryptoPaymentMethodType;
16
15
  CryptoPaymentMethodType["TRANSFER_CRYPTO"] = "transfer_crypto";
17
16
  })(CryptoPaymentMethodType || (CryptoPaymentMethodType = {}));
18
17
  export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentMethod, isCreatingOrder, onBack, onSelectPaymentMethod, }) {
19
- const { connectedEOAWallet: connectedEOAWallet, connectedSmartWallet: connectedSmartWallet } = useAccountWallet();
20
- const { connector, address } = useAccount();
18
+ const { connectedEOAWallet, connectedSmartWallet } = useAccountWallet();
21
19
  const { disconnect } = useDisconnect();
22
20
  const { connect: openConnectModal } = useConnectModal();
23
- const setActiveWallet = useSetActiveWallet();
24
21
  const { data: eoaWalletInfo } = useWalletInfo(connectedEOAWallet?.id);
25
22
  const globalAddress = connectedSmartWallet?.getAccount()?.address;
26
23
  // Use custom hook to determine wallet display logic
27
- const { shouldShowConnectedEOA, shouldShowWagmiWallet } = useConnectedWalletDisplay(selectedPaymentMethod);
24
+ const { shouldShowConnectedEOA } = useConnectedWalletDisplay(selectedPaymentMethod);
28
25
  // Handle wallet connection using thirdweb modal
29
26
  const handleConnectWallet = async () => {
30
27
  try {
28
+ // Disconnect current wallet before connecting a new one
29
+ if (connectedEOAWallet) {
30
+ await disconnect(connectedEOAWallet);
31
+ }
31
32
  const wallet = await openConnectModal({ client, setActive: false });
32
33
  if (wallet) {
33
34
  // setActiveWallet(wallet);
@@ -55,31 +56,17 @@ export function CryptoPaymentMethod({ selectedPaymentMethod, setSelectedPaymentM
55
56
  toast.success("Multiple test 1");
56
57
  setTimeout(() => toast.info("Multiple test 2"), 200);
57
58
  setTimeout(() => toast.warning("Multiple test 3"), 400);
58
- }, className: "rounded bg-purple-600 px-2 py-1 text-xs font-medium text-white hover:bg-purple-700", children: "Multiple" })] })] })), _jsxs("div", { className: "crypto-payment-methods flex flex-col gap-4", children: [(shouldShowConnectedEOA || shouldShowWagmiWallet || globalAddress) && (_jsxs("div", { className: "installed-wallets", children: [_jsx("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Connected wallets" }), _jsxs("div", { className: "space-y-2", children: [shouldShowConnectedEOA && (_jsx("button", { onClick: () => {
59
+ }, className: "rounded bg-purple-600 px-2 py-1 text-xs font-medium text-white hover:bg-purple-700", children: "Multiple" })] })] })), _jsxs("div", { className: "crypto-payment-methods flex flex-col gap-4", children: [(shouldShowConnectedEOA || globalAddress) && (_jsxs("div", { className: "installed-wallets", children: [_jsx("h3", { className: "text-as-primary/80 mb-3 text-sm font-medium", children: "Connected wallets" }), _jsxs("div", { className: "space-y-2", children: [shouldShowConnectedEOA && (_jsx("button", { onClick: () => {
59
60
  setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
60
61
  onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
61
- if (connectedEOAWallet) {
62
- setActiveWallet(connectedEOAWallet);
63
- }
64
- toast.success(`Selected ${eoaWalletInfo?.name || connector?.name || "wallet"}`);
62
+ toast.success(`Selected ${eoaWalletInfo?.name || "wallet"}`);
65
63
  }, className: cn("crypto-payment-method-connect-wallet eoa-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
66
64
  ? "connected-wallet border-as-brand bg-as-brand/5"
67
- : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-5 w-5 text-blue-600" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: eoaWalletInfo?.name || connector?.name || "Connected Wallet" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(connectedEOAWallet?.getAccount()?.address || "") })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && (_jsx("div", { className: "h-2 w-2 rounded-full bg-green-500" })), _jsx("button", { onClick: e => {
65
+ : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-5 w-5 text-blue-600" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: eoaWalletInfo?.name || "Connected Wallet" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(connectedEOAWallet?.getAccount()?.address || "") })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && (_jsx("div", { className: "h-2 w-2 rounded-full bg-green-500" })), _jsx("button", { onClick: e => {
68
66
  e.stopPropagation();
69
- disconnect();
70
- toast.success("Wallet disconnected");
71
- if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
72
- setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
67
+ if (connectedEOAWallet) {
68
+ disconnect(connectedEOAWallet);
73
69
  }
74
- }, className: "text-as-primary/60 hover:text-as-primary/80 rounded-lg p-1.5 transition-colors", children: _jsx(X, { className: "h-4 w-4" }) })] })] }) })), shouldShowWagmiWallet && (_jsx("button", { onClick: () => {
75
- setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
76
- onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
77
- toast.success(`Selected ${connector?.name || "wallet"}`);
78
- }, className: cn("crypto-payment-method-connect-wallet wagmi-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md", selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
79
- ? "connected-wallet border-as-brand bg-as-brand/5"
80
- : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80"), children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100", children: _jsx(Wallet, { className: "h-5 w-5 text-blue-600" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-as-primary font-semibold", children: connector?.name || "Connected Wallet" }), _jsx("span", { className: "text-as-primary/60 text-sm", children: shortenAddress(address || "") })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && (_jsx("div", { className: "h-2 w-2 rounded-full bg-green-500" })), _jsx("button", { onClick: e => {
81
- e.stopPropagation();
82
- disconnect();
83
70
  toast.success("Wallet disconnected");
84
71
  if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
85
72
  setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
@@ -1,6 +1,44 @@
1
1
  import { components } from "../../anyspend/types/api";
2
2
  import { Account, Chain, PublicClient, Transport, WalletClient } from "viem";
3
3
  import { ChainType, IBaseChain, IEVMChain, ISolanaChain } from "../types/chain";
4
+ export declare const hyperEVM: {
5
+ blockExplorers: {
6
+ readonly default: {
7
+ readonly name: "HyperEVM Explorer";
8
+ readonly url: "https://hyperevmscan.io/";
9
+ };
10
+ };
11
+ blockTime?: number | undefined | undefined;
12
+ contracts?: {
13
+ [x: string]: import("viem").ChainContract | {
14
+ [sourceId: number]: import("viem").ChainContract | undefined;
15
+ } | undefined;
16
+ ensRegistry?: import("viem").ChainContract | undefined;
17
+ ensUniversalResolver?: import("viem").ChainContract | undefined;
18
+ multicall3?: import("viem").ChainContract | undefined;
19
+ erc6492Verifier?: import("viem").ChainContract | undefined;
20
+ } | undefined;
21
+ ensTlds?: readonly string[] | undefined;
22
+ id: 999;
23
+ name: "HyperEVM";
24
+ nativeCurrency: {
25
+ readonly name: "HyperEVM";
26
+ readonly symbol: "HYPE";
27
+ readonly decimals: 18;
28
+ };
29
+ experimental_preconfirmationTime?: number | undefined | undefined;
30
+ rpcUrls: {
31
+ readonly default: {
32
+ readonly http: readonly ["https://rpc.hyperliquid.xyz/evm"];
33
+ };
34
+ };
35
+ sourceId?: number | undefined | undefined;
36
+ testnet?: boolean | undefined | undefined;
37
+ custom?: Record<string, unknown> | undefined;
38
+ fees?: import("viem").ChainFees<undefined> | undefined;
39
+ formatters?: undefined;
40
+ serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
41
+ };
4
42
  export declare const EVM_MAINNET: Record<number, IEVMChain>;
5
43
  export declare const EVM_TESTNET: Record<number, IEVMChain>;
6
44
  export declare const SOLANA_MAINNET: ISolanaChain;
@@ -3,10 +3,17 @@ import invariant from "invariant";
3
3
  import { createPublicClient, createWalletClient, defineChain, http, parseEther, } from "viem";
4
4
  import { abstract, arbitrum, avalanche, b3, base, bsc, mainnet, optimism, polygon } from "viem/chains";
5
5
  import { ChainType } from "../types/chain.js";
6
- import { getAvaxToken, getBnbToken, getEthToken, getPolToken, getSolanaToken } from "./token.js";
6
+ import { getAvaxToken, getBnbToken, getEthToken, getHyperEVMNativeToken, getPolToken, getSolanaToken, HYPEREVM_CHAIN_ID, } from "./token.js";
7
7
  function getCustomEvmChain(chain, rpcUrl) {
8
8
  return defineChain({ ...chain, rpcUrls: { default: { http: [rpcUrl] } } });
9
9
  }
10
+ export const hyperEVM = defineChain({
11
+ id: HYPEREVM_CHAIN_ID,
12
+ name: "HyperEVM",
13
+ nativeCurrency: { name: "HyperEVM", symbol: "HYPE", decimals: 18 },
14
+ rpcUrls: { default: { http: ["https://rpc.hyperliquid.xyz/evm"] } },
15
+ blockExplorers: { default: { name: "HyperEVM Explorer", url: "https://hyperevmscan.io/" } },
16
+ });
10
17
  // export const b4testnet = defineChain({
11
18
  // id: 19934,
12
19
  // name: "B4 Testnet",
@@ -150,6 +157,20 @@ export const EVM_MAINNET = {
150
157
  coingeckoName: "abstract",
151
158
  wethAddress: "0x3439153eb7af838ad19d56e1571fbd09333c2809",
152
159
  },
160
+ [hyperEVM.id]: {
161
+ id: hyperEVM.id,
162
+ name: hyperEVM.name,
163
+ logoUrl: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
164
+ type: ChainType.EVM,
165
+ nativeRequired: parseEther("0.01"),
166
+ canDepositNative: true,
167
+ defaultToken: getHyperEVMNativeToken(),
168
+ nativeToken: getHyperEVMNativeToken(),
169
+ viem: hyperEVM,
170
+ pollingInterval: 1000, // 1 second for Hyperliquid
171
+ coingeckoName: "hyperevm",
172
+ wethAddress: "0x5555555555555555555555555555555555555555",
173
+ },
153
174
  };
154
175
  export const EVM_TESTNET = {
155
176
  // [sepolia.id]: {
@@ -1,7 +1,10 @@
1
1
  import { components } from "../../anyspend/types/api";
2
+ export declare const HYPERLIQUID_CHAIN_ID = 1337;
3
+ export declare const HYPEREVM_CHAIN_ID = 999;
2
4
  export declare function isNativeToken(address: string): boolean;
3
5
  export declare function getSolanaToken(): components["schemas"]["Token"];
4
6
  export declare function getEthToken(chainId: number): components["schemas"]["Token"];
5
7
  export declare function getPolToken(): components["schemas"]["Token"];
6
8
  export declare function getBnbToken(): components["schemas"]["Token"];
7
9
  export declare function getAvaxToken(): components["schemas"]["Token"];
10
+ export declare function getHyperEVMNativeToken(): components["schemas"]["Token"];
@@ -1,5 +1,7 @@
1
- import { avalanche, bsc, polygon } from "viem/chains";
2
1
  import { RELAY_ETH_ADDRESS, RELAY_SOL_ADDRESS, RELAY_SOLANA_MAINNET_CHAIN_ID } from "../../anyspend/constants/index.js";
2
+ import { avalanche, bsc, polygon } from "viem/chains";
3
+ export const HYPERLIQUID_CHAIN_ID = 1337;
4
+ export const HYPEREVM_CHAIN_ID = 999;
3
5
  export function isNativeToken(address) {
4
6
  return address.toLowerCase() === RELAY_ETH_ADDRESS || address.toLowerCase() === RELAY_SOL_ADDRESS;
5
7
  }
@@ -63,3 +65,15 @@ export function getAvaxToken() {
63
65
  },
64
66
  };
65
67
  }
68
+ export function getHyperEVMNativeToken() {
69
+ return {
70
+ chainId: HYPEREVM_CHAIN_ID,
71
+ address: RELAY_ETH_ADDRESS,
72
+ symbol: "HYPE",
73
+ name: "HYPE",
74
+ decimals: 18,
75
+ metadata: {
76
+ logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
77
+ },
78
+ };
79
+ }
@@ -1,6 +1,44 @@
1
1
  import { components } from "@b3dotfun/sdk/anyspend/types/api";
2
2
  import { Account, Chain, PublicClient, Transport, WalletClient } from "viem";
3
3
  import { ChainType, IBaseChain, IEVMChain, ISolanaChain } from "../types/chain";
4
+ export declare const hyperEVM: {
5
+ blockExplorers: {
6
+ readonly default: {
7
+ readonly name: "HyperEVM Explorer";
8
+ readonly url: "https://hyperevmscan.io/";
9
+ };
10
+ };
11
+ blockTime?: number | undefined | undefined;
12
+ contracts?: {
13
+ [x: string]: import("viem").ChainContract | {
14
+ [sourceId: number]: import("viem").ChainContract | undefined;
15
+ } | undefined;
16
+ ensRegistry?: import("viem").ChainContract | undefined;
17
+ ensUniversalResolver?: import("viem").ChainContract | undefined;
18
+ multicall3?: import("viem").ChainContract | undefined;
19
+ erc6492Verifier?: import("viem").ChainContract | undefined;
20
+ } | undefined;
21
+ ensTlds?: readonly string[] | undefined;
22
+ id: 999;
23
+ name: "HyperEVM";
24
+ nativeCurrency: {
25
+ readonly name: "HyperEVM";
26
+ readonly symbol: "HYPE";
27
+ readonly decimals: 18;
28
+ };
29
+ experimental_preconfirmationTime?: number | undefined | undefined;
30
+ rpcUrls: {
31
+ readonly default: {
32
+ readonly http: readonly ["https://rpc.hyperliquid.xyz/evm"];
33
+ };
34
+ };
35
+ sourceId?: number | undefined | undefined;
36
+ testnet?: boolean | undefined | undefined;
37
+ custom?: Record<string, unknown> | undefined;
38
+ fees?: import("viem").ChainFees<undefined> | undefined;
39
+ formatters?: undefined;
40
+ serializers?: import("viem").ChainSerializers<undefined, import("viem").TransactionSerializable> | undefined;
41
+ };
4
42
  export declare const EVM_MAINNET: Record<number, IEVMChain>;
5
43
  export declare const EVM_TESTNET: Record<number, IEVMChain>;
6
44
  export declare const SOLANA_MAINNET: ISolanaChain;
@@ -1,7 +1,10 @@
1
1
  import { components } from "@b3dotfun/sdk/anyspend/types/api";
2
+ export declare const HYPERLIQUID_CHAIN_ID = 1337;
3
+ export declare const HYPEREVM_CHAIN_ID = 999;
2
4
  export declare function isNativeToken(address: string): boolean;
3
5
  export declare function getSolanaToken(): components["schemas"]["Token"];
4
6
  export declare function getEthToken(chainId: number): components["schemas"]["Token"];
5
7
  export declare function getPolToken(): components["schemas"]["Token"];
6
8
  export declare function getBnbToken(): components["schemas"]["Token"];
7
9
  export declare function getAvaxToken(): components["schemas"]["Token"];
10
+ export declare function getHyperEVMNativeToken(): components["schemas"]["Token"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b3dotfun/sdk",
3
- "version": "0.0.82-alpha.2",
3
+ "version": "0.0.82-alpha.4",
4
4
  "source": "src/index.ts",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "react-native": "./dist/cjs/index.native.js",
@@ -5,8 +5,7 @@ import { cn } from "@b3dotfun/sdk/shared/utils/cn";
5
5
  import { shortenAddress } from "@b3dotfun/sdk/shared/utils/formatAddress";
6
6
  import { client } from "@b3dotfun/sdk/shared/utils/thirdweb";
7
7
  import { ChevronLeft, ChevronRightCircle, Wallet, X, ZapIcon } from "lucide-react";
8
- import { useConnectModal, useSetActiveWallet, useWalletInfo } from "thirdweb/react";
9
- import { useAccount, useDisconnect } from "wagmi";
8
+ import { useConnectModal, useDisconnect, useWalletInfo } from "thirdweb/react";
10
9
  import { useConnectedWalletDisplay } from "../../hooks/useConnectedWalletDisplay";
11
10
 
12
11
  export enum CryptoPaymentMethodType {
@@ -31,21 +30,23 @@ export function CryptoPaymentMethod({
31
30
  onBack,
32
31
  onSelectPaymentMethod,
33
32
  }: CryptoPaymentMethodProps) {
34
- const { connectedEOAWallet: connectedEOAWallet, connectedSmartWallet: connectedSmartWallet } = useAccountWallet();
35
- const { connector, address } = useAccount();
33
+ const { connectedEOAWallet, connectedSmartWallet } = useAccountWallet();
36
34
  const { disconnect } = useDisconnect();
37
35
  const { connect: openConnectModal } = useConnectModal();
38
- const setActiveWallet = useSetActiveWallet();
39
36
  const { data: eoaWalletInfo } = useWalletInfo(connectedEOAWallet?.id);
40
37
 
41
38
  const globalAddress = connectedSmartWallet?.getAccount()?.address;
42
39
 
43
40
  // Use custom hook to determine wallet display logic
44
- const { shouldShowConnectedEOA, shouldShowWagmiWallet } = useConnectedWalletDisplay(selectedPaymentMethod);
41
+ const { shouldShowConnectedEOA } = useConnectedWalletDisplay(selectedPaymentMethod);
45
42
 
46
43
  // Handle wallet connection using thirdweb modal
47
44
  const handleConnectWallet = async () => {
48
45
  try {
46
+ // Disconnect current wallet before connecting a new one
47
+ if (connectedEOAWallet) {
48
+ await disconnect(connectedEOAWallet);
49
+ }
49
50
  const wallet = await openConnectModal({ client, setActive: false });
50
51
  if (wallet) {
51
52
  // setActiveWallet(wallet);
@@ -132,7 +133,7 @@ export function CryptoPaymentMethod({
132
133
  {/* Payment Methods */}
133
134
  <div className="crypto-payment-methods flex flex-col gap-4">
134
135
  {/* Installed Wallets Section */}
135
- {(shouldShowConnectedEOA || shouldShowWagmiWallet || globalAddress) && (
136
+ {(shouldShowConnectedEOA || globalAddress) && (
136
137
  <div className="installed-wallets">
137
138
  <h3 className="text-as-primary/80 mb-3 text-sm font-medium">Connected wallets</h3>
138
139
  <div className="space-y-2">
@@ -143,10 +144,7 @@ export function CryptoPaymentMethod({
143
144
  onClick={() => {
144
145
  setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
145
146
  onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
146
- if (connectedEOAWallet) {
147
- setActiveWallet(connectedEOAWallet);
148
- }
149
- toast.success(`Selected ${eoaWalletInfo?.name || connector?.name || "wallet"}`);
147
+ toast.success(`Selected ${eoaWalletInfo?.name || "wallet"}`);
150
148
  }}
151
149
  className={cn(
152
150
  "crypto-payment-method-connect-wallet eoa-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md",
@@ -162,7 +160,7 @@ export function CryptoPaymentMethod({
162
160
  </div>
163
161
  <div className="flex flex-col">
164
162
  <span className="text-as-primary font-semibold">
165
- {eoaWalletInfo?.name || connector?.name || "Connected Wallet"}
163
+ {eoaWalletInfo?.name || "Connected Wallet"}
166
164
  </span>
167
165
  <span className="text-as-primary/60 text-sm">
168
166
  {shortenAddress(connectedEOAWallet?.getAccount()?.address || "")}
@@ -176,53 +174,9 @@ export function CryptoPaymentMethod({
176
174
  <button
177
175
  onClick={e => {
178
176
  e.stopPropagation();
179
- disconnect();
180
- toast.success("Wallet disconnected");
181
- if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
182
- setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
177
+ if (connectedEOAWallet) {
178
+ disconnect(connectedEOAWallet);
183
179
  }
184
- }}
185
- className="text-as-primary/60 hover:text-as-primary/80 rounded-lg p-1.5 transition-colors"
186
- >
187
- <X className="h-4 w-4" />
188
- </button>
189
- </div>
190
- </div>
191
- </button>
192
- )}
193
-
194
- {shouldShowWagmiWallet && (
195
- <button
196
- onClick={() => {
197
- setSelectedPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
198
- onSelectPaymentMethod(CryptoPaymentMethodType.CONNECT_WALLET);
199
- toast.success(`Selected ${connector?.name || "wallet"}`);
200
- }}
201
- className={cn(
202
- "crypto-payment-method-connect-wallet wagmi-wallet w-full rounded-xl border p-4 text-left transition-all hover:shadow-md",
203
- selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET
204
- ? "connected-wallet border-as-brand bg-as-brand/5"
205
- : "border-as-border-secondary bg-as-surface-primary hover:border-as-secondary/80",
206
- )}
207
- >
208
- <div className="flex items-center justify-between">
209
- <div className="flex items-center gap-3">
210
- <div className="wallet-icon flex h-10 w-10 items-center justify-center rounded-full bg-blue-100">
211
- <Wallet className="h-5 w-5 text-blue-600" />
212
- </div>
213
- <div className="flex flex-col">
214
- <span className="text-as-primary font-semibold">{connector?.name || "Connected Wallet"}</span>
215
- <span className="text-as-primary/60 text-sm">{shortenAddress(address || "")}</span>
216
- </div>
217
- </div>
218
- <div className="flex items-center gap-2">
219
- {selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET && (
220
- <div className="h-2 w-2 rounded-full bg-green-500"></div>
221
- )}
222
- <button
223
- onClick={e => {
224
- e.stopPropagation();
225
- disconnect();
226
180
  toast.success("Wallet disconnected");
227
181
  if (selectedPaymentMethod === CryptoPaymentMethodType.CONNECT_WALLET) {
228
182
  setSelectedPaymentMethod(CryptoPaymentMethodType.NONE);
@@ -15,12 +15,28 @@ import {
15
15
  } from "viem";
16
16
  import { abstract, arbitrum, avalanche, b3, base, bsc, mainnet, optimism, polygon } from "viem/chains";
17
17
  import { ChainType, IBaseChain, IEVMChain, ISolanaChain } from "../types/chain";
18
- import { getAvaxToken, getBnbToken, getEthToken, getPolToken, getSolanaToken } from "./token";
18
+ import {
19
+ getAvaxToken,
20
+ getBnbToken,
21
+ getEthToken,
22
+ getHyperEVMNativeToken,
23
+ getPolToken,
24
+ getSolanaToken,
25
+ HYPEREVM_CHAIN_ID,
26
+ } from "./token";
19
27
 
20
28
  function getCustomEvmChain(chain: Chain, rpcUrl: string): Chain {
21
29
  return defineChain({ ...chain, rpcUrls: { default: { http: [rpcUrl] } } });
22
30
  }
23
31
 
32
+ export const hyperEVM = defineChain({
33
+ id: HYPEREVM_CHAIN_ID,
34
+ name: "HyperEVM",
35
+ nativeCurrency: { name: "HyperEVM", symbol: "HYPE", decimals: 18 },
36
+ rpcUrls: { default: { http: ["https://rpc.hyperliquid.xyz/evm"] } },
37
+ blockExplorers: { default: { name: "HyperEVM Explorer", url: "https://hyperevmscan.io/" } },
38
+ });
39
+
24
40
  // export const b4testnet = defineChain({
25
41
  // id: 19934,
26
42
  // name: "B4 Testnet",
@@ -189,6 +205,20 @@ export const EVM_MAINNET: Record<number, IEVMChain> = {
189
205
  coingeckoName: "abstract",
190
206
  wethAddress: "0x3439153eb7af838ad19d56e1571fbd09333c2809",
191
207
  },
208
+ [hyperEVM.id]: {
209
+ id: hyperEVM.id,
210
+ name: hyperEVM.name,
211
+ logoUrl: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
212
+ type: ChainType.EVM,
213
+ nativeRequired: parseEther("0.01"),
214
+ canDepositNative: true,
215
+ defaultToken: getHyperEVMNativeToken(),
216
+ nativeToken: getHyperEVMNativeToken(),
217
+ viem: hyperEVM,
218
+ pollingInterval: 1000, // 1 second for Hyperliquid
219
+ coingeckoName: "hyperevm",
220
+ wethAddress: "0x5555555555555555555555555555555555555555",
221
+ },
192
222
  };
193
223
 
194
224
  export const EVM_TESTNET: Record<number, IEVMChain> = {
@@ -1,6 +1,9 @@
1
- import { avalanche, bsc, polygon } from "viem/chains";
2
1
  import { RELAY_ETH_ADDRESS, RELAY_SOL_ADDRESS, RELAY_SOLANA_MAINNET_CHAIN_ID } from "@b3dotfun/sdk/anyspend/constants";
3
2
  import { components } from "@b3dotfun/sdk/anyspend/types/api";
3
+ import { avalanche, bsc, polygon } from "viem/chains";
4
+
5
+ export const HYPERLIQUID_CHAIN_ID = 1337;
6
+ export const HYPEREVM_CHAIN_ID = 999;
4
7
 
5
8
  export function isNativeToken(address: string): boolean {
6
9
  return address.toLowerCase() === RELAY_ETH_ADDRESS || address.toLowerCase() === RELAY_SOL_ADDRESS;
@@ -70,3 +73,16 @@ export function getAvaxToken(): components["schemas"]["Token"] {
70
73
  },
71
74
  };
72
75
  }
76
+
77
+ export function getHyperEVMNativeToken(): components["schemas"]["Token"] {
78
+ return {
79
+ chainId: HYPEREVM_CHAIN_ID,
80
+ address: RELAY_ETH_ADDRESS,
81
+ symbol: "HYPE",
82
+ name: "HYPE",
83
+ decimals: 18,
84
+ metadata: {
85
+ logoURI: "https://s2.coinmarketcap.com/static/img/coins/64x64/32196.png",
86
+ },
87
+ };
88
+ }