如何打造你的 Solana 狙击机器人 (3)💰🚀
你好👋,
在之前的几期中,我解释了创建 Solana Sniper 机器人的基本步骤、编程方法、SPL 代币等等。此外,在编码过程中,我们开发了两个脚本:一个用于将 SOL 从钱包 A 转移到钱包 B,另一个用于在相同的钱包之间转移 SPL 代币。
在本期中,我将探索 Solana DEX 平台,深入探讨它们与 Solana Sniper 机器人的关系。我还将介绍一个实际的编码示例,演示如何在 Solana 区块链上交换代币 A 和代币 B 的脚本。
1. Solana DEX
Solana DEX(去中心化交易所)是建立在 Solana 区块链上的平台,用户无需中心化中介即可直接相互交易加密货币。
1.1 DEX基本概念
-
去中心化交易所(DEX)
- DEX 是一个允许用户直接相互交易加密货币的平台,而无需依赖中心化中介(如传统交易所)。
- 交易通过智能合约执行,用户通过非托管钱包控制自己的资金。
-
自动做市商(AMM)
- AMM 是一种用流动性池取代传统订单簿的 DEX 。
- 用户(称为流动性提供者)将代币对存入池中,并根据数学公式(例如,x*y=k)针对这些池执行交易。
- 例如:Raydium、Orca。
-
流动资金池
- 流动性池是用户提供的资金集合,用于促进基于 AMM 的 DEX 上的交易。
- 每个池子由两种代币组成(例如SOL/USDC),代币的价格由池子里代币的比例决定。
- 流动性提供者从其池中发生的交易中赚取费用。
-
流动性提供者(LP)
- 将代币存入流动性池以实现交易的用户。
- 作为回报,他们将获得矿池产生的部分交易费。
- 当池中的代币价格发生大幅变化时,LP 就会面临无常损失。
-
无常损失
- 流动性池中代币价格发生变化时流动性提供者面临的风险。
- 出现这种情况的原因是 AMM 算法重新平衡了池子以维持x*y=k公式,这可能导致 LP 持有更多贬值资产,而持有更少升值资产。
-
订单簿与AMM
- 订单簿:买家和卖家下订单并根据价格和数量匹配交易的传统系统(例如 Solana 上的 Serum)。
- AMM:一种使用数学公式针对流动性池执行交易的系统,无需订单簿。
-
滑移
- 交易的预期价格与交易执行的实际价格之间的差额。
- 滑点在低流动性池中更为常见,可以通过在具有深度流动性的 DEX 上进行交易来最大限度地减少滑点。
-
收益农业
- 用户向 DEX 提供流动性并获得奖励(通常以额外代币的形式)的过程。
- 收益耕作激励用户为 DEX 的流动性做出贡献。
-
代币交换
- 在 DEX 上将一个代币兑换成另一个代币的过程。
- 掉期是针对流动性池(在 AMM 中)或订单簿(在传统 DEX 中)执行的。
-
智能合约
- 区块链上的自执行程序,可自动执行 DEX 上的交易和其他功能。
- Solana 的智能合约以其速度快、成本低而闻名,使其成为 DEX 的理想选择。
-
非托管钱包
- 用户可完全控制其私钥和资金的钱包。
- Solana DEX 与Phantom和Solflare等非托管钱包集成。
-
燃气费
- 在区块链上执行交易的成本。
- Solana 的 gas 费用极低(通常低于 0.01 美元),这使得在 DEX 上进行交易具有成本效益。
-
跨链交易
- 能够在单个 DEX 上交易来自不同区块链(例如以太坊、币安智能链)的代币。
- 这通常是通过桥梁或包装令牌来实现的。
-
地毯拉手
- 这是一种骗局,开发商在吸引流动性后放弃项目,给投资者留下毫无价值的代币。
- 在去中心化的生态系统中,地毯拉扯是一种风险,尤其是对于低上限代币而言。
-
集中流动性
- 该功能允许流动性提供者在特定价格范围内分配资金,而不是在整个价格范围内分配资金。
- 这提高了资本效率并可以为 LP 带来更高的回报。
- 例如:Orca 的漩涡。
-
聚合器
- 平台结合了来自多个 DEX 的流动性,为用户的交易提供最佳价格。
- 例如:索拉纳岛上的木星。
-
抢先交易
- 交易者或机器人利用未决交易的预先知识来以牺牲其他用户利益为代价获利的做法。
- Solana 的高速使得抢先交易变得更具挑战性,但并非不可能。
-
模因币
- 受网络模因或笑话启发的加密货币通常没什么用处。
- 许多 memecoin 在 Solana DEX 上交易,例如 Raydium 和 Orca。
-
地毯检查
- 交易员在投资前进行尽职调查,以评估代币或项目的合法性。
- 这包括检查团队、代币经济学和流动性池的详细信息。
1.2 Solana DEX 的主要特点
Solana 以其高吞吐量、低交易成本和快速确认时间而闻名,这使其成为构建去中心化金融 (DeFi) 应用程序(包括 DEX)的有吸引力的区块链。
-
高速、低费用:
- Solana 区块链每秒可处理高达65,000 笔交易 (TPS) ,远高于以太坊等许多其他区块链。如此高的吞吐量使 Solana 上的 DEX 能够提供近乎即时的交易执行。
- Solana 上的交易费用极低,通常低于0.01 美元,这使得用户频繁交易具有成本效益。
-
去中心化:与所有 DEX 一样,Solana DEX 的运行无需中心化授权。用户通过非托管钱包(例如 Phantom、Solflare)控制自己的资金,并通过智能合约执行交易。
-
自动做市商 (AMM):许多 Solana DEX 采用 AMM 模型,其中流动性池取代了传统的订单簿。用户向这些池子提供流动性并赚取手续费,而交易者可以直接从池子中兑换代币。
-
跨链兼容性:一些 Solana DEX 支持跨链交易,允许用户通过桥接器或包装代币交易来自其他区块链(例如以太坊、币安智能链)的资产。
-
用户友好界面:Solana DEX 通常具有直观的界面,使初学者和经验丰富的交易者都可以轻松导航和执行交易。
1.3 热门 Solana DEX
以下是一些最受欢迎的基于 Solana 的 DEX:
1.3.1 钇
-
概述:Raydium 是 Solana 上最受欢迎的 DEX 之一。它结合了传统 DEX 的功能和对 Serum 订单簿的访问权限,从而实现更快、更高效的交易。
-
主要特点:
- 自动做市商(AMM)和订单簿集成。
- 用于收益农业的流动资金池。
- 支持基于 Solana 的代币(SPL 代币)的交易。
- 通过 RAY 代币进行质押和治理。
1.3.2 虎鲸
-
概述:Orca 是 Solana 上一个用户友好的 DEX,注重简洁性和易用性。它以其简洁的界面和高效的交易体验而闻名。
-
主要特点:
- 基于 AMM 的交易,费用低廉。
- “漩涡”代表流动性集中。
- 定价公平,滑点低。
- ORCA 代币用于治理和质押。
1.3.3 血清
-
概述:Serum 是一个基于 Solana 构建的去中心化交易所,采用链上订单簿模型,以高速、低成本的交易而闻名。
-
主要特点:
- 链上订单簿,实现透明交易。
- 与其他区块链的跨链兼容性。
- 与其他基于 Solana 的 DEX(如 Raydium)集成。
- SRM 代币用于费用折扣和治理。
1.3.4 芒果市场
-
概述:Mango Markets 是 Solana 上的去中心化交易平台,支持现货交易、保证金交易和借贷。
-
主要特点:
- 杠杆交易,保证金高达 5 倍。
- 以有竞争力的利率进行借贷。
- 用于治理的 MNGO 代币。
1.3.5 军刀
-
概述:Saber 是一个去中心化交易所,专门针对稳定币和资产组合交易进行了优化。其设计旨在实现低滑点掉期。
-
主要特点:
- 关注稳定币对和挂钩资产。
- 费用低、滑点低的 AMM。
- SBR 代币用于治理和奖励。
1.4 Jupiter 聚合器和 Pump.fun
Jupiter Aggregator 和 Pump.fun 是 Solana 生态系统中的两个创新平台,它们在去中心化金融 (DeFi) 和 meme 币领域各自服务于不同的目的。
1.4.1 Jupiter 聚合器
Jupiter Aggregator 是 Solana 区块链上领先的流动性聚合器。它旨在通过在多个去中心化交易所 (DEX) 之间路由交易来优化交易,从而为用户提供最优价格和最低滑点。
主要特点:
-
最佳价格执行:
- Jupiter 聚合了来自各种 Solana DEX(例如 Raydium、Orca、Serum)的流动性,以确保用户获得最佳的交易价格。
- 它将交易分散到多个池中,以最大限度地减少滑点,特别是对于大额订单。
-
用户友好界面:该平台提供简单直观的界面,使初学者和高级用户都能轻松高效地进行交易。
-
广泛的代币支持:Jupiter 支持大量基于 Solana 的代币(SPL 代币),包括流行和新推出的资产。
-
高级工具:
- 限价订单、美元成本平均法 (DCA) 和跨链交换等功能增强了交易体验。
- 开发人员还可以将 Jupiter 的 API 集成到他们的应用程序中,实现无缝交易。
-
社区驱动:Jupiter 非常注重社区,并由其原生代币 JUP 管理,用于治理和质押。
-
低费用:通过利用 Solana 的低交易成本,Jupiter 确保用户为其交易支付最低的费用。
用例:
-
零售交易者:获得交易 Solana 代币的最佳价格和低滑点。
-
开发人员:将 Jupiter 的流动性聚合集成到 DeFi 应用程序中。
-
机构:以最小的市场影响执行大额交易。
网址: https://jup.ag
1.4.2 Pump.fun
Pump.fun 是 Solana 上一个独特的平台,允许用户轻松创建和交易 meme 币。它因其简洁易用和以社区为主导的代币发行方式而广受欢迎。
主要特点:
-
轻松创建代币:
- 用户无需任何编码知识,只需几分钟即可创建自己的 meme 币。
- 该平台负责处理技术方面的问题,例如部署代币合约和建立流动性池。
-
联合曲线机制:
- Pump.fun 使用联合曲线模型为新创建的代币提供流动性。
- 随着越来越多的人购买代币,价格沿着曲线上涨,从而形成公平透明的定价机制。
-
社区参与:
- Meme 币依靠社区支持而蓬勃发展,而 Pump.fun 则为创作者提供了推广其代币和吸引追随者的工具。
- 社交功能允许用户分享和讨论新的代币。
-
进入门槛低:
- 在 Pump.fun 上创建代币的成本很低,因此广大用户都可以使用。
- 该平台从每笔交易中收取少量费用,用于维持生态系统。
-
交易和投机:用户可以直接在平台上交易新推出的 meme 币,这通常会带来高波动性和投机机会。
-
与 Raydium 集成:一旦代币达到一定的市值,它就会自动在主要的 Solana DEX Raydium 上上市,从而提供额外的流动性和曝光率。
用例:
-
Meme Coin 创造者:以最小的努力推出并推广自己的代币。
-
交易者:对新创建的模因币进行投机以获取潜在利润。
-
社区:围绕共同兴趣或模因建立和支持代币。
网站: https://pump.fun
1.5 狙击机器人 vs. Solana DEX
狙击机器人和 Solana DEX 在去中心化金融 (DeFi) 生态系统中有着独特的关系。狙击机器人是一种自动化工具,旨在快速高效地执行交易,通常会在 DEX 上新上线的代币一经推出就对其进行攻击。
狙击机器人如何在 Solana DEX 上工作
Solana 的高吞吐量(每秒高达 65,000 笔交易)和低交易费用使其成为狙击机器人的理想环境。
-
监控新代币的发布:
- 狙击机器人扫描 Solana DEX(例如 Raydium、Orca、Serum)以查找新上市的代币。
- 他们分析流动性池创建和代币发行事件以发现机会。
-
快速执行:
- 一旦检测到新的代币,机器人就会快速执行购买订单,以最低的价格获取代币。
- Solana 的快速阻塞时间(400 毫秒)允许机器人几乎立即采取行动。
-
流动资金池分析:
- 机器人监控流动性池以识别流动性低的代币,这些代币更容易受到价格操纵。
- 他们可以利用这些条件以低价购买代币,然后以更高的价格出售。
-
套利:
- 狙击机器人(套利机器人)可以识别多个 Solana DEX 之间同一代币的价格差异。
- 他们在较便宜的 DEX 上购买代币,然后在较昂贵的 DEX 上出售,从价格差异中获利。
-
自动销售:
- 可以对机器人进行编程,使其在代币达到特定价格目标或市场条件发生变化时出售代币。
- 这使得交易者能够锁定利润或减少损失。
狙击机器人与 Solana DEX 之间的关系
-
增强流动性:
- 狙击机器人通过积极交易和参与流动性池来增加 Solana DEX 的流动性。
- 然而,他们的活动有时会导致短期价格波动。
-
市场效率:通过利用套利机会,狙击机器人帮助协调不同 DEX 之间的价格,从而提高市场效率。
-
竞争优势:
- 狙击机器人为用户在交易中提供了显著的优势,尤其是对于新推出的代币或低流动性资产。
- 这可能会给不使用此类工具的零售交易商带来不公平的竞争环境。
-
代币发行:
- 在 Pump.fun 等平台上,狙击机器人经常被用来购买新创建的 meme 币。
- 这可能会导致价格快速上涨,随后由于机器人获利而出现抛售。
-
风险与挑战:
- 狙击机器人可以助长市场操纵,例如哄抬股价和抛售行为。
- 它们还可能增加零售交易商的竞争,使其更难以优惠价格购买代币。
2.如何兑换代币 A 和代币 B
Solana DEX 上的代币兑换
Solana DEX 上的代币兑换涉及将一种代币兑换成另一种。例如,您可以将 SOL(Solana 的原生代币)兑换成 USDC(稳定币)或任何其他 SPL 代币(Solana 程序库代币)。此过程由 DEX 上的智能合约和流动性池促成。
代币买卖作为代币交换
当您在 Solana DEX 上“购买”或“出售”代币时,您实际上是在执行代币交换:
-
购买代币:如果您想“购买”代币,您需要将基础代币(如 SOL 或 USDC)换成所需的代币。
-
出售代币:如果您想“出售”代币,您可以将持有的代币换成另一个代币(如 SOL 或 USDC)。
示例
假设您想在 Solana DEX 上购买 RAY(Raydium 的代币):
-
您从钱包中的 SOL 开始。
-
您在 DEX 上发起交换,将 SOL 交换为 RAY。
-
DEX 的智能合约将您的交易路由到流动性池(例如,SOL/RAY 池),并将 RAY 交给您以换取 SOL。
在这种情况下,“购买” RAY 与执行从 SOL 到 RAY 的代币交换相同。
关键点
-
流动性池:代币兑换依赖于流动性池,用户在其中提供代币以进行交易。兑换价格由池中代币的比例决定。
-
滑点:由于市场活动和资金池规模,您获得的掉期价格可能会略有不同。
-
费用:大多数 DEX 对掉期收取少量费用,该费用分配给流动性提供者。
让我们开发一个脚本来购买/出售 SPL 代币(在这种情况下,代币 A 是 SOL,代币 B 是您要购买或出售的 SPL 代币)。
步骤1:设置环境
- 为了方便起见,我们使用 VS Code 开发自己的代码。假设你已经安装了 Node.js(18.0 或更高版本)。
- 另外,我们需要一个装有 SOL 的钱包。要买卖 SPL 代币,您需要钱包的私钥。
- 使用初始化您的项目
npm init
。 - 使用此命令安装依赖项:
npm install typescript ts-node @project-serum/anchor @solana/web3.js @solana/spl-token axios dotenv bs58
- 检查
package.json
文件并编辑脚本如下:
{
"name": "token-swap",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "ts-node index.ts",
"build": "tsc",
"clean": "tsc --build --clean",
"dev": "tsc && ts-node ./dist/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"@project-serum/anchor": "^0.26.0",
"@solana/spl-token": "^0.4.12",
"@solana/web3.js": "^1.98.0",
"axios": "^1.7.9",
"bs58": "^6.0.0",
"dotenv": "^16.4.7",
"ts-node": "^10.9.2",
"typescript": "^5.7.3"
}
}
tsc --init
使用命令安装 Typescript 环境。tsconfig.json
像这样编辑文件:
{
"compilerOptions": {
"target": "es2016",
"module": "commonjs",
"outDir": "./dist",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true
}
}
- .env 文件
WALLET_PRIVATE_KEY=""
RPC_URL=""
第 2 步:主要代码(2 个文件)
index.ts
文件此代码使用您钱包中的 SOL 购买/出售 SPL 代币。
import {
Connection,
Keypair,
PublicKey,
LAMPORTS_PER_SOL,
VersionedTransaction,
} from "@solana/web3.js";
import { NATIVE_MINT } from "@solana/spl-token";
import bs58 from "bs58";
import dotenv from "dotenv";
import { Wallet } from "@project-serum/anchor";
import { getSwapInfo, getSwapTransaction } from "./jupiterService";
dotenv.config();
const WALLET_PRIVATE_KEY = process.env.WALLET_PRIVATE_KEY as string;
const RPC_URL = process.env.RPC_URL as string;
const wallet = Keypair.fromSecretKey(bs58.decode(WALLET_PRIVATE_KEY));
const anchorWallet = new Wallet(wallet);
async function SplTokenSwap(
tokenAddress: string,
amount: number,
isBuySell: string
) {
const connection = new Connection(RPC_URL, "confirmed");
const tokenDecimals = await getTokenDecimals(connection, tokenAddress);
const slippageBps = parseInt(process.env.SLIPPAGEBPS || "") || 50;
let swapInfo: any;
if (isBuySell == "buy") {
swapInfo = await getSwapInfo(
NATIVE_MINT.toBase58(),
tokenAddress,
amount * LAMPORTS_PER_SOL,
slippageBps
);
} else {
// sell
swapInfo = await getSwapInfo(
tokenAddress,
NATIVE_MINT.toBase58(),
amount * Math.pow(10, tokenDecimals),
slippageBps
);
}
const swapTransaction = await getSwapTransaction(swapInfo, anchorWallet);
const swapTransactionBuf = Buffer.from(swapTransaction, "base64");
const latestBlockHash = await connection.getLatestBlockhash();
const versionedTransaction =
VersionedTransaction.deserialize(swapTransactionBuf);
versionedTransaction.message.recentBlockhash = latestBlockHash.blockhash;
versionedTransaction.sign([anchorWallet.payer]);
try {
const transactionSignature = await connection.sendTransaction(
versionedTransaction,
{ maxRetries: 20 }
);
const confirmation = await connection.confirmTransaction(
{
signature: transactionSignature,
blockhash: latestBlockHash.blockhash,
lastValidBlockHeight: latestBlockHash.lastValidBlockHeight,
},
"confirmed"
);
if (confirmation.value.err) {
throw new Error("Transaction not confirmed");
}
console.log(
"Transaction Signature: ",
`https://solscan.io/tx/${transactionSignature}`
);
} catch (error) {
console.error("Error occurred during swap:", error);
}
}
async function getTokenDecimals(connection: Connection, tokenAddress: string) {
const mintInfo = await connection.getParsedAccountInfo(
new PublicKey(tokenAddress)
);
if (!mintInfo) {
throw new Error("Token account not found");
}
const decimals = (mintInfo.value?.data as any).parsed.info.decimals;
return decimals;
}
const TOKEN_ADDRESS = "4aR3jtFKWuYzkNE27WG4V7Jt6DDhwKcc2qjzN5Tkpump";
let amount: number;
amount = 0.0001;
SplTokenSwap(TOKEN_ADDRESS, amount, "buy"); // Buy token
amount = 1000;
SplTokenSwap(TOKEN_ADDRESS, amount, "sell"); // Sell token
jupiterService.ts
文件
import { Wallet } from "@project-serum/anchor";
import axios from "axios";
const JUP_API = "https://api.jup.ag/swap/v1";
export const getSwapInfo = async (tokenA: string, tokenB: string, amount: number, slippageBps: number) => {
const res = await axios.get(`${JUP_API}/quote?inputMint=${tokenA}&outputMint=${tokenB}&amount=${amount}&slippageBps=${slippageBps}`);
const swapinfo = res.data;
return swapinfo;
};
export const getSwapTransaction = async (quoteResponse: any, anchorWallet: Wallet) => {
const swapResponse = await axios.post(`${JUP_API}/swap`, {
quoteResponse,
userPublicKey: anchorWallet.publicKey.toString(),
wrapAndUnwrapSol: true,
prioritizationFeeLamports: 200000, // or custom lamports: 1000
});
return swapResponse.data.swapTransaction
};
步骤 3:运行代码
- 在终端中运行以下命令:
npm run start
- 如果交易成功,您将收到来自 solscan 的交易链接。
3.下一期将会有什么内容?
下一期,我将讲解Telegram Bot的开发。
✅您可以在我的 Github 上查看完整代码:
如果你喜欢我的文章,请在 Github 上关注我。
关注我
❓如果您对这篇文章有任何疑问或意见,请随时联系我。🎯
📧我的联系方式
Gmail : saivietthanh0314@gmail.com
电报