Skip to content

Commit

Permalink
swapped in solana wallet adapter
Browse files Browse the repository at this point in the history
Change-Id: I3075380313f10fdb579a4b777e0f10506e7e1ede
  • Loading branch information
chase-45 committed Aug 21, 2021
1 parent 2a317ab commit 0fab248
Show file tree
Hide file tree
Showing 18 changed files with 2,151 additions and 275 deletions.
2,066 changes: 1,975 additions & 91 deletions bridge_ui/package-lock.json

Large diffs are not rendered by default.

12 changes: 11 additions & 1 deletion bridge_ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,19 @@
"@material-ui/core": "^4.12.2",
"@material-ui/icons": "^4.11.2",
"@metamask/detect-provider": "^1.2.0",
"@project-serum/sol-wallet-adapter": "^0.2.5",
"@reduxjs/toolkit": "^1.6.1",
"@solana/spl-token": "^0.1.6",
"@solana/wallet-adapter-base": "^0.4.1",
"@solana/wallet-adapter-ledger": "^0.4.1",
"@solana/wallet-adapter-material-ui": "^0.7.1",
"@solana/wallet-adapter-mathwallet": "^0.4.1",
"@solana/wallet-adapter-phantom": "^0.4.1",
"@solana/wallet-adapter-react": "^0.7.1",
"@solana/wallet-adapter-solflare": "^0.1.0",
"@solana/wallet-adapter-sollet": "^0.4.1",
"@solana/wallet-adapter-solong": "^0.4.1",
"@solana/wallet-adapter-torus": "^0.5.0",
"@solana/wallet-adapter-wallets": "^0.6.1",
"@solana/wallet-base": "^0.0.1",
"@solana/web3.js": "^1.22.0",
"@terra-money/wallet-provider": "^1.4.0-alpha.1",
Expand Down
14 changes: 9 additions & 5 deletions bridge_ui/src/components/Attest/Create.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { CHAIN_ID_TERRA, CHAIN_ID_ETH, CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk";
import {
CHAIN_ID_TERRA,
CHAIN_ID_ETH,
CHAIN_ID_SOLANA,
} from "@certusone/wormhole-sdk";
import { Button, CircularProgress, makeStyles } from "@material-ui/core";
import { useCallback } from "react";
import { useConnectedWallet } from "@terra-money/wallet-provider";
Expand Down Expand Up @@ -29,8 +33,8 @@ function Create() {
const dispatch = useDispatch();
const classes = useStyles();
const targetChain = useSelector(selectAttestTargetChain);
const { wallet } = useSolanaWallet();
const solPK = wallet?.publicKey;
const solanaWallet = useSolanaWallet();
const solPK = solanaWallet?.publicKey;
const signedVAA = useAttestSignedVAA();
const isCreating = useSelector(selectAttestIsCreating);
const { signer } = useEthereumProvider();
Expand All @@ -39,7 +43,7 @@ function Create() {
if (targetChain === CHAIN_ID_SOLANA && signedVAA) {
(async () => {
dispatch(setIsCreating(true));
await createWrappedOnSolana(wallet, solPK?.toString(), signedVAA);
await createWrappedOnSolana(solanaWallet, solPK?.toString(), signedVAA);
dispatch(reset());
})();
}
Expand All @@ -56,7 +60,7 @@ function Create() {
createWrappedOnTerra(terraWallet, signedVAA);
})();
}
}, [dispatch, targetChain, wallet, solPK, signedVAA, signer]);
}, [dispatch, targetChain, solanaWallet, solPK, signedVAA, signer]);
return (
<div style={{ position: "relative" }}>
<Button
Expand Down
40 changes: 22 additions & 18 deletions bridge_ui/src/components/Attest/Send.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { CHAIN_ID_TERRA, CHAIN_ID_ETH, CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk";
import {
CHAIN_ID_TERRA,
CHAIN_ID_ETH,
CHAIN_ID_SOLANA,
} from "@certusone/wormhole-sdk";
import { Button, CircularProgress, makeStyles } from "@material-ui/core";
import { useCallback } from "react";
import { useDispatch, useSelector } from "react-redux";
Expand Down Expand Up @@ -39,9 +43,9 @@ function Send() {
const isSending = useSelector(selectAttestIsSending);
const isSendComplete = useSelector(selectAttestIsSendComplete);
const { signer } = useEthereumProvider();
const { wallet } = useSolanaWallet();
const solanaWallet = useSolanaWallet();
const terraWallet = useConnectedWallet();
const solPK = wallet?.publicKey;
const solPK = solanaWallet?.publicKey;
// TODO: dynamically get "to" wallet
const handleAttestClick = useCallback(() => {
if (sourceChain === CHAIN_ID_ETH) {
Expand All @@ -63,7 +67,7 @@ function Send() {
dispatch(setIsSending(true));
try {
const vaaBytes = await attestFromSolana(
wallet,
solanaWallet,
solPK?.toString(),
sourceAsset
);
Expand All @@ -75,20 +79,20 @@ function Send() {
}
})();
} else if (sourceChain === CHAIN_ID_TERRA) {
//TODO: just for testing, this should eventually use the store to communicate between steps
(async () => {
dispatch(setIsSending(true));
try {
const vaaBytes = await attestFromTerra(terraWallet, sourceAsset);
console.log("bytes in attest", vaaBytes);
vaaBytes && dispatch(setSignedVAAHex(uint8ArrayToHex(vaaBytes)));
} catch (e) {
console.error(e);
dispatch(setIsSending(false));
}
})();
}
}, [dispatch, sourceChain, signer, wallet, solPK, sourceAsset]);
//TODO: just for testing, this should eventually use the store to communicate between steps
(async () => {
dispatch(setIsSending(true));
try {
const vaaBytes = await attestFromTerra(terraWallet, sourceAsset);
console.log("bytes in attest", vaaBytes);
vaaBytes && dispatch(setSignedVAAHex(uint8ArrayToHex(vaaBytes)));
} catch (e) {
console.error(e);
dispatch(setIsSending(false));
}
})();
}
}, [dispatch, sourceChain, signer, solanaWallet, solPK, sourceAsset]);
return (
<>
<div style={{ position: "relative" }}>
Expand Down
27 changes: 18 additions & 9 deletions bridge_ui/src/components/SolanaWalletKey.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,25 @@
import { Toolbar, Typography } from "@material-ui/core";
import DisconnectIcon from "@material-ui/icons/LinkOff";
import {
WalletDisconnectButton,
WalletMultiButton,
} from "@solana/wallet-adapter-material-ui";
import { useWallet } from "@solana/wallet-adapter-react";
import React, { FC } from "react";
import { useSolanaWallet } from "../contexts/SolanaWalletContext";
import ToggleConnectedButton from "./ToggleConnectedButton";

const SolanaWalletKey = () => {
const { connect, disconnect, connected, wallet } = useSolanaWallet();
const pk = wallet?.publicKey?.toString() || "";
const wallet = useSolanaWallet();
return (
<ToggleConnectedButton
connect={connect}
disconnect={disconnect}
connected={connected}
pk={pk}
/>
<Toolbar style={{ display: "flex" }}>
<WalletMultiButton />
{wallet && (
<WalletDisconnectButton
startIcon={<DisconnectIcon />}
style={{ marginLeft: 8 }}
/>
)}
</Toolbar>
);
};

Expand Down
8 changes: 4 additions & 4 deletions bridge_ui/src/components/Transfer/Redeem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ function Redeem() {
const originChain = useSelector(selectTransferOriginChain);
const targetChain = useSelector(selectTransferTargetChain);
const targetAsset = useSelector(selectTransferTargetAsset);
const { wallet } = useSolanaWallet();
const solPK = wallet?.publicKey;
const solanaWallet = useSolanaWallet();
const solPK = solanaWallet?.publicKey;
const { signer } = useEthereumProvider();
const terraWallet = useConnectedWallet();
const signedVAA = useTransferSignedVAA();
Expand All @@ -59,7 +59,7 @@ function Redeem() {
(async () => {
dispatch(setIsRedeeming(true));
await redeemOnSolana(
wallet,
solanaWallet,
solPK?.toString(),
signedVAA,
!!isSourceAssetWormholeWrapped && originChain === CHAIN_ID_SOLANA,
Expand All @@ -78,7 +78,7 @@ function Redeem() {
targetChain,
signer,
signedVAA,
wallet,
solanaWallet,
solPK,
isSourceAssetWormholeWrapped,
originChain,
Expand Down
16 changes: 10 additions & 6 deletions bridge_ui/src/components/Transfer/Send.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { CHAIN_ID_TERRA, CHAIN_ID_ETH, CHAIN_ID_SOLANA } from "@certusone/wormhole-sdk";
import {
CHAIN_ID_TERRA,
CHAIN_ID_ETH,
CHAIN_ID_SOLANA,
} from "@certusone/wormhole-sdk";
import { Button, CircularProgress, makeStyles } from "@material-ui/core";
import {
ASSOCIATED_TOKEN_PROGRAM_ID,
Expand Down Expand Up @@ -58,9 +62,9 @@ function Send() {
const isSending = useSelector(selectTransferIsSending);
const isSendComplete = useSelector(selectTransferIsSendComplete);
const { signer, signerAddress } = useEthereumProvider();
const { wallet } = useSolanaWallet();
const terraWallet = useConnectedWallet();
const solPK = wallet?.publicKey;
const solanaWallet = useSolanaWallet();
const solPK = solanaWallet?.publicKey;
const sourceParsedTokenAccount = useSelector(
selectTransferSourceParsedTokenAccount
);
Expand Down Expand Up @@ -133,7 +137,7 @@ function Send() {
dispatch(setIsSending(true));
try {
const vaaBytes = await transferFromSolana(
wallet,
solanaWallet,
solPK?.toString(),
sourceTokenPublicKey,
sourceAsset,
Expand Down Expand Up @@ -161,7 +165,7 @@ function Send() {
sourceAsset,
amount,
"",
targetChain,
targetChain
);
console.log("bytes in transfer", vaaBytes);
vaaBytes && dispatch(setSignedVAAHex(uint8ArrayToHex(vaaBytes)));
Expand All @@ -176,7 +180,7 @@ function Send() {
sourceChain,
signer,
signerAddress,
wallet,
solanaWallet,
solPK,
sourceTokenPublicKey,
sourceAsset,
Expand Down
83 changes: 29 additions & 54 deletions bridge_ui/src/contexts/SolanaWalletContext.tsx
Original file line number Diff line number Diff line change
@@ -1,59 +1,34 @@
import Wallet from "@project-serum/sol-wallet-adapter";
import React, {
ReactChildren,
useCallback,
useContext,
useMemo,
useState,
} from "react";
import { SOLANA_HOST } from "../utils/consts";
import { WalletDialogProvider } from "@solana/wallet-adapter-material-ui";
import { useWallet, WalletProvider } from "@solana/wallet-adapter-react";
import {
getPhantomWallet,
getSolletWallet,
} from "@solana/wallet-adapter-wallets";
import React, { FC, useMemo } from "react";

interface ISolanaWalletContext {
connect(): void;
disconnect(): void;
connected: boolean;
wallet: Wallet | undefined;
}

const SolanaWalletContext = React.createContext<ISolanaWalletContext>({
connect: () => {},
disconnect: () => {},
connected: false,
wallet: undefined,
});
export const SolanaWalletProvider = ({
children,
}: {
children: ReactChildren;
}) => {
const [wallet, setWallet] = useState<Wallet | undefined>(undefined);
const [connected, setConnected] = useState(false);
const connect = useCallback(() => {
const wallet = new Wallet("https://www.sollet.io", SOLANA_HOST);
setWallet(wallet);
wallet.on("connect", () => {
setConnected(true);
});
wallet.on("disconnect", () => {
console.log("disconnected");
setConnected(false);
setWallet(undefined);
});
wallet.connect();
export const SolanaWalletProvider: FC = (props) => {
// @solana/wallet-adapter-wallets includes all the adapters but supports tree shaking --
// Only the wallets you want to instantiate here will be compiled into your application
const wallets = useMemo(() => {
console.log("running wallets memo again");
return [
getPhantomWallet(),
// getSolflareWallet(),
// getTorusWallet({
// options: { clientId: 'Go to https://developer.tor.us and create a client ID' }
// }),
// getLedgerWallet(),
// getSolongWallet(),
// getMathWallet(),
getSolletWallet(),
];
}, []);
const disconnect = useCallback(() => {
wallet?.disconnect();
}, [wallet]);
const contextValue = useMemo(
() => ({ connect, disconnect, connected, wallet }),
[connect, disconnect, wallet, connected]
);

return (
<SolanaWalletContext.Provider value={contextValue}>
{children}
</SolanaWalletContext.Provider>
<WalletProvider wallets={wallets}>
<WalletDialogProvider>{props.children}</WalletDialogProvider>
</WalletProvider>
);
};
export const useSolanaWallet = () => {
return useContext(SolanaWalletContext);
};

export const useSolanaWallet = useWallet;
2 changes: 1 addition & 1 deletion bridge_ui/src/contexts/TerraWalletContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export const TerraWalletWrapper = ({
}) => {
// TODO: Use wallet instead of useConnectedWallet.
const terraWallet = useWallet();
const [wallet, setWallet] = useState<Wallet | undefined>(undefined);
const [, setWallet] = useState<Wallet | undefined>(undefined);
const [connected, setConnected] = useState(false);

const connect = useCallback(() => {
Expand Down
13 changes: 9 additions & 4 deletions bridge_ui/src/hooks/useGetBalanceEffect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { useEthereumProvider } from "../contexts/EthereumProviderContext";
import { useSolanaWallet } from "../contexts/SolanaWalletContext";
import { useConnectedWallet } from "@terra-money/wallet-provider";

import {
selectTransferSourceAsset,
selectTransferSourceChain,
Expand Down Expand Up @@ -59,8 +61,9 @@ function useGetBalanceEffect(sourceOrTarget: "source" | "target") {
? selectTransferSourceAsset
: selectTransferTargetAsset
);
const { wallet } = useSolanaWallet();
const solPK = wallet?.publicKey;
const solanaWallet = useSolanaWallet();
const solPK = solanaWallet?.publicKey;
const terraWallet = useConnectedWallet();
const { provider, signerAddress } = useEthereumProvider();
useEffect(() => {
// TODO: loading state
Expand All @@ -69,7 +72,8 @@ function useGetBalanceEffect(sourceOrTarget: "source" | "target") {
return;
}
let cancelled = false;
if (lookupChain === CHAIN_ID_TERRA && wallet) {

if (lookupChain === CHAIN_ID_TERRA && terraWallet) {
dispatch(
setSourceParsedTokenAccount(
createParsedTokenAccount(undefined, "0", 0, 0, "0")
Expand Down Expand Up @@ -151,7 +155,8 @@ function useGetBalanceEffect(sourceOrTarget: "source" | "target") {
};
}, [
dispatch,
wallet,
solanaWallet,
terraWallet,
sourceOrTarget,
setAction,
lookupChain,
Expand Down
4 changes: 2 additions & 2 deletions bridge_ui/src/utils/attestFrom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
parseSequenceFromLogSolana,
parseSequenceFromLogTerra,
} from "@certusone/wormhole-sdk";
import Wallet from "@project-serum/sol-wallet-adapter";
import { WalletContextState } from "@solana/wallet-adapter-react";
import { Connection } from "@solana/web3.js";
import { ConnectedWallet as TerraConnectedWallet } from "@terra-money/wallet-provider";
import { ethers } from "ethers";
Expand Down Expand Up @@ -49,7 +49,7 @@ export async function attestFromEth(
}

export async function attestFromSolana(
wallet: Wallet | undefined,
wallet: WalletContextState,
payerAddress: string | undefined, //TODO: we may not need this since we have wallet
mintAddress: string
) {
Expand Down
Loading

0 comments on commit 0fab248

Please sign in to comment.