Update display for wormhole swap
This commit is contained in:
parent
7fb5f7f383
commit
11c674128d
|
@ -7,7 +7,7 @@
|
|||
"@material-ui/core": "^4.11.2",
|
||||
"@material-ui/icons": "^4.11.2",
|
||||
"@project-serum/serum": "^0.13.33",
|
||||
"@project-serum/swap": "^0.0.11",
|
||||
"@project-serum/swap": "^0.0.13",
|
||||
"@solana/spl-token-registry": "^0.2.1",
|
||||
"@solana/web3.js": "^0.87.2",
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
|
|
|
@ -14,12 +14,18 @@ import { swapApiRequest } from '../utils/swap/api';
|
|||
import { getErc20Decimals } from '../utils/swap/eth.js';
|
||||
import { useSendTransaction } from '../utils/notifications';
|
||||
import { signAndSendTransaction } from '../utils/tokens';
|
||||
import { divideBnToNumber } from "@project-serum/swap/lib";
|
||||
import BN from 'bn.js'
|
||||
import { Chip } from '@material-ui/core';
|
||||
|
||||
const SWAP_PROGRAM_ID = new PublicKey(
|
||||
'SwaPpA9LAaLfeLi3a68M4DjnLqgtticKg6CnyNwgAC8',
|
||||
);
|
||||
// const POOL_BASE = new PublicKey(
|
||||
// 'CAXLccDUeS6egtNNEBLrxAqxSvuL6SwspqYX14JdKaiK',
|
||||
// );
|
||||
const POOL_BASE = new PublicKey(
|
||||
'CAXLccDUeS6egtNNEBLrxAqxSvuL6SwspqYX14JdKaiK',
|
||||
'BX4Y3jfmWwERaoNSonNpS4tRnBvUTgtRbbQra7D3DZSU',
|
||||
);
|
||||
|
||||
export default function SwapWormholeDialog({
|
||||
|
@ -36,6 +42,7 @@ export default function SwapWormholeDialog({
|
|||
// * pool.accountInfo !== null => pool exists.
|
||||
const [pool, setPool] = useState(undefined);
|
||||
const [wormholeMintAddr, setWormholeMintAddr] = useState(null);
|
||||
const [swapPoolWormholeTokenHolding, setSwapPoolWormholeTokenHolding] = useState(0)
|
||||
const [transferAmountString, setTransferAmountString] = useState('');
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const wallet = useWallet();
|
||||
|
@ -134,6 +141,48 @@ export default function SwapWormholeDialog({
|
|||
swapCoinInfo.ticker,
|
||||
]);
|
||||
|
||||
useEffect(() => {
|
||||
const fetch = async () => {
|
||||
if (
|
||||
pool &&
|
||||
pool.publicKey &&
|
||||
wormholeMintAddr &&
|
||||
balanceAmount > 0
|
||||
) {
|
||||
let poolClient;
|
||||
try {
|
||||
poolClient = await Pool.load(wallet.connection, pool.publicKey, SWAP_PROGRAM_ID);
|
||||
} catch (e) {
|
||||
console.log(`Received error loading pool: ${pool.publicKey}`);
|
||||
setSwapPoolWormholeTokenHolding(0);
|
||||
return;
|
||||
}
|
||||
const holdings = await poolClient.getHoldings(wallet.connection);
|
||||
const whMint = await poolClient.getCachedMintAccount(wallet.connection, wormholeMintAddr, 100000);
|
||||
const poolWhHoldingAccount = holdings.find(holding => holding.mint.toString() === wormholeMintAddr.toString());
|
||||
if (!poolWhHoldingAccount) {
|
||||
setSwapPoolWormholeTokenHolding(0);
|
||||
return;
|
||||
}
|
||||
const poolWhTokenAmount = divideBnToNumber(
|
||||
new BN(poolWhHoldingAccount.holding),
|
||||
new BN(Math.pow(10, whMint.decimals))
|
||||
);
|
||||
setSwapPoolWormholeTokenHolding(poolWhTokenAmount);
|
||||
} else {
|
||||
setSwapPoolWormholeTokenHolding(0);
|
||||
}
|
||||
}
|
||||
fetch();
|
||||
}, [
|
||||
pool,
|
||||
wormholeMintAddr,
|
||||
balanceAmount,
|
||||
balanceInfo.mint,
|
||||
swapCoinInfo.ticker,
|
||||
wallet.connection
|
||||
]);
|
||||
|
||||
// Converts the sollet wrapped token into the wormhole wrapped token
|
||||
// by trading on the constant price pool.
|
||||
async function convert() {
|
||||
|
@ -232,7 +281,22 @@ export default function SwapWormholeDialog({
|
|||
) : (
|
||||
<>
|
||||
<DialogContentText>
|
||||
{`Convert your tokens into wormhole-wrapped tokens.`}
|
||||
{`Convert your tokens into wormhole-wrapped tokens using a constant price swap pool.
|
||||
Assets will be converted one-to-one with a 5 basis point fee paid to the swap program owner.`}
|
||||
<br/>
|
||||
<br/>
|
||||
{`Swap pool: `}
|
||||
<a
|
||||
href={`https://explorer.solana.com/address/${pool.publicKey}`}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
<Chip
|
||||
label={pool.publicKey.toString()}
|
||||
/>
|
||||
</a>
|
||||
<br/>
|
||||
{`Available wormhole balances in pool: ${swapPoolWormholeTokenHolding.toFixed(4)}`}
|
||||
</DialogContentText>
|
||||
<TextField
|
||||
label="Amount"
|
||||
|
@ -246,7 +310,7 @@ export default function SwapWormholeDialog({
|
|||
<Button
|
||||
onClick={() =>
|
||||
setTransferAmountString(
|
||||
balanceAmountToUserAmount(balanceAmount, decimals),
|
||||
Math.min(balanceAmountToUserAmount(balanceAmount, decimals), swapPoolWormholeTokenHolding),
|
||||
)
|
||||
}
|
||||
>
|
||||
|
@ -265,11 +329,11 @@ export default function SwapWormholeDialog({
|
|||
<span
|
||||
onClick={() =>
|
||||
setTransferAmountString(
|
||||
balanceAmountToUserAmount(balanceAmount, decimals),
|
||||
Math.min(balanceAmountToUserAmount(balanceAmount, decimals), swapPoolWormholeTokenHolding),
|
||||
)
|
||||
}
|
||||
>
|
||||
Max: {balanceAmountToUserAmount(balanceAmount, decimals)}
|
||||
Max: {Math.min(balanceAmountToUserAmount(balanceAmount, decimals), swapPoolWormholeTokenHolding)}
|
||||
</span>
|
||||
}
|
||||
/>
|
||||
|
|
|
@ -1878,10 +1878,10 @@
|
|||
bn.js "^5.1.2"
|
||||
buffer-layout "^1.2.0"
|
||||
|
||||
"@project-serum/swap@^0.0.11":
|
||||
version "0.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/swap/-/swap-0.0.11.tgz#f606b73fbdcd152d7835068f168cb8ad172d8414"
|
||||
integrity sha512-DxvNL81LnBcE62oENr0LOqIAen9/LNb7gEcDbNlIHr02PckUCZTDIngIsbDY09ld1+V7STy+pLPnstt6ZZElsg==
|
||||
"@project-serum/swap@^0.0.13":
|
||||
version "0.0.13"
|
||||
resolved "https://registry.yarnpkg.com/@project-serum/swap/-/swap-0.0.13.tgz#a9fd66daecb4f5843c13abc870ba5ef673c7d449"
|
||||
integrity sha512-VKwPrzkiKOEv4U85ZnxP29rUfyT3tvvKBDyYSEjAkpqOm3LkRhHvmcm6h/0gOS8waSFiYe2nC80t5tWZOrLbGg==
|
||||
dependencies:
|
||||
"@project-serum/serum" "^0.13.21"
|
||||
"@solana/spl-token" "^0.0.13"
|
||||
|
|
Loading…
Reference in New Issue