import { PhantomProvider, useConnect, useSolana, useEthereum } from "@phantom/react-sdk";
import { AddressType } from "@phantom/browser-sdk";
function App() {
return (
<PhantomProvider
config={{
providerType: "embedded", // or "injected" for browser extension
addressTypes: [AddressType.solana, AddressType.ethereum],
appId: "your-app-id",
authOptions: {
authUrl: "https://connect.phantom.app/login",
redirectUrl: "https://yourapp.com/auth/callback", // Must be an existing page in your app and whitelisted in Phantom Portal
},
}}
>
<WalletComponent />
</PhantomProvider>
);
}
function WalletComponent() {
const { connect, isConnecting } = useConnect();
const { solana } = useSolana();
const { ethereum } = useEthereum();
const handleConnect = async () => {
const { addresses } = await connect();
console.log("Connected addresses:", addresses);
};
const signSolanaMessage = async () => {
const signature = await solana.signMessage("Hello Solana!");
console.log("Solana signature:", signature);
};
const signEthereumMessage = async () => {
const accounts = await ethereum.getAccounts();
const signature = await ethereum.signPersonalMessage("Hello Ethereum!", accounts[0]);
console.log("Ethereum signature:", signature);
};
return (
<div>
<button onClick={handleConnect} disabled={isConnecting}>
{isConnecting ? "Connecting..." : "Connect Wallet"}
</button>
<button onClick={signSolanaMessage}>Sign Solana Message</button>
<button onClick={signEthereumMessage}>Sign Ethereum Message</button>
</div>
);
}