Если речь не о кормушке, то мне не интересно ✋!
- Откуда взялась кормушка
- Как ее выносить (подробное объяснение)
- Нюансы кормушки
- TL;DR(кому лень все читать, сразу сюда)
- Код(софт для автоматизации)
- Итоги
- Автор
- Дисклеймер
1. Начало без воды.
На солане появилась мета "ponzi", ее запустил щиток $IMG(znv3FZt2HFAvzYf5LxzVyryh3mBXWuTRRng25gEZAjh), который рассылал всем холдерам солану. Брал он ее с комиссий с любых транзакций щитка.
щиток продали ---> 10% от суммы в щитке упало фаундеру на кош ---> фаундер встаканил ---> соль с профита разослал холдерам
Появился щиток $ATM(8QhSMvYfXome11VgxFMD75hNbGQXW5QTnjA8khENkY2c), суть та же, но вместо соланы он рассылал $USDC(прожженные солана девы уже поняли в чем прикол), тут и начинается операция "Кормушка"!
Переходим к выносу кормушки!
Любой SPL токен хранится на ATA(associated token account(*далее токен аккаунт)), который ты арендуешь у system program за ~0.002 SOL, и когда он остается пустым, ты можешь обратно забрать себе эти соланы, если ты им не пользуешься. Именно это вы и делаете на claimyoursol или sol-incinerator, когда чистите кош(закрываете токен аккаунты).
Солана блокчейн устроен так, что когда отправляешь кому то любой SPL токен, за аренду токен аккаунта для этого токена платишь именно ты - отправитель.
https://solscan.io/tx/2zWBkRXbFhKrggkspyveCMdUHfRK76sxDTw3Uu3tP6iiM48s4ZuDvEfxcnZmPQy1NPcTjKC5S6buS2DwaZiM8JEu
бот открывает мне ATA и присылает мне туда $USDC ---> я вывожу $USDC на стэш-кош, закрываю ATA и получаю 0.002SOL ---> бот снова открывает мне ATA и присылает мне туда $USDC
Делаю 50 кошей и за круг фаундер тратит 0.1SOL на меня, которые в итоге оказываются у меня в кармане.
Нюансы перед кодом.
Мы посчитали, что нужно холдить на коше от 2к токенов(~3$ на тот момент), что бы получат ревшару в $USDC(приходили копейки ~0.0003 $USDC), значит 1 кош окупался за 10 кругов(открывает нам токен аккаунт за 30 центов, которые мы забираем себе, 3 / 0,3 = 10). В пике, кормушка рассылала $USDC(а значит и открывала токен аккаунты) раз в 10 минут, но продержалось это не долго, затем раз в 15 минут, ну а когда темка совсем начала умирать - раз в час.
Так же у кормушки могла закончиться соль на коше и она переставала работать на несколько часов, пока фаундер ее не пополнял. Он не догадывался почему так происходит и докидывал 2 раза в день стабильно по 50-100SOL на "комиссии".
TL;DR
Кормушка присылает ревшару в виде $USDC, открывая токен аккаунт если его нет(0.002SOL, скрин 1) ---> отсылаю $USDC на стэш-кош и закрываю токен аккаунт, забирая эти 0.002SOL себе(скрин 2).
Повторяя так много кругов на много аккаунтов.
Код для автоматизации(ts).
Как только я нашел кормушку, мною было сразу принято решение делать фермочку, масштабировать и автоматизировать ее!
1. Дисперсером раскидываем соль на коши -
const DESTINATION_WALLETS = [
new PublicKey(''),
new PublicKey(''),
new PublicKey(''),
// Добавьте столько адресов, сколько нужно
];
// Количество SOL для отправки на каждый кошелек
const AMOUNT_PER_WALLET = 0.01;
async function disperseSOL() {
const lamportsPerWallet = AMOUNT_PER_WALLET * LAMPORTS_PER_SOL;
// Создаем массив инструкций для всех переводов
const transferInstructions = DESTINATION_WALLETS.map(destinationWallet =>
SystemProgram.transfer({
fromPubkey: SOURCE_WALLET.publicKey,
toPubkey: destinationWallet,
lamports: lamportsPerWallet,
})
);
try {
// Получаем последний blockhash
const { blockhash } = await SOLANA_CONNECTION.getLatestBlockhash('finalized');
// Создаем и подписываем транзу
const messageV0 = new TransactionMessage({
payerKey: SOURCE_WALLET.publicKey,
recentBlockhash: blockhash,
instructions: transferInstructions, //пихаем инструкции в транзу
}).compileToV0Message();
const transaction = new VersionedTransaction(messageV0);
transaction.sign([SOURCE_WALLET]);
// Отправляем транзу
const txid = await SOLANA_CONNECTION.sendTransaction(transaction);
console.log(`✅ - Transaction sent: ${txid}`);2. Покупаем на кошах токен(не мой код) -
async buyTokenWithSol(
wallet: Keypair,
tokenMint: string,
amountInSol: number,
slippageBps: number = SWAP_SETTINGS.DEFAULT_SLIPPAGE
): Promise<SwapResult> {
try {
// Получаем котировку
const quote = await this.getSwapQuote(
TOKEN_ADDRESSES.SOL,
tokenMint,
amountInSol * LAMPORTS_PER_SOL,
slippageBps
);
// Получаем транзакцию для свапа
const { swapTransaction } = await jupiterApi.swapPost({
swapRequest: {
quoteResponse: quote,
userPublicKey: wallet.publicKey.toString(),
prioritizationFeeLamports: {
priorityLevelWithMaxLamports: {
maxLamports: FEES.TRANSACTION * LAMPORTS_PER_SOL,
priorityLevel: 'medium',
},
},
},
});
// Декодируем и отправляем транзакцию
const transaction = VersionedTransaction.deserialize(
Buffer.from(swapTransaction, 'base64')
);
transaction.sign([wallet]);
const signature =
await this.connection.sendTransaction(transaction);3. Сердце софта - отправляем $USDC на стэш-кош и закрывает токен аккаунт, забирая 0.002SOL себе -
const account = await getAssociatedTokenAddress(
new PublicKey(MINT_ADDRESS),
WALLET.publicKey
);
const accountInfo = await SOLANA_CONNECTION.getAccountInfo(account);
if (!accountInfo) {
boxContent += `🟡 - Token account does not exist. Skipping Wallet ${walletNumber}.\n`;
const box = createBox(boxContent);
console.log(box);
logToFile(box);
continue;
}
const tokenAccountBalance = await SOLANA_CONNECTION.getTokenAccountBalance(account);
const transferAmount = Number(tokenAccountBalance.value.amount);
boxContent += `Attempting to transfer ${transferAmount / (10 ** MINT_DECIMALS)}($USDC) tokens from Wallet: ${WALLET.publicKey.toString()}\n`;
const recipientATA = await getAssociatedTokenAddress(
new PublicKey(MINT_ADDRESS),
RECIPIENT_WALLET
);
// Трансфер на стэш-кош
const transferIx = createTransferCheckedInstruction(
account,
new PublicKey(MINT_ADDRESS),
recipientATA,
WALLET.publicKey,
transferAmount,
MINT_DECIMALS
);
// Закрываем токен аккаунт
const closeIx = createCloseAccountInstruction(
account,
WALLET.publicKey,
WALLET.publicKey,
[],
TOKEN_PROGRAM_ID
);
// Устанавливаем приоритет транзакции
const computeUnitPriceIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFee });
const { blockhash } = await SOLANA_CONNECTION.getLatestBlockhash('finalized');
// Создание транзы
const messageV0 = new TransactionMessage({
payerKey: WALLET.publicKey,
recentBlockhash: blockhash,
instructions: [computeUnitPriceIx, transferIx, closeIx]
}).compileToV0Message();
const transaction = new VersionedTransaction(messageV0);
transaction.sign([WALLET]);
// Отправка транзы
const txid = await SOLANA_CONNECTION.sendTransaction(transaction);4. Выход из темки -
4.1 После того как продадим все токены(разверните 3ий пункт), закроем токен аккаунт этого токена -
const account = await getAssociatedTokenAddress( new PublicKey(MINT_ADDRESS), WALLET.publicKey, undefined, TOKEN_PROGRAM // Используем TOKEN_2022_PROGRAM_ID ); const closeIx = createCloseAccountInstruction( account, WALLET.publicKey, WALLET.publicKey, [], // No multisig (пустой массив) TOKEN_PROGRAM // Используем TOKEN_2022_PROGRAM_ID );
4.2 Соберем профиты со всех кошей -
for (let i = 0; i < WALLETS.length; i++) {
const WALLET = WALLETS[i];
const walletNumber = i + 1;
// Получаем баланс кошелька
const balance = await SOLANA_CONNECTION.getBalance(WALLET.publicKey);
const solBalance = balance / LAMPORTS_PER_SOL;
if (solBalance > 0) {
// Создаем транзакцию для перевода SOL
const transferIx = SystemProgram.transfer({
fromPubkey: WALLET.publicKey,
toPubkey: DESTINATION_WALLET,
lamports: balance - 5000, // на мин комсу комиссии
});
// Получаем последний blockhash
const { blockhash } = await SOLANA_CONNECTION.getLatestBlockhash('finalized');
// Создаем и подписываем транзакцию
const messageV0 = new TransactionMessage({
payerKey: WALLET.publicKey,
recentBlockhash: blockhash,
instructions: [transferIx],
}).compileToV0Message();
const transaction = new VersionedTransaction(messageV0);
transaction.sign([WALLET]);
// Отправляем транзакцию
const txid = await SOLANA_CONNECTION.sendTransaction(transaction);
}
Итоги.
На все Логово+ у нас было 210 кошельков, со всеми погрешностями и нюансами, за ~4дня было сдрейнено с кормушки ~60SOL, что по текущим(SOL = 135$) ~8100$! Учите блокчейн, учите кодинг и не надо будет тратить нервы смотря за графиком, будете зарабатывать поиском уязвимостей таких пирамид! Да, я по сути хакнул фаундера и выкачивал у него соль...
Автор.
Все придумал, закодил, написал статью - t.me/AXAXAXAXAXAXAXAXAXAXAXXAXAXAA, кстати там же был шилл этой темки пока она работала)
Специально для t.me/Logovo_DAO
Дисклеймер.
Все сказанное выше - вымысел! Автор призывает не повторять увиденное и не призывает к хакингу! Все персонажи вымышленные, а совпадения с реальностью случайны.