swapped in solana wallet adapter
Change-Id: I3075380313f10fdb579a4b777e0f10506e7e1ede
This commit is contained in:
parent
2a317ab923
commit
0fab2481ca
File diff suppressed because it is too large
Load Diff
|
@ -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",
|
||||
|
|
|
@ -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";
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
})();
|
||||
}
|
||||
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
@ -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) {
|
||||
|
@ -63,7 +67,7 @@ function Send() {
|
|||
dispatch(setIsSending(true));
|
||||
try {
|
||||
const vaaBytes = await attestFromSolana(
|
||||
wallet,
|
||||
solanaWallet,
|
||||
solPK?.toString(),
|
||||
sourceAsset
|
||||
);
|
||||
|
@ -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" }}>
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
@ -59,7 +59,7 @@ function Redeem() {
|
|||
(async () => {
|
||||
dispatch(setIsRedeeming(true));
|
||||
await redeemOnSolana(
|
||||
wallet,
|
||||
solanaWallet,
|
||||
solPK?.toString(),
|
||||
signedVAA,
|
||||
!!isSourceAssetWormholeWrapped && originChain === CHAIN_ID_SOLANA,
|
||||
|
@ -78,7 +78,7 @@ function Redeem() {
|
|||
targetChain,
|
||||
signer,
|
||||
signedVAA,
|
||||
wallet,
|
||||
solanaWallet,
|
||||
solPK,
|
||||
isSourceAssetWormholeWrapped,
|
||||
originChain,
|
||||
|
|
|
@ -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,
|
||||
|
@ -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
|
||||
);
|
||||
|
@ -133,7 +137,7 @@ function Send() {
|
|||
dispatch(setIsSending(true));
|
||||
try {
|
||||
const vaaBytes = await transferFromSolana(
|
||||
wallet,
|
||||
solanaWallet,
|
||||
solPK?.toString(),
|
||||
sourceTokenPublicKey,
|
||||
sourceAsset,
|
||||
|
@ -161,7 +165,7 @@ function Send() {
|
|||
sourceAsset,
|
||||
amount,
|
||||
"",
|
||||
targetChain,
|
||||
targetChain
|
||||
);
|
||||
console.log("bytes in transfer", vaaBytes);
|
||||
vaaBytes && dispatch(setSignedVAAHex(uint8ArrayToHex(vaaBytes)));
|
||||
|
@ -176,7 +180,7 @@ function Send() {
|
|||
sourceChain,
|
||||
signer,
|
||||
signerAddress,
|
||||
wallet,
|
||||
solanaWallet,
|
||||
solPK,
|
||||
sourceTokenPublicKey,
|
||||
sourceAsset,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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(() => {
|
||||
|
|
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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")
|
||||
|
@ -151,7 +155,8 @@ function useGetBalanceEffect(sourceOrTarget: "source" | "target") {
|
|||
};
|
||||
}, [
|
||||
dispatch,
|
||||
wallet,
|
||||
solanaWallet,
|
||||
terraWallet,
|
||||
sourceOrTarget,
|
||||
setAction,
|
||||
lookupChain,
|
||||
|
|
|
@ -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";
|
||||
|
@ -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
|
||||
) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import {
|
|||
createWrappedOnSolana as createWrappedOnSolanaTx,
|
||||
createWrappedOnTerra as createWrappedOnTerraTx,
|
||||
} from "@certusone/wormhole-sdk";
|
||||
import Wallet from "@project-serum/sol-wallet-adapter";
|
||||
import { Connection } from "@solana/web3.js";
|
||||
import { ethers } from "ethers";
|
||||
import { ConnectedWallet as TerraConnectedWallet } from "@terra-money/wallet-provider";
|
||||
|
@ -17,6 +16,7 @@ import {
|
|||
TERRA_BRIDGE_ADDRESS,
|
||||
} from "./consts";
|
||||
import { signSendAndConfirm } from "./solana";
|
||||
import { WalletContextState } from "@solana/wallet-adapter-react";
|
||||
|
||||
export async function createWrappedOnEth(
|
||||
signer: ethers.Signer | undefined,
|
||||
|
@ -39,7 +39,7 @@ export async function createWrappedOnTerra(
|
|||
}
|
||||
|
||||
export async function createWrappedOnSolana(
|
||||
wallet: Wallet | undefined,
|
||||
wallet: WalletContextState | undefined,
|
||||
payerAddress: string | undefined, //TODO: we may not need this since we have wallet
|
||||
signedVAA: Uint8Array
|
||||
) {
|
||||
|
@ -48,11 +48,12 @@ export async function createWrappedOnSolana(
|
|||
const connection = new Connection(SOLANA_HOST, "confirmed");
|
||||
await postVaaSolana(
|
||||
connection,
|
||||
wallet,
|
||||
wallet.signTransaction,
|
||||
SOL_BRIDGE_ADDRESS,
|
||||
payerAddress,
|
||||
Buffer.from(signedVAA)
|
||||
);
|
||||
|
||||
const transaction = await createWrappedOnSolanaTx(
|
||||
connection,
|
||||
SOL_BRIDGE_ADDRESS,
|
||||
|
|
|
@ -3,10 +3,9 @@ import {
|
|||
redeemOnEth as redeemOnEthTx,
|
||||
redeemOnSolana as redeemOnSolanaTx,
|
||||
} from "@certusone/wormhole-sdk";
|
||||
import Wallet from "@project-serum/sol-wallet-adapter";
|
||||
import { Connection } from "@solana/web3.js";
|
||||
import { ethers } from "ethers";
|
||||
import { fromUint8Array } from 'js-base64';
|
||||
import { fromUint8Array } from "js-base64";
|
||||
import { ConnectedWallet as TerraConnectedWallet } from "@terra-money/wallet-provider";
|
||||
import { MsgExecuteContract } from "@terra-money/terra.js";
|
||||
import {
|
||||
|
@ -17,6 +16,7 @@ import {
|
|||
TERRA_TOKEN_BRIDGE_ADDRESS,
|
||||
} from "./consts";
|
||||
import { signSendAndConfirm } from "./solana";
|
||||
import { WalletContextState } from "@solana/wallet-adapter-react";
|
||||
|
||||
export async function redeemOnEth(
|
||||
signer: ethers.Signer | undefined,
|
||||
|
@ -27,7 +27,7 @@ export async function redeemOnEth(
|
|||
}
|
||||
|
||||
export async function redeemOnSolana(
|
||||
wallet: Wallet | undefined,
|
||||
wallet: WalletContextState | undefined,
|
||||
payerAddress: string | undefined, //TODO: we may not need this since we have wallet
|
||||
signedVAA: Uint8Array,
|
||||
isSolanaNative: boolean,
|
||||
|
@ -38,11 +38,12 @@ export async function redeemOnSolana(
|
|||
const connection = new Connection(SOLANA_HOST, "confirmed");
|
||||
await postVaaSolana(
|
||||
connection,
|
||||
wallet,
|
||||
wallet.signTransaction,
|
||||
SOL_BRIDGE_ADDRESS,
|
||||
payerAddress,
|
||||
Buffer.from(signedVAA)
|
||||
);
|
||||
|
||||
const transaction = await redeemOnSolanaTx(
|
||||
connection,
|
||||
SOL_BRIDGE_ADDRESS,
|
||||
|
@ -57,22 +58,23 @@ export async function redeemOnSolana(
|
|||
|
||||
export async function redeemOnTerra(
|
||||
wallet: TerraConnectedWallet | undefined,
|
||||
signedVAA: Uint8Array,
|
||||
signedVAA: Uint8Array
|
||||
) {
|
||||
if (!wallet) return;
|
||||
wallet && await wallet.post({
|
||||
msgs: [
|
||||
new MsgExecuteContract(
|
||||
wallet.terraAddress,
|
||||
TERRA_TOKEN_BRIDGE_ADDRESS,
|
||||
{
|
||||
submit_vaa: {
|
||||
data: fromUint8Array(signedVAA)
|
||||
wallet &&
|
||||
(await wallet.post({
|
||||
msgs: [
|
||||
new MsgExecuteContract(
|
||||
wallet.terraAddress,
|
||||
TERRA_TOKEN_BRIDGE_ADDRESS,
|
||||
{
|
||||
submit_vaa: {
|
||||
data: fromUint8Array(signedVAA),
|
||||
},
|
||||
},
|
||||
},
|
||||
{ uluna: 1000 }
|
||||
),
|
||||
],
|
||||
memo: "Complete Transfer",
|
||||
});
|
||||
{ uluna: 1000 }
|
||||
),
|
||||
],
|
||||
memo: "Complete Transfer",
|
||||
}));
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import Wallet from "@project-serum/sol-wallet-adapter";
|
||||
import { WalletContextState } from "@solana/wallet-adapter-react";
|
||||
import { Connection, Transaction } from "@solana/web3.js";
|
||||
|
||||
export async function signSendAndConfirm(
|
||||
wallet: Wallet,
|
||||
wallet: WalletContextState,
|
||||
connection: Connection,
|
||||
transaction: Transaction
|
||||
) {
|
||||
|
@ -13,7 +13,7 @@ export async function signSendAndConfirm(
|
|||
}
|
||||
|
||||
export async function signSendConfirmAndGet(
|
||||
wallet: Wallet,
|
||||
wallet: WalletContextState,
|
||||
connection: Connection,
|
||||
transaction: Transaction
|
||||
) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import {
|
||||
ChainId,
|
||||
CHAIN_ID_ETH,
|
||||
CHAIN_ID_TERRA,
|
||||
CHAIN_ID_SOLANA,
|
||||
CHAIN_ID_TERRA,
|
||||
getEmitterAddressEth,
|
||||
getEmitterAddressSolana,
|
||||
parseSequenceFromLogEth,
|
||||
|
@ -11,9 +11,11 @@ import {
|
|||
transferFromEth as transferFromEthTx,
|
||||
transferFromSolana as transferFromSolanaTx,
|
||||
} from "@certusone/wormhole-sdk";
|
||||
import { fromUint8Array } from 'js-base64';
|
||||
import { ConnectedWallet as TerraConnectedWallet, TxResult } from "@terra-money/wallet-provider";
|
||||
import Wallet from "@project-serum/sol-wallet-adapter";
|
||||
import { fromUint8Array } from "js-base64";
|
||||
import {
|
||||
ConnectedWallet as TerraConnectedWallet,
|
||||
TxResult,
|
||||
} from "@terra-money/wallet-provider";
|
||||
import { Connection } from "@solana/web3.js";
|
||||
import { MsgExecuteContract } from "@terra-money/terra.js";
|
||||
import { ethers } from "ethers";
|
||||
|
@ -30,6 +32,7 @@ import {
|
|||
} from "./consts";
|
||||
import { getSignedVAAWithRetry } from "./getSignedVAAWithRetry";
|
||||
import { signSendConfirmAndGet } from "./solana";
|
||||
import { WalletContextState } from "@solana/wallet-adapter-react";
|
||||
|
||||
// TODO: overall better input checking and error handling
|
||||
export async function transferFromEth(
|
||||
|
@ -62,7 +65,7 @@ export async function transferFromEth(
|
|||
}
|
||||
|
||||
export async function transferFromSolana(
|
||||
wallet: Wallet | undefined,
|
||||
wallet: WalletContextState | undefined,
|
||||
payerAddress: string | undefined, //TODO: we may not need this since we have wallet
|
||||
fromAddress: string | undefined,
|
||||
mintAddress: string,
|
||||
|
@ -123,29 +126,31 @@ export async function transferFromTerra(
|
|||
asset: string,
|
||||
amount: string,
|
||||
targetAddressStr: string | undefined,
|
||||
targetChain: ChainId,
|
||||
targetChain: ChainId
|
||||
) {
|
||||
if (!wallet) return;
|
||||
const result: TxResult = wallet && await wallet.post({
|
||||
msgs: [
|
||||
new MsgExecuteContract(
|
||||
wallet.terraAddress,
|
||||
TERRA_TOKEN_BRIDGE_ADDRESS,
|
||||
{
|
||||
initiate_transfer: {
|
||||
asset: TERRA_TEST_TOKEN_ADDRESS,
|
||||
amount: amount,
|
||||
recipient_chain: targetChain,
|
||||
recipient: targetAddressStr,
|
||||
fee: 1000,
|
||||
nonce: 0,
|
||||
const result: TxResult =
|
||||
wallet &&
|
||||
(await wallet.post({
|
||||
msgs: [
|
||||
new MsgExecuteContract(
|
||||
wallet.terraAddress,
|
||||
TERRA_TOKEN_BRIDGE_ADDRESS,
|
||||
{
|
||||
initiate_transfer: {
|
||||
asset: TERRA_TEST_TOKEN_ADDRESS,
|
||||
amount: amount,
|
||||
recipient_chain: targetChain,
|
||||
recipient: targetAddressStr,
|
||||
fee: 1000,
|
||||
nonce: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
{ uluna: 1000 }
|
||||
),
|
||||
],
|
||||
memo: "Complete Transfer",
|
||||
});
|
||||
{ uluna: 1000 }
|
||||
),
|
||||
],
|
||||
memo: "Complete Transfer",
|
||||
}));
|
||||
console.log(result);
|
||||
const sequence = parseSequenceFromLogTerra(result);
|
||||
console.log(sequence);
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@improbable-eng/grpc-web": "^0.14.0",
|
||||
"@project-serum/sol-wallet-adapter": "^0.2.5",
|
||||
"@solana/spl-token": "^0.1.8",
|
||||
"@solana/web3.js": "^1.24.0",
|
||||
"@terra-money/terra.js": "^1.8.10",
|
||||
|
@ -1013,21 +1012,6 @@
|
|||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@project-serum/sol-wallet-adapter": {
|
||||
"version": "0.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.5.tgz",
|
||||
"integrity": "sha512-Y0XHe+FXXJ7P8XZtx3luAlatO0ge2LdrZUCmqMSzJf+K+fko+qTYIBSUuWwO7y/O4brIXVReR1mEUvF6QKDF2w==",
|
||||
"dependencies": {
|
||||
"bs58": "^4.0.1",
|
||||
"eventemitter3": "^4.0.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@solana/web3.js": "^1.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@protobufjs/aspromise": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
||||
|
@ -4193,15 +4177,6 @@
|
|||
"integrity": "sha512-LD4NnkKpHHSMo5z9MvFsG4g1xxZUDqV3A3Futu3nvyfs4wPwXxqOgMaxOoa2PeyGL2VNeSlbxT54enbQzGcgJQ==",
|
||||
"dev": true
|
||||
},
|
||||
"@project-serum/sol-wallet-adapter": {
|
||||
"version": "0.2.5",
|
||||
"resolved": "https://registry.npmjs.org/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.5.tgz",
|
||||
"integrity": "sha512-Y0XHe+FXXJ7P8XZtx3luAlatO0ge2LdrZUCmqMSzJf+K+fko+qTYIBSUuWwO7y/O4brIXVReR1mEUvF6QKDF2w==",
|
||||
"requires": {
|
||||
"bs58": "^4.0.1",
|
||||
"eventemitter3": "^4.0.7"
|
||||
}
|
||||
},
|
||||
"@protobufjs/aspromise": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@improbable-eng/grpc-web": "^0.14.0",
|
||||
"@project-serum/sol-wallet-adapter": "^0.2.5",
|
||||
"@solana/spl-token": "^0.1.8",
|
||||
"@solana/web3.js": "^1.24.0",
|
||||
"@terra-money/terra.js": "^1.8.10",
|
||||
|
|
|
@ -5,13 +5,12 @@ import {
|
|||
Transaction,
|
||||
TransactionInstruction,
|
||||
} from "@solana/web3.js";
|
||||
import Wallet from "@project-serum/sol-wallet-adapter";
|
||||
import { ixFromRust } from "./rust";
|
||||
|
||||
// is there a better pattern for this?
|
||||
export async function postVaa(
|
||||
connection: Connection,
|
||||
wallet: Wallet,
|
||||
signTransaction: (transaction: Transaction) => any,
|
||||
bridge_id: string,
|
||||
payer: string,
|
||||
vaa: Buffer
|
||||
|
@ -53,7 +52,7 @@ export async function postVaa(
|
|||
transaction.partialSign(signature_set);
|
||||
|
||||
// Sign transaction, broadcast, and confirm
|
||||
const signed = await wallet.signTransaction(transaction);
|
||||
const signed = await signTransaction(transaction);
|
||||
const txid = await connection.sendRawTransaction(signed.serialize());
|
||||
await connection.confirmTransaction(txid);
|
||||
}
|
||||
|
@ -66,7 +65,7 @@ export async function postVaa(
|
|||
transaction.recentBlockhash = blockhash;
|
||||
transaction.feePayer = new PublicKey(payer);
|
||||
|
||||
const signed = await wallet.signTransaction(transaction);
|
||||
const signed = await signTransaction(transaction);
|
||||
const txid = await connection.sendRawTransaction(signed.serialize());
|
||||
await connection.confirmTransaction(txid);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue