چرا بعضی بلاک‌های بلاک‌چین بیتکوین خیلی بزرگتر هستن؟

سلام.
عنوان بهتری برای تاپیک به نظرم نرسید.

قضیه اینه که من نرم‌افزار bitcoin-core رو دانلود کردم و با استفاده از اون، تمام بلاک‌چین بیت‌کوین رو گرفتم روی سیستمم (تقریبا ۲۲۰گیگابایت)
یه اسکریپت ساده نوشتم که این بلوکها رو از height=0 تا آخرین بلوک یکی یکی بگیره و بریزه توی یه دیتابیس mysql. البته فقط hash و height رو.
الآن خواستم hex اون بلوکها رو هم وارد دیتابیس کنم، ولی بعد از حدود ۳۰۰۰۰ تا یه ارور گرفتم که میگه «این چیزی که میخوای وارد این ستون از نوع text کنی، سایزش خیلی بزرگه» (تا جایی که میدونم text بزرگترین فورمت برای دیتابیسه) وقتی نگاه کردم دیدم بعضی از hexها (بعضی بلوکها) خیلی بزرگ هستن در حالی که اکثر بلوکها سایزشون مثل همه.

با توجه به داکیومنت باید دقیقا 80بایت باشه:

Version (4 bytes)
Hash of the previous block, thus making a chain of block (32 bytes)
Merkle root, the tree of transactions' reference (32 bytes)
Timestamp, number of seconds since 1970-01-01 00:00 (4 bytes)
Bits, a representation of the networks current difficulty (4 bytes)
Nonce, incremented when mining (4 bytes)

به عبارتی، اکثر بلوکها ۴۳۰کاراکتر طول دارن، مثل این:

010000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000982051fd1e4ba744bbbe680e1fee14677ba1a3c3540bf7b1cdb606e857233e0e61bc6649ffff001d01e362990101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000

ولی یه تعداد کمی از بلوکها سایزشون خیلی بزرگتره. یکی رو شمردم (با کامند wc) ۳۹۵۷۰ کارکتر بود. (دقیقا ۹۲ برابر بلوکهای معمولی)


از بین دوستان کسی هست که اطلاعات تخصصی درمورد بلاکچین داشته باشه و بتونه راهنماییم کنه؟
فقط میخوام بدونم چرا بعضی بلوکها اینقدر بزرگتر هستن ولی اکثرشون اندازه‌ی هم.

پ.ن:
ربطی به تراکنشها نداره. این دوتا بلوکی که مقایسه کردم، یکیشون ۱ تراکنش داشت و یکی ۲ تراکنش.


شاید این به دردت بخوره

1 Like

خوب من بلاک بدون تراکنش رو میخوام.
نمیدونم شاید درست متوجه نشدم، ولی مگه کسی که ماین میکنه، یه استرینگ با سایز ثابت نمیفرسته به سرورها برای تایید؟ (سایز ثابتی که توی داکیومنت، ۸۰ بایت گفته شده) مگه اصل قضیه یه هش نیست؟ هش باید سایزش ثابت باشه.

1 Like

من یه جستجویی کردم ، احتمالاً :

Field Description Size
Magic no value always 0xD9B4BEF9 4 bytes
Blocksize number of bytes following up to end of block 4 bytes
Blockheader consists of 6 items 80 bytes
Transaction counter positive integer VI = VarInt 1 - 9 bytes
transactions the (non empty) list of transactions -many transactions

فکر کنم بایت هایی که شما فرستادی به این توالی قرار گرفتن . حالا خود منم مثل شما نمیدونم و سوالت رو فرستادم یه گروه تخصصی ببینیم جواب میدن یا نه

ممنون.
چیزی که برام سواله اینه که این درسته:

کسی که ماین میکنه، یه اسرینگ رندم (+ یه سری دیتا مربوط به height و هش بلوک قبلی و…) با سایز مشخص میفرسته به nodeها. و نودها خودشون تراکنشها رو اضافه میکنن؟

یا این:

کسی که ماین میکنه، همه‌ی تراکنشها رو هم میفرسته به node؟

اگه دومی درست باشه، باید بگم که اصلا سیستم کار دستگاههایی مثل ant-miner رو درک نمیکنم.
با توجه به اینکه این دستگاهها یه ic اختصاصی براشون ساخته شده که کارش فقط تولید تصادفی هشهای sha256 هست و کار دیگه‌ای نمیتونه انجام بده، چطوری از تراکنشها خبردار میشه و اضافه میکنه؟

(یا شاید ant-miner یه cpu و سیستم عامل هم روش هست که در کنار این ic کار میکنه؟)


سورسهایی که برای نرم‌افزار ماینینگ دیدم، همشون خیلی ساده بودن. فقط یه api میزدن به یه node و یه سری دیتا (مثل هش بلوک قبلی) رو میگرفتن و به یه sha256 رندم اضافه میکردن و میفرستادن به نود.
یا شاید اون سورسهایی که من دیدم غلط یا ناقص بودن.


پ.ن:
این تاپیک باحالی بود که قبلا بهش رسیده بودم:


با کاغذ و خودکار ماین میکنه :joy:

1 Like

اینا رو دیگه حاجی فکر کنم باید کتاب کت و کلفت بخونی :joy::joy:
نمیدونم کجا خوندم که طرف نوشته بود C++ زبان خیلی خیلی خوب وساده ای هست فقط قبل کار کردن مجبورت میکنه همه چی رو بدونی ، فکر کنم این حالت الان برای تو در بلاکچین و بیت کوئین پیش اومده و باید کل طرز کار سیستمش رو بدونی تا بتونی بریزی تو mysql

اونش مساله‌ای نیست.
نرم‌افزار bitcoin-core رو دانلود کردم و کل بلاک‌چین رو گرفتم دارم، فقط کافیه با api ازش دیتاها رو بگیرم. رسما کار راحتیه.

فقط یه چیزاییش رو درک نمیکنم. مثلا همینکه چرا بعضی بلوکها اینقدر بزرگن؟ (خوب احتمالا به خاطر اینه که تراکنشها رو هم داره بهم نشون میده)
و مساله‌ی مهمتر اینه که آیا ماینرها باید یه هش ۱ یا ۲مگابایتی پیدا کنن؟ خیلی نامردیه که :grinning:
و سوال اصلی اینه که من الآن میخوام ماین کنم، باید یه چیزی بین ۴۰۰ تا ۲ملیون کاراکتر حدث بزنم؟ یه جورایی غیر منطقیه. منطقیش اینه که یه sha256 به اضافه‌ی یه سری استرینگ ثابت رو بفرستم به نود (که خوشبختانه روی سیستم خودمه) و هر ۱۰دقیقه اون استرینگ ثابت عوض بشه.

1 Like