@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.
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +12 -25
- package/dist/cjs/anyspend/utils/chain.d.ts +38 -0
- package/dist/cjs/anyspend/utils/chain.js +22 -1
- package/dist/cjs/anyspend/utils/token.d.ts +3 -0
- package/dist/cjs/anyspend/utils/token.js +17 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +12 -25
- package/dist/esm/anyspend/utils/chain.d.ts +38 -0
- package/dist/esm/anyspend/utils/chain.js +22 -1
- package/dist/esm/anyspend/utils/token.d.ts +3 -0
- package/dist/esm/anyspend/utils/token.js +15 -1
- package/dist/types/anyspend/utils/chain.d.ts +38 -0
- package/dist/types/anyspend/utils/token.d.ts +3 -0
- package/package.json +1 -1
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +12 -58
- package/src/anyspend/utils/chain.ts +31 -1
- package/src/anyspend/utils/token.ts +17 -1
|
@@ -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
|
|
24
|
-
const {
|
|
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
|
|
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 ||
|
|
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
|
-
|
|
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 ||
|
|
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
|
-
|
|
74
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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
|
|
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 ||
|
|
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
|
-
|
|
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 ||
|
|
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
|
-
|
|
70
|
-
|
|
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
|
@@ -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,
|
|
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
|
|
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
|
|
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 ||
|
|
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
|
-
|
|
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 ||
|
|
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
|
-
|
|
180
|
-
|
|
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 {
|
|
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
|
+
}
|