Skip to content

Commit

Permalink
solana mainnet support
Browse files Browse the repository at this point in the history
  • Loading branch information
Tarnadas committed Dec 3, 2024
1 parent 4290207 commit e5b4b6a
Show file tree
Hide file tree
Showing 6 changed files with 232 additions and 94 deletions.
51 changes: 29 additions & 22 deletions app/components/wallet/WalletConnection.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ import { ConnectWalletButton } from './ConnectWalletButton';
import { EvmDropdownMenu } from './EvmDropdownMenu';
import { SolanaDropdownMenu } from './SolanaDropdownMenu';

import { useIsTestnet } from '~/hooks';
import { useSolanaNetwork } from '~/providers/SolanaProvider';

export const WalletConnection: FC = () => {
const { account, state } = useAccount();
const { setSolanaNetwork } = useSolanaNetwork();
const [isTestnet] = useIsTestnet();

// EVM wallet setup
const [{ wallet: evmWallet }] = useConnectWallet();
Expand All @@ -39,6 +40,7 @@ export const WalletConnection: FC = () => {
}, [account, evmWallet, evmAddress, connectedEvmChain]);

// Solana wallet setup
const { setSolanaNetwork } = useSolanaNetwork();
const { signMessage, sendTransaction, publicKey, wallet: solanaWallet } = useWallet();
const { connection: solanaConnection } = useConnection();
const solanaAddress = useMemo(() => {
Expand All @@ -47,34 +49,39 @@ export const WalletConnection: FC = () => {
}, [publicKey]);
useEffect(() => {
if (!solanaWallet || !solanaAddress) return;
account
.setAddress(solanaAddress, {
chain: {
id: 901901901,
namespace: ChainNamespace.solana
},
provider: {
signMessage,
connection: solanaConnection,
sendTransaction
},
wallet: {
name: solanaWallet.adapter.name
}
})
.then(() => {
// TODO Solana mainnet
setSolanaNetwork(WalletAdapterNetwork.Devnet);
window.localStorage.setItem('chain-namespace', ChainNamespace.solana);
});
if (solanaAddress !== account.address) {
account
.setAddress(solanaAddress, {
chain: {
id: isTestnet ? 901901901 : 900900900,
namespace: ChainNamespace.solana
},
provider: {
signMessage,
connection: solanaConnection,
sendTransaction
},
wallet: {
name: solanaWallet.adapter.name
}
})
.then(() => {
setSolanaNetwork(isTestnet ? WalletAdapterNetwork.Devnet : WalletAdapterNetwork.Mainnet);
window.localStorage.setItem('chain-namespace', ChainNamespace.solana);
});
} else {
account.switchChainId(isTestnet ? 901901901 : 900900900);
setSolanaNetwork(isTestnet ? WalletAdapterNetwork.Devnet : WalletAdapterNetwork.Mainnet);
}
}, [
solanaAddress,
account,
solanaConnection,
signMessage,
sendTransaction,
solanaWallet,
setSolanaNetwork
setSolanaNetwork,
isTestnet
]);

return account.address ? (
Expand Down
2 changes: 1 addition & 1 deletion app/hooks/useIsTestnet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export function useIsTestnet() {
testnet = isTestnet(connectedEvmChain.id);
} else if (solanaWalletConnected && solanaNetwork === WalletAdapterNetwork.Devnet) {
testnet = true;
} else if (typeof window !== 'undefined') {
} else if (!solanaWalletConnected && typeof window !== 'undefined') {
testnet = window.localStorage.getItem('networkId') === 'testnet';
} else {
testnet = false;
Expand Down
8 changes: 7 additions & 1 deletion app/providers/SolanaProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,13 @@ export const SolanaProvider: FC<{ children: React.ReactNode }> = ({ children })
networkId === 'testnet' ? WalletAdapterNetwork.Devnet : WalletAdapterNetwork.Mainnet
);

const endPoint = useMemo(() => clusterApiUrl(network), [network]);
const endPoint = useMemo(
() =>
network === WalletAdapterNetwork.Devnet
? clusterApiUrl(network)
: 'https://mainnet.helius-rpc.com/?api-key=4cdab4eb-eefe-4790-a0d6-45f66f2ddba5',
[network]
);
const wallets = useMemo(() => {
return [
new PhantomWalletAdapter(),
Expand Down
7 changes: 7 additions & 0 deletions app/utils/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,13 @@ export const supportedEvmChains: SupportedEvmChain[] = [
export const supportedEvmChainIds = supportedEvmChains.map(({ id }) => Number(id));

export const supportedSolanaChains: SupportedSolanaChain[] = [
{
network: WalletAdapterNetwork.Mainnet,
icon: './assets/solana.svg',
id: '900900900',
token: 'SOL',
label: 'Solana Mainnet Beta'
},
{
network: WalletAdapterNetwork.Devnet,
icon: './assets/solana_devnet.svg',
Expand Down
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@
"typecheck": "tsc"
},
"dependencies": {
"@orderly.network/default-evm-adapter": "2.0.1-alpha.2",
"@orderly.network/default-solana-adapter": "2.0.1-alpha.2",
"@orderly.network/hooks": "2.0.1-alpha.2",
"@orderly.network/perp": "4.0.1-alpha.2",
"@orderly.network/trading-view": "2.0.1-alpha.2",
"@orderly.network/types": "2.0.1-alpha.2",
"@orderly.network/web3-provider-ethers": "2.0.1-alpha.2",
"@orderly.network/default-evm-adapter": "2.0.1-alpha.4",
"@orderly.network/default-solana-adapter": "2.0.1-alpha.4",
"@orderly.network/hooks": "2.0.1-alpha.4",
"@orderly.network/perp": "4.0.1-alpha.3",
"@orderly.network/trading-view": "2.0.1-alpha.3",
"@orderly.network/types": "2.0.1-alpha.4",
"@orderly.network/web3-provider-ethers": "2.0.1-alpha.4",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/themes": "^3.0.1",
"@remix-run/node": "^2.13.1",
Expand Down
Loading

0 comments on commit e5b4b6a

Please sign in to comment.