برنامه نویسی

همه را بسوزان! خسته از رفتگرها، سوختن هر بلوک را نظارت و تماشا کنید 🔥

لمسی از جادو در جنگل تاریک بلاک چین.

در حالی که بلاک چین اغلب به عنوان یک میدان جنگ توصیف می شود، MEV یک چالش بزرگتر را نشان می دهد… این یک منطقه تاریک و نامشخص است. ما این قلمرو سایه را بررسی می‌کنیم و یاد می‌گیریم که چگونه با چالش‌های آن در سفر خود به سمت شفافیت و انصاف در معاملات بلاک چین مقابله کنیم.

جادو در جنگل تاریک بلاک چین

اخیراً با یک وضعیت امنیتی چالش برانگیز مواجه شدم. یک خطای غیرمنتظره باعث ضررهای قابل توجهی در یکی از ارزشمندترین جوایز من شد که پس از ساعت‌های اختصاصی در یک هکاتون به دست آوردم. این یادآوری آشکار از اهمیت امنیت در هر پروژه و مسئولیت شخصی در هر زمان بود.

پس از غلبه بر احساس ناامیدی و عصبانیت، متوجه شدم در میان سختی ها فرصتی برای رشد و یادگیری وجود دارد. تصمیم گرفتم با قاطعیت با مشکل مقابله کنم و به دنبال راه حل های نوآورانه باشم.

در طول جستجوی خود برای یافتن پاسخ، به اسکریپت کوچکی برخوردم که قول می داد کلید مقابله با تهدیدات امنیتی باشد. بدون تردید، خود را در فرآیند کدنویسی غرق کردم، با چالش های جدید و یادگیری مفاهیمی که قبلا برایم ناشناخته بود، مواجه شدم. به همین دلیل است که من کمی در مورد مفاهیم MEV و اینکه چگونه بلوک های مانیتورینگ می توانند به ما در سوزاندن آن کمک کنند، یاد گرفتم!!! هر بلوک 🔥.

در مرحله بعد، من برخی از منابعی را که برای ساختن یک سیستم محافظ کوچک برای کسانی که مایلند، در حالی که توکن‌های ERC20 خود را بازیابی نمی‌کنند، به اشتراک می‌گذارم، حداقل برای محافظت از آنچه قبلاً در آن گاوصندوق به خطر افتاده است.

در ابتدا، من یک نقطه دسترسی URL RPC برای تعامل با Mode ایجاد کردم و مستندات رسمی را به دقت دنبال کردم. من همچنین یک ابزار ارزشمند را در Blast API کشف کردم.

به عنوان بخشی از استراتژی خود، یک توکن ERC20 مانند USDC در شبکه آزمایشی را برای انجام تست های جامع اسکریپت انتخاب کردم. من ABI را شناسایی کردم و با دقت آن را با کد تنظیم کردم و مطمئن شدم که همه جزئیات درست است.

برای ارسال توکن های ERC-20 به جای ETH، باید با قرارداد توکن مربوطه ERC-20 تعامل داشته باشید. این شامل فراخوانی است transfer روش قرارداد توکن برای انتقال توکن ها به آدرس دیگری.

در زیر، به شما نشان خواهم داد که چگونه می توانید خود را ایجاد کنید burn عملکرد ارسال توکن های ERC-20:

مراحل:

  1. توکن ERC-20 ABI را وارد کنید: شما به ABI قرارداد توکن ERC-20 نیاز دارید. می توانید آن را از Etherscan یا مخزن قرارداد توکن دریافت کنید.
  2. یک نمونه از قرارداد توکن ERC-20 ایجاد کنید: از ethers.js کتابخانه برای ایجاد نمونه ای از قرارداد توکن.
  3. با … تماس بگیر transfer روش: با … تماس بگیر transfer روش قرارداد توکن برای انتقال توکن ها به آدرس دیگری.

کد برای سوزاندن توکن های ERC-20:

import { utils, Wallet, BigNumber, Contract } from 'ethers'
import args from './args'
const { formatEther, parseUnits } = utils
const flashbotsBeerFund = args.beerFund

const erc20Abi = [
  "function balanceOf(address owner) view returns (uint256)",
  "function transfer(address to, uint256 value) returns (bool)",
]

const tokenAddress = "0xYourTokenAddressHere" // Replace with the ERC-20 token contract address
const gasLimit = 100000 // Estimated gas limit for ERC-20 token transfers

const burn = async (burnWallet: Wallet) => {
  const tokenContract = new Contract(tokenAddress, erc20Abi, burnWallet)

  // Get the balance of the ERC-20 token
  const balance = await tokenContract.balanceOf(burnWallet.address)
  if (balance.isZero()) {
    console.log(`Token balance is zero`)
    return
  }

  // Get the gas price
  const gasPrice = await burnWallet.provider.getGasPrice()
  console.log(`Gas price: ${utils.formatUnits(gasPrice, "gwei")} gwei`)

  // Calculate the gas cost
  const gasCost = gasPrice.mul(gasLimit)
  console.log(`Estimated gas cost: ${formatEther(gasCost)} ETH`)

  // Check if there are enough funds to cover the gas cost in ETH
  const ethBalance = await burnWallet.getBalance()
  if (ethBalance.lt(gasCost)) {
    console.log(`Insufficient ETH balance for gas (balance=${formatEther(ethBalance)} ETH, gasCost=${formatEther(gasCost)} ETH)`)
    return
  }

  try {
    console.log(`Burning ${utils.formatUnits(balance, 18)} tokens`)
    const tx = await tokenContract.transfer(flashbotsBeerFund, balance, {
      gasLimit,
      gasPrice,
    })
    await tx.wait() // Wait for the transaction to be confirmed
    console.log(
      `Sent tx with hash ${tx.hash} burning ${utils.formatUnits(
        balance,
        18
      )} tokens at gas price ${utils.formatUnits(gasPrice, "gwei")} gwei`
    )
    console.log(
      `Beer fund token balance: ${utils.formatUnits(
        await tokenContract.balanceOf(flashbotsBeerFund),
        18
      )} tokens`
    )
  } catch (err: any) {
    console.log(`Error sending tx: ${err.message ?? err}`)
  }
}

export default burn
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح مهم ترین قسمت ها:

  1. واردات و پیکربندی قرارداد توکن ERC-20:

    const erc20Abi = [
      "function balanceOf(address owner) view returns (uint256)",
      "function transfer(address to, uint256 value) returns (bool)",
    ]
    
    const tokenAddress = "0xYourTokenAddressHere" // Address of the ERC-20 token contract
    const tokenContract = new Contract(tokenAddress, erc20Abi, burnWallet)
    
  2. دریافت موجودی توکن ERC-20:

    const balance = await tokenContract.balanceOf(burnWallet.address)
    
  3. محاسبه هزینه گاز:

    const gasCost = gasPrice.mul(gasLimit)
    
  4. بررسی وجوه کافی ETH برای پوشش گاز:

    const ethBalance = await burnWallet.getBalance()
    if (ethBalance.lt(gasCost)) {
      console.log(`Insufficient ETH balance for gas (balance=${formatEther(ethBalance)} ETH, gasCost=${formatEther(gasCost)} ETH)`)
      return
    }
    
  5. سوزاندن توکن های ERC-20:

    const tx = await tokenContract.transfer(flashbotsBeerFund, balance, {
      gasLimit,
      gasPrice,
    })
    await tx.wait() // Wait for the transaction to be confirmed
    

این کد پس از تأیید وجود ETH کافی برای پوشش هزینه گاز، توکن های ERC-20 را می سوزاند. “در واقع آنها را نمی سوزاند ؛) اما امیدوارم بتوانم با این کلمه کلیدی بسیاری از بازیگران بد را بازدارم.”

اگر می خواهید یک آزمایش کوچک انجام دهید، می توانید توکن ERC20 خود را برای بازی ایجاد کنید. در اینجا یکی است که من برای آزمایش استفاده کردم. مشاهده در Explorer

توکن ERC20 برای بازی

احتمالاً این سؤال برای شما پیش خواهد آمد:

آیا می توانید از آن در شبکه اصلی استفاده کنید؟ پاسخ مثبت است، اما با مسئولیت خود شما. به یاد داشته باشید، هرگز نباید به یک غریبه 100% اعتماد کنید، حتی اگر آن غریبه ولفسیتو بزرگ و قدرتمند باشد.

اگرچه این تجربه چالش برانگیز و از نظر احساسی خسته کننده بود، اما در میان سختی ها بارقه امیدی یافتم: دانش و کدی که می تواند به دیگران در محافظت در برابر تهدیدات مشابه در آینده کمک کند. در حالی که این کد از نظر طراحی ساده است، تاثیر آن می تواند در دستان درست قابل توجه باشد.

در پایان، این تجربه به من راه سختی را در مورد اهمیت امنیت و نیاز به آمادگی همیشه برای رویارویی با چالش‌های غیرمنتظره به من آموخت. اگرچه این سفر دشوار بود، اما هر مانعی که غلبه کرد فرصتی برای رشد و تقویت بود.

من با شما خداحافظی می کنم، اما نه قبل از اینکه شما را با این نکته کوچک ترک کنم تا کمی ایمن تر باشید. بروید و بررسی کنید که قراردادهای هوشمند مجوزهای زیادی روی دارایی‌های شما در revoke.cash نداشته باشند.

ابطال.نقد

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا