Skip to main content

Orca

Orca — это самый простой способ обмена криптовалют на блокчейне Solana. Для подробного описания обратитесь к официальной документации Orca и Orca Developer Portal.

Выполнить своп

Создайте экземпляр IDex, указав аккаунт по умолчанию и экземпляр RPC client:
IDex dex = new OrcaDex(
    WalletH.Account,
    WalletH.Rpc
)
  • Создайте экземпляр IDex:
TokenData tokenA = await dex.GetTokenBySymbol("USDC");
TokenData tokenB = await dex.GetTokenBySymbol("ORCA");
  • Найдите Whirlpool:
Pool whirlpool = await dex.FindWhirlpoolAddress(tokenA.MintAddress, tokenB.MintAddress)
  • Получите котировку свопа для 1 USDC:
SwapQuote swapQuote = await dex.GetSwapQuoteFromWhirlpool(
    whirlpool.Address,
    DecimalUtil.ToUlong(1, tokenA.Decimals),
    tokenA.MintAddress,
    slippageTolerance: 0.1,
);
var quote = DecimalUtil.FromBigInteger(swapQuote.EstimatedAmountOut, tokenB.Decimals);
Debug.Log(quote); // Amount of espected Orca token to receive
  • Создайте транзакцию для свопа:
Transaction tx = await dex.SwapWithQuote(
    whirlpool,
    swapQuote
);
  • Подпишите и отправьте транзакцию свопа:
await WalletH.Base.SignAndSendTransaction(tx);

Откройте позицию и увеличьте ликвидность Whirlpool ORCA/USDC

Пример добавления 5 ORCA и 5 USDC в ликвидность пула с одновременным выпуском NFT Metaplex, представляющего эту позицию.
OrcaDex dex = new OrcaDex(
    WalletH.Account,
    WalletH.Rpc
);

var orcaToken = await dex.GetTokenBySymbol("ORCA");
var usdcToken = await dex.GetTokenBySymbol("USDC");

var whirlpool = await dex.FindWhirlpoolAddress(
  usdcToken.MintAddress,
  orcaToken.MintAddress
);

Account mint = new Account();

Transaction tx = await dex.OpenPositionWithLiquidity(
    whirlpool,
    mint,
    -1792,
    1152,
    DecimalUtil.ToUlong(5, tokenA.Decimals),
    DecimalUtil.ToUlong(5, tokenB.Decimals),
    commitment: Commitment.Confirmed
);

var txSer = tx.Build(new List<Account>() {
  WalletH.Account,
  mint
});

await WalletH.Base.SignAndSendTransaction(tx);