From 6875559d4c00ac1d553a1c0c0620f9ba860f7524 Mon Sep 17 00:00:00 2001
From: Evan Gray <56235822+evan-gray@users.noreply.github.com>
Date: Thu, 12 Aug 2021 16:45:14 -0400
Subject: [PATCH] bridge_ui: sol, eth bidirectional transfers
Change-Id: I0bbbbffddd3bec7771c79953556271000731cd36
---
bridge_ui/src/components/Attest/Send.tsx | 11 ---
bridge_ui/src/components/Attest/index.tsx | 2 +-
bridge_ui/src/components/Transfer/Redeem.tsx | 31 ++++++-
bridge_ui/src/components/Transfer/Send.tsx | 77 +++++++++++++----
bridge_ui/src/components/Transfer/Source.tsx | 1 +
bridge_ui/src/components/Transfer/Target.tsx | 39 ++++++++-
bridge_ui/src/components/Transfer/index.tsx | 7 +-
.../src/hooks/useCheckIfWormholeWrapped.ts | 45 ++++++++++
bridge_ui/src/hooks/useFetchTargetAsset.ts | 83 ++++++++++++++++++
bridge_ui/src/hooks/useGetBalanceEffect.ts | 63 +++++++++++---
bridge_ui/src/hooks/useWrappedAsset.ts | 74 ----------------
bridge_ui/src/store/selectors.ts | 25 +++++-
bridge_ui/src/store/transferSlice.ts | 40 +++++++++
bridge_ui/src/utils/attestFrom.ts | 2 +-
bridge_ui/src/utils/createWrappedOn.ts | 1 +
...getAttestedAsset.ts => getForeignAsset.ts} | 17 +++-
bridge_ui/src/utils/getIsWrappedAsset.ts | 47 ++++++++++
bridge_ui/src/utils/getOriginalAsset.ts | 85 +++++++++++++++++++
bridge_ui/src/utils/redeemOn.ts | 78 ++++++++++++++---
bridge_ui/src/utils/transferFrom.ts | 61 +++++++++----
20 files changed, 633 insertions(+), 156 deletions(-)
create mode 100644 bridge_ui/src/hooks/useCheckIfWormholeWrapped.ts
create mode 100644 bridge_ui/src/hooks/useFetchTargetAsset.ts
delete mode 100644 bridge_ui/src/hooks/useWrappedAsset.ts
rename bridge_ui/src/utils/{getAttestedAsset.ts => getForeignAsset.ts} (80%)
create mode 100644 bridge_ui/src/utils/getIsWrappedAsset.ts
create mode 100644 bridge_ui/src/utils/getOriginalAsset.ts
diff --git a/bridge_ui/src/components/Attest/Send.tsx b/bridge_ui/src/components/Attest/Send.tsx
index 6a475562..5399fb27 100644
--- a/bridge_ui/src/components/Attest/Send.tsx
+++ b/bridge_ui/src/components/Attest/Send.tsx
@@ -3,7 +3,6 @@ import { useCallback } from "react";
import { useDispatch, useSelector } from "react-redux";
import { useEthereumProvider } from "../../contexts/EthereumProviderContext";
import { useSolanaWallet } from "../../contexts/SolanaWalletContext";
-import useWrappedAsset from "../../hooks/useWrappedAsset";
import { setIsSending, setSignedVAAHex } from "../../store/attestSlice";
import {
selectAttestIsSendComplete,
@@ -11,7 +10,6 @@ import {
selectAttestIsTargetComplete,
selectAttestSourceAsset,
selectAttestSourceChain,
- selectAttestTargetChain,
} from "../../store/selectors";
import { uint8ArrayToHex } from "../../utils/array";
import attestFrom, {
@@ -35,21 +33,12 @@ function Send() {
const dispatch = useDispatch();
const sourceChain = useSelector(selectAttestSourceChain);
const sourceAsset = useSelector(selectAttestSourceAsset);
- const targetChain = useSelector(selectAttestTargetChain);
const isTargetComplete = useSelector(selectAttestIsTargetComplete);
const isSending = useSelector(selectAttestIsSending);
const isSendComplete = useSelector(selectAttestIsSendComplete);
const { provider, signer } = useEthereumProvider();
const { wallet } = useSolanaWallet();
const solPK = wallet?.publicKey;
- const {
- isLoading: isCheckingWrapped,
- // isWrapped,
- wrappedAsset,
- } = useWrappedAsset(targetChain, sourceChain, sourceAsset, provider);
- // TODO: check this and send to separate flow
- const isWrapped = true;
- console.log(isCheckingWrapped, isWrapped, wrappedAsset);
// TODO: dynamically get "to" wallet
const handleAttestClick = useCallback(() => {
// TODO: more generic way of calling these
diff --git a/bridge_ui/src/components/Attest/index.tsx b/bridge_ui/src/components/Attest/index.tsx
index 34e0d63b..a723b019 100644
--- a/bridge_ui/src/components/Attest/index.tsx
+++ b/bridge_ui/src/components/Attest/index.tsx
@@ -20,7 +20,7 @@ import Target from "./Target";
// TODO: ensure that both wallets are connected to the same known network
function Attest() {
- useGetBalanceEffect();
+ useGetBalanceEffect("source");
const dispatch = useDispatch();
const activeStep = useSelector(selectAttestActiveStep);
const signedVAAHex = useSelector(selectAttestSignedVAAHex);
diff --git a/bridge_ui/src/components/Transfer/Redeem.tsx b/bridge_ui/src/components/Transfer/Redeem.tsx
index ff684da0..dc1ecec8 100644
--- a/bridge_ui/src/components/Transfer/Redeem.tsx
+++ b/bridge_ui/src/components/Transfer/Redeem.tsx
@@ -2,15 +2,18 @@ import { Button, CircularProgress, makeStyles } from "@material-ui/core";
import { useCallback } from "react";
import { useDispatch, useSelector } from "react-redux";
import { useEthereumProvider } from "../../contexts/EthereumProviderContext";
+import { useSolanaWallet } from "../../contexts/SolanaWalletContext";
import useTransferSignedVAA from "../../hooks/useTransferSignedVAA";
import {
selectTransferIsRedeeming,
+ selectTransferIsSourceAssetWormholeWrapped,
+ selectTransferOriginChain,
+ selectTransferTargetAsset,
selectTransferTargetChain,
} from "../../store/selectors";
import { setIsRedeeming } from "../../store/transferSlice";
import { CHAIN_ID_ETH, CHAIN_ID_SOLANA } from "../../utils/consts";
import redeemOn, { redeemOnEth, redeemOnSolana } from "../../utils/redeemOn";
-import { useSolanaWallet } from "../../contexts/SolanaWalletContext";
const useStyles = makeStyles((theme) => ({
transferButton: {
@@ -23,7 +26,12 @@ const useStyles = makeStyles((theme) => ({
function Redeem() {
const dispatch = useDispatch();
const classes = useStyles();
+ const isSourceAssetWormholeWrapped = useSelector(
+ selectTransferIsSourceAssetWormholeWrapped
+ );
+ const originChain = useSelector(selectTransferOriginChain);
const targetChain = useSelector(selectTransferTargetChain);
+ const targetAsset = useSelector(selectTransferTargetAsset);
const { wallet } = useSolanaWallet();
const solPK = wallet?.publicKey;
const { provider, signer } = useEthereumProvider();
@@ -44,9 +52,26 @@ function Redeem() {
signedVAA
) {
dispatch(setIsRedeeming(true));
- redeemOnSolana(wallet, solPK?.toString(), signedVAA);
+ redeemOnSolana(
+ wallet,
+ solPK?.toString(),
+ signedVAA,
+ !!isSourceAssetWormholeWrapped && originChain === CHAIN_ID_SOLANA,
+ targetAsset || undefined
+ );
}
- }, [dispatch, targetChain, provider, signer, signedVAA, wallet, solPK]);
+ }, [
+ dispatch,
+ targetChain,
+ provider,
+ signer,
+ signedVAA,
+ wallet,
+ solPK,
+ isSourceAssetWormholeWrapped,
+ originChain,
+ targetAsset,
+ ]);
return (