如何使用 Shyft 和 Jito Bundle 构建 Telegram 交易机器人

  • Shyft_to
  • 发布于 2024-05-31 14:37
  • 阅读 14

本文介绍了如何使用 Shyft 和 Jito bundle 创建 Solana Raydium Telegram 交易机器人。文章详细介绍了 Shyft 工具的优势,以及如何利用 Jito 进行交易验证。内容涵盖 Telegraf 机器人配置、代码实现,以及如何使用 Shyft 的 GraphQL API 获取链上数据。最后总结了构建过程,并提供了相关资源链接。

在这篇博客中,我们将指导你使用 Shyft 和 Jito bundle 创建一个 Solana Raydium Telegram 交易机器人。

使用 Shyft & Jito Bundle 的 Solana Telegram 交易机器人

由于生态系统的差异,从 Ethereum 过渡到 Solana 可能具有挑战性。虽然 Ethereum 已经建立完善,但 Solana 提供了更快的交易速度和更低的费用等优势。为了简化这种过渡,Shyft 团队创建了一个工具,其中包含详细的文档,以帮助开发者高效地在 Solana 上进行构建。

在这篇博客中,我们将指导你使用 Shyft 和 Jito bundle 创建一个 Solana Raydium Telegram 交易机器人。我们的分步教程将涵盖所有内容,从使用 BotFather 设置你的机器人,到利用 Shyft 和 Jito 工具在 Solana 区块链上进行交易验证和执行。在本文结束时,你将拥有一个坚实的基础,可以在 Solana 上构建你自己的交易机器人,从而利用 Shyft 和 Jito 的优势。

什么是 Shyft?

Shyft 是一个在 Solana 区块链上构建的强大工具。它提供了一套工具和服务,使开发者可以轻松地与 Solana 区块链交互并构建去中心化应用程序。我们的主要功能之一是能够处理链上调用并获取必要的链上信息。这使其成为构建需要频繁与区块链交互的复杂应用程序的理想选择。另一个有用的功能是它对 Token 创建的支持。如果你有兴趣了解更多信息,可以访问我们的网站 https://shyft.

为什么使用 Jito Bundle?

虽然 Shyft 提供了一套用于在 Solana 区块链上构建的强大工具,但它不提供用于交易验证的内置解决方案。这就是 Jito 的用武之地。Jito 是一个使用简单的配置文件构建和部署 Solana 程序的工具。其主要功能之一是它能够在单个请求中发送多个交易,这可以提高交易处理的可靠性和速度。在我们的 Telegram 交易机器人中,我们使用 Jito 来验证我们在 Solana 区块链上的交易,并使用 Shyft RPC 发送我们的交易。通过结合两者的优势,我们能够构建一个快速、可靠且易于使用的 Telegram 交易机器人。

Telegraf 机器人配置

要开始使用我们的机器人,第一步是使用 Bot Father 创建一个 Telegram 机器人 Token。为此,请导航到 Telegram 应用程序并搜索“@BotFather”机器人。按照提示创建一个新机器人并获取你的机器人 Token。接下来,我们将使用 Telegraf 库来构建我们的 Telegram 机器人界面。在代码中,我们需要进行一些必要的输入,包括机器人 Token 和聊天 ID。要获取你的聊天 ID,你可以在机器人的代码中使用 console.log(ctx) 命令来打印 context 对象,其中包含聊天 ID。以下是如何构建代码以创建机器人并获取必要输入的示例:

const TELEGRAM_BOT_TOKEN = "Your Token"
const bot = new Telegraf(TELEGRAM_BOT_TOKEN)
const msgId = 'input your chat id';
bot.on('text', async(ctx) => {
  const Response = console.log(ctx)

代码!!!!

一旦机器人运行并且 Token 合约地址已输入,它就会等待流动性池启动。一旦池启动,机器人就会自动购买。然后,它等待流动性池 Token 的价格上涨 MIN_PROFIT_PERCENTAGE 变量。一旦达到利润阈值,机器人就会使用“/sell”命令出售流动性池 Token。在这个机器人中,我们使用 raydium swap sdk 来促进我们的 swap 指令,就像 uniswap 对 Ethereum 一样,请查看如何使用 raydium sdk 在 Solana 上进行 swap 这里

为了构建我们的 Telegram 交易机器人,我们首先需要克隆代码仓库并安装所有依赖项。以下是我们遵循的步骤:

克隆代码仓库:我们使用以下命令从 GitHub 克隆了代码仓库:

$ git clone https://github.com/Shyft-to/solana-defi.git
cd telegram-trading-bot
npm install

首先我们需要进行正确的导入

import { id } from 'ethers';
import {Telegraf, TelegramError} from 'telegraf'
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import { gql, GraphQLClient } from "graphql-request";
import * as anchor from "@project-serum/anchor";
import {Buy,Sell} from "./swapAmm"
import {
  Metadata,
  PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID,
} from "@metaplex-foundation/mpl-token-metadata";

import { Wallet } from '@project-serum/anchor';
import { quote } from 'telegraf/typings/format';

为了构建我们的 Telegram 交易机器人,我们需要从 Solana 区块链获取某些链上数据。具体来说,我们需要获取以下信息:

  1. BaseMint: 代表交易对中基础 Token 的 Solana Token 地址。
  2. LpMint: 代表流动性池 Token 的 Solana Token 地址。
  3. BaseVault: 代表基础 Token 金库的 Solana 帐户地址。
  4. PoolOpenTime: 创建流动性池的时间戳。
  5. LpVault: 代表流动性池 Token 金库的 Solana 帐户地址。
  6. QuoteVault: 代表报价 Token 金库的 Solana 帐户地址。
  7. Owner: 拥有流动性池的 Solana 帐户地址。
  8. Pubkey: 代表流动性池地址的 Solana 公钥。

为了获取所需的数据,我们将使用 Shyft 的 GraphQL API,它为开发者提供了显着的优势。GraphQL 是一种强大的查询语言,使开发者能够以灵活且高效的方式从 API 请求特定数据。我们使用 Shyft 的 GraphQL API 的主要原因之一是它们提供对 SuperIndexer 的访问,SuperIndexer 是一种以亚秒级延迟索引所有更改的功能。这意味着数据会近乎实时地更新,确保我们检索到的信息始终是最新的和准确的。此外,Shyft 的 GraphQL API 提供了一个直观且易于使用的查询界面,使开发者可以快速轻松地检索他们需要的数据。使用 GraphQL,你可以准确指定要检索的数据,从而减少返回的不必要数据的量,并提高应用程序的整体性能。这是一个 GraphQL 查询的示例,该查询使用 Shyft 的 GraphQL API 获取我们需要的信息:

async function queryLpMintInfo(token: string, sol: string) {
  // See how we are only querying what we need
  // 看看我们是如何只查询我们需要的
  const query = gql`
    query MyQuery ($where: Raydium_LiquidityPoolv4_bool_exp) {
  Raydium_LiquidityPoolv4(
    where: $where
  ) {
    baseMint
    lpMint
    lpReserve
    baseVault
    poolOpenTime
    lpVault
    quoteMint
    quoteVault
    baseDecimal
    owner
    pubkey
  }
}`;
const variables = {
  where: {
    baseMint: {
      _eq: token,
    },
    quoteMint: {
      _eq: sol,
    },
  },
};
  return await graphQLClient.request(query, variables);
}

为了使用我们刚刚创建的 GraphQL 客户端请求,我们需要在函数中调用它。这是一个我们如何做到这一点的例子:

async function info(pair) {
  const SOLANA : string = 'So11111111111111111111111111111111111111112';
  let vault;
  let check;
  //  for(const trade of array){
  //   pair = trade;
  //  }
   if(pair == undefined || pair == null){
    console.log(`it is null`)
    }else{
    const mint = new anchor.web3.PublicKey(
     pair
    );

  const [metadataPDA] =  anchor.web3.PublicKey.findProgramAddressSync(
    [\
      Buffer.from("metadata"),\
      TOKEN_METADATA_PROGRAM_ID.toBuffer(),\
      mint.toBuffer(),\
    ],
    TOKEN_METADATA_PROGRAM_ID
  );
  const accInfo = await connection.getAccountInfo(metadataPDA);
  const metadata = Metadata.deserialize(accInfo.data, 0);
  const tokenName = metadata[0].data.name;
  const tokenSym = metadata[0].data.symbol;
  const data:any = await queryLpMintInfo(pair,SOLANA);

   const info = data.Raydium_LiquidityPoolv4[0];
   if(info == null){
    return null
   }else{
   let ownerBalance;
   const openTime = info.poolOpenTime;
   const startTime = new Date(openTime * 1000);
   const token : String = info.baseMint
   const tokenVault : String = info.baseVault
   const solVault: String = info.quoteVault;

   const lp = info.pubkey
   const decimal = info.baseDecimal;
  // const qvault = info.quoteVault;
   const owner = metadata[0].updateAuthority;
   const lpReserve = info.lpReserve;
   const ownerInfo = await connection.getAccountInfo(new PublicKey(owner))
   if(ownerInfo == null){
    ownerBalance = "Renounced"
   }else{
   ownerBalance = await ownerInfo.lamports/1000000000;
   }

   const tokenAddress = new PublicKey(solVault)

    vault = solVault
    check =  await connection.getTokenAccountBalance(
    tokenAddress
  )
   const vaultBalance = await check.value.uiAmount;
  //  const successful =  await orderBuys(msUntilTarget,token.toString(),lp.toString(),Number(decimal))
   return {
    tokenName,
    tokenSym,
     lp,
     vaultBalance,
     startTime,
     token,
     decimal,
     vault,
     owner,
   //  successful,
     ownerBalance
   }
  }
   }
  }

=> 在此代码中,我们正在发出 GraphQL 客户端请求,以获取有关一对 Token 的各种数据点,包括池打开时间、池密钥、小数、金库、我们的流动性提供者 (LP) Token 余额和所有者的 Token 余额。我们的机器人旨在等待特定的合约地址启动后再进行购买,这涉及重复一些代码。具体来说,我们使用一个循环来定期检查合约地址是否已启动,如果是,我们将发出 GraphQL 客户端请求以获取必要的数据并根据该数据执行某些操作。这是一个我们如何构建代码以处理此重复的示例:

    console.log("trade : " + trades[0])
           let interval = setInterval(async() => {
              tokenInfo = await info(trades[0])
              console.log(`Searching for ${trades[0]}`)
               if(tokenInfo != null){
                  console.log(`Search over`);
                 tInfo = false;
                 clearInterval(interval)
                 console.log(`${tokenInfo.tokenName} Launched!!`)
                 ctx.reply(
                  `  🪙 ${tokenInfo.tokenName} Token Info

                  Name:  ${tokenInfo.tokenName}

                  Symbol:  ${tokenInfo.tokenSym}

                  Pair Token : SOLANA

                  Pair: ${tokenInfo.lp}

                  Token: ${tokenInfo.token}

                  Vault: ${tokenInfo.vault}

                  Sol Bal: ${Number(tokenInfo.vaultBalance).toFixed(2)} Sol

                  Decimal: ${tokenInfo.decimal}

                  OpenTime: ${tokenInfo.startTime}

                  👨🏻‍💻 Owner Info

                  Address: ${tokenInfo.owner}

                  Balance: ${Number(tokenInfo.ownerBalance).toFixed(2)} SOL
                  `
                 )

为了运行我们的 Telegram 交易机器人,我们需要输入必要的键值,包括我们的 RPC API 密钥和私钥。以下是我们如何操作的:

为了运行我们的 Telegram 交易机器人,我们需要输入必要的键值,包括我们的 RPC API 密钥和私钥。以下是我们如何操作的:

  1. 设置你的 Solana 钱包:在使用机器人之前,你需要设置一个 Solana 钱包并用一些 SOL Token 为其注资。你可以使用像 Phantom 或 Sollet 这样的钱包来做到这一点。
  2. 获取你的私钥:设置好钱包后,你需要获取你的私钥。这是一个允许你在 Solana 区块链上签署交易的密钥。你可以在你的钱包设置中找到你的私钥。
  3. 获取你的 Shyft API 密钥:要使用 Shyft 的 GraphQL API,你需要获取一个 API 密钥。你可以通过在 Shyft 网站上创建一个帐户并在仪表板中生成一个新的 API 密钥来获取 API 密钥。
  4. 输入你的密钥:获得你的私钥和 ShyftAPI 密钥后,你需要将它们输入到机器人的配置文件中。具体来说,你需要将你的私钥输入到 index.tsswap.ts 文件中,并将你的 Shyft API 密钥输入到 build-bundlesend-bundle 脚本中。
const privateKey = new Uint8Array([\
  //your private key
  //你的私钥
]);
export const rpc_https_url = "https://rpc.shyft.to?api_key=your api key";

结论

恭喜!你已经使用 Shyft 和 Jito 构建了一个 Telegram 交易机器人。本指南为你提供了在 Solana 上开始构建的基础。如需进一步帮助,请加入我们的 Discord 频道或在 Twitter 上关注我以获取更新。在做出任何投资决定之前,请务必进行自己的研究并咨询财务顾问。祝你构建愉快!

加入 Shyft Discord 服务器 并在 Twitter 上关注我们。

资源

关于我: 我是 Mona Paul,一位区块链开发者,拥有 3-4 年的 Solana 和 EVM(Ethereum、Base、Avalanche)经验。在 Solana 上工作时,由于缺乏文档,我遇到了构建项目的困难。但是,通过使用 Shyft,我能够成功完成其中的大部分。我希望本文能指导你朝着正确的方向轻松进行 Solana 开发。联系我:https://twitter.com/Ahyammona

  • 原文链接: blogs.shyft.to/how-to-bu...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Shyft_to
Shyft_to
在 Solana上更快更智能地构建,使用Shyft的SuperIndexer、gRPC、RPC、API和SDK