Skip to content
This repository was archived by the owner on Sep 27, 2026. It is now read-only.
0xRadikalPublic archive

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Hashcats — ابزار و تحلیل ماینینگ NFT روی Robinhood Chain

مجموعه‌ی کامل ابزار، تحلیل و مستندات برای ماین‌کردن NFTهای پروژه‌ی hashcats.fun روی شبکه‌ی Robinhood Chain.

همه‌ی اعداد و ادعاهای این مخزن مستقیماً از روی زنجیره (on-chain) و از روی کد خود سایت استخراج و صحت‌سنجی شده‌اند — نه حدس و نه ادعای بی‌پایه.


فهرست


پروژه چیست

Hashcats یک کالکشن ۱۶٬۳۸۴ عددی از «گربه‌های پیکسلی» است که برخلاف اکثر NFTها، با دکمه «خرید» ساخته نمی‌شوند؛ بلکه باید با اثبات کار (Proof of Work) روی زنجیره ماین شوند. تصویر، ویژگی‌ها و پالت هر گربه در حافظه‌ی خود قرارداد ذخیره می‌شود.

مورد مقدار (تأییدشده از زنجیره)
شبکه Robinhood Chain، chainId = 4663
RPC https://rpc.mainnet.chain.robinhood.com
Explorer https://robinhoodchain.blockscout.com
قرارداد کالکشن 0xCA75DF55Cc9C476DB27a7375D1fc8E794cf80721 (name() == "Hashcats")
کل عرضه ۱۶٬۳۸۴ گربه
قیمت ورودی فعلی ~۰.۰۲ ETH (بومی شبکه، پله‌ای بالا می‌رود)

مکانیک ماینینگ

مکانیک با فراخوانی مستقیم قرارداد و مقایسه‌ی بایت‌به‌بایت با خروجی on-chain ۱۰۰٪ تأیید شد:

workHash = keccak256( abi.encodePacked(miner, nonce, prevWork, anchorHash) )

شرط برد:      workHash < targetFor(miner)
ثبت (mint):   mine(uint256 nonce, uint256 anchorBlock)  با  msg.value == mintPrice()
  • miner : آدرس ماینر (۲۰ بایت)
  • nonce : عددی که ما تغییر می‌دهیم تا شرط برقرار شود (۳۲ بایت، big-endian)
  • prevWork : «کارِ» گربه‌ی قبلی — با هر mint توسط هرکسی عوض می‌شود
  • anchorHash : هش یک بلاک اخیر L2 (۳۲ بایت)
  • سلکتور واقعی تابع mine : 0x071e9503 (با تراکنش‌های واقعی برنده‌ها تطبیق داده شد)

نکته‌ی کلیدی: چون prevWork با هر mint عوض می‌شود، هر تلاشِ در جریان برای prevWork قدیمی باطل می‌شود. بنابراین باید prevWork را مدام تازه خواند و بلافاصله پس از یافتن راه‌حل، تراکنش را فرستاد.


مدل سختی

سختی به‌صورت «تعداد بیت‌های صفر ابتدایی» لازم در workHash تعریف می‌شود و از فرمول زیر می‌آید (با آزمایش مستقیم تابع targetAt و متن رسمی سایت تأیید شد):

بیت‌های سختی = کفِ epoch (currently 32) + burst
  • burst : تعداد mintهای اخیر شبکه. هر mint، سختی را ۲ برابر می‌کند (یک بیت اضافه). خودِ سایت می‌گوید: «Each recent mint doubles the work, and the streak cools by one every 10 seconds.»
  • burst هر DECAY_HALFLIFE = 10 ثانیه یک واحد خنک می‌شود.
  • FLOOR_BITS = 26، کفِ epoch فعلی = ۳۲ بیت.
  • سختی سراسری است؛ آدرس تازه یا personalBurst تخفیفی نمی‌دهد (آزمایش شد).

جدول زمان حل (با یک ماینر CPU دو-هسته‌ای ~۲۶۰ هزار هش/ثانیه):

burst بیت زمان تقریبی
0 32 ~۴.۵ ساعت
2 34 ~۱۸ ساعت
8 40 ~۱۸۸ ساعت
~16 48 ~۳۲ سال

با ماینر GPU سرعت به‌شدت بالاتر است (بخش استراتژی).


کشف مهم

⭐ رقابت این پروژه بین «افراد عادی» نیست — بین چند «نهنگ» صنعتی است

این مهم‌ترین یافته‌ی این تحقیق است و با کالبدشکافی تراکنش‌های واقعیِ برنده‌ها و اندازه‌گیری زنده‌ی زنجیره اثبات شد:

چطور اندازه گرفتیم؟ با شمارش رویدادهای Transfer از آدرس صفر (که همان mint است) در بازه‌های چند هزار بلاکی، محاسبه‌ی فاصله‌ی زمانی بین mintها، و اینکه هر mint نیازمند حدود 2^48 ≈ ۲۸۰ تریلیون هش است. از این‌جا قدرت کل شبکه و تعداد آدرس‌های فعال به‌دست می‌آید.

اعداد واقعی اندازه‌گیری‌شده (در چند بازه):

بازه قدرت کل شبکه ماینرهای فعال قدرت هر ماینر
نمونه ۱ ~۱۶٬۵۰۰ GH/s ~۱۰ ~۱٬۶۵۰ GH/s
نمونه ۲ ~۳۵٬۳۰۰ GH/s ~۱۸ ~۱٬۹۶۰ GH/s
نمونه ۳ ~۹٬۷۰۰ GH/s ~۲۵ ~۳۹۰ GH/s

نتیجه‌گیری صادقانه:

  • کل کالکشن را عملاً حدود ۱۰ تا ۲۵ آدرس بین خودشان تقسیم می‌کنند.
  • هر یک از این ماینرها صدها تا هزاران GH/s قدرت دارد — یعنی معادل صدها کارت گرافیک قوی یا سخت‌افزار ASIC مخصوص، نه یک کارت گرافیک خانگی.
  • تصور «با یک کارت گرافیک معمولی و زورِ بازو می‌شود گربه گرفت» نادرست است. کسی که با کارت معمولی زور می‌زند، عملاً هیچ سهمی از این ~۱۰-۳۵ تراهش شبکه ندارد.
  • تنها با یک کارت معمولی (~۱ GH/s) سهم ما از شبکه در حدِ ۰.۰۱٪ است؛ یعنی به‌طور میانگین ده‌ها ساعت طول می‌کشد تا یک گربه نصیب‌مان شود — آن هم اگر کالکشن تا آن موقع تمام نشده باشد.

به بیان ساده: این یک بازیِ رقابت قدرتِ خام بین چند بازیگر بزرگ است. برای برنده‌شدن باید سهم معناداری از قدرت کل شبکه را داشت.


ابزارها

فایل کاربرد
config.py ثابت‌ها (RPC، آدرس قرارداد، مسیر والت)
chain.py توابع کمکی web3 و خواندن وضعیت زنده (کلید خصوصی هرگز چاپ نمی‌شود)
hashcats_abi.json ABI کامل قرارداد (۱۷۹ ورودی، از باندل سایت استخراج شد)
miner.py ماینر مرجع تک‌هسته (keccak پایتون) + بنچمارک
keccak_miner.c ماینر سریع C (~۸۱۰k هش/ثانیه در هر هسته، ۵.۶ برابر پایتون)
solver_mp.py راه‌حل‌یابِ چند-هسته‌ای پایتون
csolver.py راننده‌ی چند-هسته‌ای ماینر C
mint.py ساخت/شبیه‌سازی/ارسال تراکنش mine (ارسال پشت گیت allow_send)
bot.py ربات «انتظار پنجره‌ی خلوت» (CPU)
hunter.py ربات شکارچی پنجره با ماینر C
watcher.py رصدگر ۲۴/۷ سختی/burst/فاصله‌ی mint (خروجی CSV + state)
run_watcher.sh نگهبان keepalive رصدگر
analyze.py تحلیل داده‌ی رصدگر (توزیع burst، الگوی ساعتی)
feasibility.py اندازه‌گیری زنده‌ی نرخ mint و احتمال پنجره
verify_correctness.py اثبات: هش ما == هش قرارداد + حل یک هدف آسان
verify_tx_path.py اثبات مسیر تراکنش با طبقه‌بندی خطاهای revert
gpu/ پکیج کامل GPU (کرنل CUDA + صحت‌سنجی + کنترلر) — راهنما

اجرا

# ۱) پیش‌نیازها
pip install web3 eth-account pycryptodome

# ۲) والت خود را بگذارید (کلید خصوصی هرگز کامیت نمی‌شود)
cp wallet.env.example wallet.env
# سپس private-key واقعی را داخل wallet.env بگذارید، یا:
export HASHCATS_WALLET=/path/to/your/wallet.env

# ۳) اثبات درستی (بدون هیچ تراکنش/هزینه‌ای)
python3 verify_correctness.py
python3 verify_tx_path.py

# ۴) ماینر سریع C
gcc -O3 -march=native -funroll-loops -o keccak_miner keccak_miner.c

# ۵) رصد زنده‌ی شبکه
python3 watcher.py
python3 analyze.py

# ۶) اجرای ربات (پیش‌فرض DRY-RUN، چیزی نمی‌فرستد)
python3 hunter.py            # فقط شبیه‌سازی
python3 hunter.py --send     # ارسال واقعی (نیازمند والت شارژشده)

برای GPU به gpu/README_GPU.md مراجعه کنید.


استراتژی

چون رقابت بینِ چند نهنگ با قدرت بالاست، تنها راهِ داشتنِ شانسِ واقعی، رساندنِ قدرتِ خودمان به کسری معنادار از قدرت کل شبکه است:

قدرت ما سهم از شبکه (~۳۵٬۰۰۰ GH/s) زمان تقریبی تا ۱ گربه
۱x کارت معمولی (~۱ GH/s) ~۰.۰۰۳٪ ده‌ها ساعت
۸x RTX 4090 (~۲۸ GH/s) ~۰.۰۸٪ چند ساعت
~۱۰۰x کارت قوی (~۳۵۰ GH/s) ~۱٪ ~۲۷ دقیقه

ماینینگ بی‌حافظه (memoryless) است: لازم نیست منتظر «پنجره‌ی خلوت» بمانیم؛ اگر مداوم ماین کنیم و prevWork را سریع تازه کنیم، زمان مورد انتظار = 2^bits / rate است. ربات gpu/gpu_hunter_continuous.py دقیقاً همین کار را می‌کند و هنگام ارسال، با کارمزد گس کمی بالاتر از رقبا (که گس پیش‌فرض می‌دهند) جلو می‌زند.

نکته‌ی صادقانه: با کارت‌های ضعیف/ارزان، سهم ما ناچیز است و شانس نزدیک صفر. برای شانس واقعی به سخت‌افزار قوی (چند ده کارت رده‌بالا یا معادلش) نیاز است.


امنیت

  • کلید خصوصی هرگز کامیت نمی‌شود. فقط wallet.env.example در مخزن است؛ فایل واقعی wallet.env در .gitignore قرار دارد.
  • کلید خصوصی فقط به‌صورت محلی خوانده می‌شود و در هیچ لاگ/خروجی چاپ نمی‌شود.
  • هر ارسال تراکنش، قبل از فرستادن با eth_call شبیه‌سازی می‌شود تا گس هدر نرود.
  • ارسال واقعی فقط با پرچم صریح --send و در صورت کافی‌بودن موجودی انجام می‌شود.

سلب مسئولیت

این مخزن صرفاً برای تحقیق فنی و آموزشی درباره‌ی مکانیک Proof-of-Work این پروژه است. ماینینگ و mint هزینه‌ی واقعی (قیمت ورودی + گس) دارد و هیچ تضمینی برای سود یا ارزش NFT وجود ندارد. مسئولیت هر استفاده بر عهده‌ی کاربر است.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages