بیشتر بحثهایی که این مدت دیدم پیرامون همین موضوع ایجاد اسپم روی شبکه هست که موافق و مخالفهاش صحبت کردند، ولی مزایای حذف این محدودیت در چی هست؟
Here’s a more detailed explanation of why I’ve changed my view and now support removing the OP_RETURN limit.
In a private chat with nostr:npub1s6z7hmmx2vud66f3utxd70qem8cwtggx0jgc7gh8pqwz2k8cltuqrdwk4c at the Bitcoin FilmFest , I asked if using Knots instead of Core poses any danger. He said "danger" is a strong word, but explained that when a new block is propagated, Knots may not recognize some transactions because its mempool rejected them due to default policy. As a result, there's latency—you have to fetch missing transactions from peers before you can mine the next block.
This means a miner who filters spam is slower to react and loses edge to miners who don’t. So spam ends up on-chain anyway, and only large miners benefit—whether through out-of-band payments or simply accepting high-fee transactions with bigger OP_RETURNs.
Even if most of the network runs Knots, one big miner is enough to mine such transactions. And not all OP_RETURN use is spam. Ocean, for example, used to block coinjoin transactions due to their OP_RETURN usage. I wouldn’t want to run a node that censors legitimate use cases.
When I supported the OP_RETURN limit, I even asked Sparrow to add Knots public nodes (https://github.com/sparrowwallet/sparrow/issues/1716#issuecomment-2872672114). nostr:npub1hea99yd4xt5tjx8jmjvpfz2g5v7nurdqw7ydwst0ww6vw520prnq6fg9v2 kindly responded that Knots doesn’t support BIP47, so it’d break features for users. That was another practical downside.
Also, if spam is destined for the chain, I’d rather mine it and earn the higher fees. I don’t care if someone’s NFT or bridge fails —I’m paid in sats. Let the fee market and block size be the filter. I’m not here to make economic judgments for others.
One concern I had was whether a higher OP_RETURN limit enables malicious code. But if attackers want to embed such arbitrary data required for the attack, they can use bare multisig to do so anyway. Limiting OP_RETURN won’t stop that.
I asked nostr:npub1c2d9mjwwfq0gw9jya6zesywuzzs4ngzp06wf9dcl0kdtmks706dsv6kxar whether we could disable bare multisig. He said it would require censoring pubkeys, raising the question: who decides what’s censored? A slippery slope. In that light, the cure is worse than the poison.
In my thinking, if a real existential threat emerges (for example the ability to crash the nodes by embedding malicious code as arbitrary data), then and only then a limit on OP_RETURN and bare multisig can be justified and that has to be done on the protocl level, not on the policy leve.
But if the side-effect of saving arbitrary data is higher transaction fees for a short time, I'm happy to collect those sats!
As history shows, crazes like Inscriptions fade. We’re already back to 1–3 sats/vByte. The high-fee spam phase is behind us.
And despite popular belief: mempools always clear. That’s a hill I’m willing to die on.
Discussion
یکی از دلایل اینه که برای کارکردهای مختلف حدهای بالاتری نیاز هست و اگر توسعهدهندهها بخوان برای هر بار بالا بردن حد دور هم بشینن و تصمیم بگیرن، وقتی رو که میتونستن روی کدنویسی و بهبود بیتکوین بذارن، مجبورن روی مناظره روی تغییر حد بذارن و بعداً که حد بیشتری برای یه کاربرد عملی مورد نیاز شد، مجبورن دوباره این مناظرات رو تکرار کنن.
توی این مدت، ماینرایی که حد بالاتری رو قبول میکنن کافیه خارج از بلاکچین پول دریافت کنن یا اجازهی ارسال چنین تراکنشی روی چند نود وجود داشته باشه تا این تراکنش بالاخره ماین بشه.
این وسط فقط ماینری ضرر میکنه که این تراکنش رو قبول نکرده و از هزینهی تراکنشش بهره نبرده.
مورد دوم سادهسازی کد هست و تعداد خطوط کد رو کمتر میکنه و نگهداری ازش رو راحتتر.
مورد سوم هم اینه که حتی همهی نودها دست به یکی کنن (حتی ماینرها) و تراکنش بالاتر از ۸۰ بایت رو به ممپول راه ندن، تراکنشایی که نیاز به دادهی بیشتری داشته باشن با ارسال چند آپریترن یا، یه حالت مخرب، با ایجاد
bare multisig
و ساختن تراکنشی به ظاهر مالتیسیگ که پابلیککیش نمایندهی یه دادهی بزرگتر هست این داده رو روی بلاکچین ذخیره کنن. پس عملاً این کار جلوی نوشتن داده روی بلاکچین رو نمیگیره. پس بیهودهست.
بابت اینکه دادهها بلاخره به یک شیوهای در شبکه قرار میگیره موافق هستم ولی سوال اساسی این هست که آیا رسالت بیت کوین این بوده؟
اینکه بخشی از ماینرها محدودیت رو در نظر نگیرند و تراکنشها رو تایید کنند، نودهایی که همچنان با اعمال محدودیت جلو میرند، چطور رفتاری با این بلاکهای ماین شده دارند؟
آیا هنوز با این اختلاف، همه نودها بر روی یک زنجیره واحد توافق دارند؟
چون نمیخوام اینجا طولانی بشه اگه مستنداتی هستد که از دید موافق حذف محدودیت اینجور موارد رو جواب داده، لطفا معرفی کن.
نه، کاربرد بیتکوین پول بودن و انتقال ارزشه. حالا این وسط یه دادههای غیرتراکنشی هم لاجرم وارد بلاک میشه. چیزی که جلوشون رو میگیره یا دلسردشون میکنه هزینهی تراکنش و کاهش ارزش دادههای غیرپولی هست.
آره، نودهایی که محدودیت رو اعمال میکنن همچنان این تراکنشها رو به عنوان تراکنش مشروع به رسمیت میشناسن، چون این تراکنشا با سیاست ممپول خودشون همخونی نداره، اما ناقض قوانین اجتماع یا همون
Consensus
نیست.
چنان چه توی آغاز همین متن هم توضیح دادم، نودی که این تراکنشها رو توی ممپول خودش نمیپذیره، وقتی اون تراکنشها در بلاکی ماین شدن، باید از بقیهی نودها استعلام کنه که اون تراکنشها رو بهش ارسال کنن.
فرض کن این نود ماینر باشه و نخواد اسپم رو توی بلاکش قرار بده. توی این مدت که داره تراکنشای ناموجود رو از بقیهی نودها دریافت میکنه، ماینرای دیگه شروع کردن به کار کردن روی بلاک بعدی و از اونا عقب میافته.
بهترین کار اینه که بذاریم کاهش ارزش دادههای غیرمالی افراد رو از شرکت در اسپم دلسرد کنه.
درسته که نودهایی که تراکنشهای حاوی اسپم رو در ممپول نمیپذیره، وقتی همون تراکنش حاوی اسپم در بلوک استخراج شدهای قرار بگیره، اون بلوک رو با تمام تراکنشهاش ذخیره میکنه.
اما این چیزی هست که ما مدیران نودها قدرت تغییرش رو داریم. اگر درصد خیلی زیادی از نودها (مثلاً 95 درصد) تراکنشهای اسپم رو در ممپول نپذیرن، این تراکنشها در مسیریابی و رسیدن به دست ماینرها دچار مشکل میشن.
و اگر بتونیم به جایی برسیم که تقریباً تمام نودها فیلترهای سختگیرانه روی حجم داده غیر مالی اعمال میکنن، در قدم بعدی میتونیم با یک UASF ماینرها رو هم مجبور کنیم چنین تراکنشهایی رو در بلوکهاشون قرار ندن (وگرنه بلوکهاشون از طرف شبکه رد میشه و تمام هزینهای که صرف استخراجش کرده بودن هیچ میشه).
کاری نیست که نشدنی باشه، صرفاً یک همکاری گسترده بین مدیران نودها نیاز داره.
کافیه فرد مستقیم به خود ماینر سفارش گنجوندن تراکنش توی بلاک رو بده و همین کافیه که تراکنش ماین بشه، بدون این که نودهای رایج اون رو دست به دست کرده باشن.
گنجوندن اطلاعات توی آپریترن حتی همین الآنم که این پول ریکوئست منتشر نشده ممکنه، در حالی که اکثر نودها (از جمله نود خودم) این محدودیت رو دارن.
الآن حذف محدودیت آپریترن یه تغییر توی کانسنسس نیست، اما محدود کردنش با سافت فورک مستلزم تغییر کانسنسسه.
برای چنین تغییری باید دلیل خیلی مهمی وجود داشته باشه، مثلاً امکان از کار انداختن نودهای بیتکوین. ولی مادامی که عارضهی جانبی فقط اینه که یه عده عکس میمون بخوان روی بلاکچین بذارن (اونم با پرداخت کل هزینه)، خود هزینهی تراکنش بازدارندگی کافی رو داره.
«کافیه فرد مستقیم به خود ماینر سفارش گنجوندن تراکنش توی بلاک رو بده و همین کافیه که تراکنش ماین بشه، بدون این که نودهای رایج اون رو دست به دست کرده باشن.
گنجوندن اطلاعات توی آپریترن حتی همین الآنم که این پول ریکوئست منتشر نشده ممکنه، در حالی که اکثر نودها (از جمله نود خودم) این محدودیت رو دارن.»
اینو که خودم توی همون پیامی که بهش ریپلای کردید گفتم، چرا تکرار میکنید؟!
«الآن حذف محدودیت آپریترن یه تغییر توی کانسنسس نیست، اما محدود کردنش با سافت فورک مستلزم تغییر کانسنسسه.
برای چنین تغییری باید دلیل خیلی مهمی وجود داشته باشه، مثلاً امکان از کار انداختن نودهای بیتکوین. ولی مادامی که عارضهی جانبی فقط اینه که یه عده عکس میمون بخوان روی بلاکچین بذارن (اونم با پرداخت کل هزینه)، خود هزینهی تراکنش بازدارندگی کافی رو داره.»
دلیل به اندازه کافی مهم وجود داره. عارضه جانبی به هیچ وجه فقط این نیست که عکس میمون روی زنجیره بلوکی بذارن. این یک حمله تمام عیار به بیتکوین هست که پتانسیلش رو داره ویژگی نامتمرکز بودن رو از بیتکوین بگیره و پروژه بیتکوین رو به کل با شکست مواجه کنه. استخراج بیتکوین همین الآنش هم شدیداً متمرکز هست، فقط شبکه نودهاش نامتمرکزه که اگر کار مؤثری (مثل انشعاب نرم) برای مقابله با اسپم انجام نشه، به زودی همین یک تار مویی که حیات بیتکوین بهش بند هست (یعنی نامتمرکز بودن شبکه نودها) رو هم از دست میدیم.
چیزی که ماینینگ رو متمرکز میکنه اینه که افراد به جای استفاده از نودهای موجود در شبکه تراکنششون رو مستقیم به ماینر بفرستن و هزینه رو با کارت اعتباری پرداخت کنن، نه با هزینهی تراکنش شفاف روی بلاکچین.
همچنین، ماینرهایی که تراکنشای دارای آپ
ریترن بالا رو میپذیرن هم هزینهی تراکنشش گیرشون میآد و هم زودتر میتونن برن سراغ بلاک بعدی، در حالی که ماینری که آپریترن رو ریجکت میکنه تازه باید منتظر بقیهی نودا بمونه تا تراکنشایی رو که توی ممپولش راه نداده بهش ارسال کنن. این باعث میشه ماینری که آپرینرن بالا رو ریجکت میکنه هم هزینهی تراکنش کمتری گیرش بیاد و هم از بقیهی ماینرا عقب بیافته.
«چیزی که ماینینگ رو متمرکز میکنه اینه که افراد به جای استفاده از نودهای موجود در شبکه تراکنششون رو مستقیم به ماینر بفرستن و هزینه رو با کارت اعتباری پرداخت کنن، نه با هزینهی تراکنش شفاف روی بلاکچین.»
این باعث متمرکز شدن استخراج نمیشه!
یا شاید منظور شما از تمرکز استخراج چیز دیگهای باشه و داریم در مورد دو تا چیز مختلف حرف میزنیم.
«همچنین، ماینرهایی که تراکنشای دارای آپ
ریترن بالا رو میپذیرن هم هزینهی تراکنشش گیرشون میآد و هم زودتر میتونن برن سراغ بلاک بعدی، در حالی که ماینری که آپریترن رو ریجکت میکنه تازه باید منتظر بقیهی نودا بمونه تا تراکنشایی رو که توی ممپولش راه نداده بهش ارسال کنن. این باعث میشه ماینری که آپرینرن بالا رو ریجکت میکنه هم هزینهی تراکنش کمتری گیرش بیاد و هم از بقیهی ماینرا عقب بیافته.»
غلطه!
اگر پاداش بلوک وجود نداشت حرفتون درست بود ولی تا وقتی پاداش بلوک به صفر نرسیده، هیچ الزامی نیست که بلوک حتماً حاوی تراکنش باشه.
اگر ممپول خلوت هست و تراکنشهای جدید زیادی به ماینرها نمیرسه، ماینرها صبر نمیکنن تا تراکنش کافی دستشون بیاد و بعد شروع به استخراج بلوک کنن. ماینر تلاش برای پیدا کردن گواه کار معتبر برای بلوک رو شروع میکنه چه بلوکش خالی باشه و چه پر یا نیمه پر.
هم توی ویدئو توضیح میدم که چرا این حرف درسته و هم توی این پستم به فارسی:
اگر شما یه ماینر باشی که ممپولت تراکنشای دارای آپریترن بالا رو رد کنه، وقتی بلاکی با اون تراکنشها ماین شد، اول باید از بقیه جویا بشی که اون تراکنشایی که توی ممپولت نبوده و توی بلاک هست چیا بودن و تازه بعد میتونی روی بلاک بعدی کار کنی.
در حالی که ماینرایی که این تراکنش رو توی ممپولشون پذیرفتن و یا حتی موفق به ماینش شدن، نه تنها هزینهی اضافهی تراکنش گیرشون اومده، بلکه کار بر روی بلاک بعدی رو هم قبل از ماینری که اون تراکنش رو توی ممپولش راه نداده شروع کردن.
این کار باعث میشه که ماینرایی که پول بیشتری دارن، همچنان هم به پول بیشتری دسترسی پیدا کنن (با هزینهی تراکنش بیشتر) و هم شانس بیشتری برای یافتن بلاک جدید داشته باشن (باز هم پول بیشتری دریافت کنن) و این جوری ماینرایی که تراکنشای دارای آپریترن بزرگتر رو رد کردن عقب میافتن.
همچنین باز تأکید میکنم که باعث تمرکز ماینینگ میشه. فرض کن ۹۵ درصد شبکه رو نودهایی تشکیل میده که بالای ۶۰ کیلوبایت رو برای آپریترن منتشر نمیکنن.
شما میری سراغ یه ماینر بزرگ و از توی سایتش آیدی تراکنشت رو پست میکنی و با کارت اعتباری براش پرداخت میکنی.
اثری از این تراکنش بر روی بلاکچین باقی نمیمونه و همچنین افراد ماینرهای بزرگ رو برای این کار انتخاب میکنن؛ چون اونها سایت با درگاه پرداخت فیات دارن. این باعث تمرکز بیشتر ماینینگ میشه.
این تأثیر شدیداً ناچیزی روی تمرکز استخراج هست. ریشه اصلی متمرکز شدن استخراج بیتکوین، ASIC هست. امکانپذیر بودن استخراج ASIC هست که باعث میشه استخراج به صورت انحصاری دست ثروتمندان قرار بگیره و افراد عادی شانسی برای رقابت نداشته باشن. ساتوشی روی
“One CPU, one vote”
تأکید داشت و حتی استخراج با GPU رو هم سعی کرد با دعوت ماینرها به توافق شفاهی (Gentlemen's agreement) به تعویق بندازه.
استخراج ASIC باعث شد از CPU و GPU رد بشیم و به مزرعههای بزرگی از چند ده دستگاه اختصاصب و گرون قیمت برسیم. یا استخراج ASIC رو باید غیرممکن کرد و یا قبول کرد که رویای استخراج نامتمرکز شکست خورده و تنها چیزی که از عدم تمرکز بیتکوین برامون باقی مونده، عدم تمرکز نودها هست. عدم تمرکزی که باید با چنگ و دندون ازش محافظت بشه چون اگر این یکی هم از دست بدیم دیگه فاتحه بیتکوین خوندهست. و این تدم تمرکز نودها دقیقاً چیزی هست که تراکنشهای اسپم تهدیدش میکنن. پس نگید دلیل به اندازه کافی مهم برای انشعاب نرم نداریم. مهمترین دلیل ممکن رو داریم! پای بقای بیتکوین وسط هست، چی از این مهمتر؟!
اگر مشکل شما با
ASIC mining
هست که باید با کل بیتکوین مشکل داشته باشین.
راهی برای جلوگیری از ایسیک ماینینگ و ماینینگ استخری وجود نداره.
مثلاً مونرو ادعا میکنه در برابر اِیسیک مقاومه، اما اگر چند تا سیپییو رو به هم ببندیم و توی یه کامپیوتر جا بدیم، نمیشه چندین رأی داشت؟
فعلاً راهی برای جلوگیری از پولد ماینینگ و ایسیک ماینینگ نداریم. تا جایی که میدونم، توی هیچ رمزارزی هم به طور موفق نداریم.
اگر استدلالتون اینه، پس گیر دادن به این که حذف حد آپریترن باعث متمرکز شدن میشه جایگاهش رو از دست میده.
شما الآن گفتی سناریویی که من شرح دادم و توش لیمیت آپریترن توسط اکثر نودها حفظ شده بود تأثیر ناچیزی روی متمرکز شدن داره، در صورتی که چند خط بالاتر حذف آپریترن رو عامل متمرکز شدن میدونستی.
از این دو گزاره یکیش میتونه درست باشه.
مونرو فقط ادعا نمیکنه در برابر ASIC مقاومه، واقعاً مقاومه.
چند تا CPU رو به هم وصل کنید اسمش نمیشه ASIC :)))
چیپهای ASIC تفاوت فیزیکی در ساختار و معماریشون با CPU های همه کاره دارن.
البته که میتونید نرخ هش خودتون در استخراج مونرو رو با استفاده از CPU های قویتر با تعداد هستههای بیشتر یا استفاده از چند CPU بالاتر ببرید. ولی همواره باید از CPU استفاده کنید نه ASIC.
برای اجتناب از ASIC راه وجود داره و در مونرو امتحان شده و جواب هم داده.
برای اجتناب از استخرهای استخرتج راه وجود نداره ولی میشه خود استخرها رو نامتمرکز کرد تا ماینرها با اختیار خودشون در استخرهای متمرکز فعالیت کنن و نرخ هش رو دست استخرهای متمرکز ندن. استخر Ocean در استخراج بیتکوین و استخر P2Pool در استخراج مونرو هر دو نامتمرکز هستن.
«شما الآن گفتی سناریویی که من شرح دادم و توش لیمیت آپریترن توسط اکثر نودها حفظ شده بود تأثیر ناچیزی روی متمرکز شدن داره، در صورتی که چند خط بالاتر حذف آپریترن رو عامل متمرکز شدن میدونستی.
از این دو گزاره یکیش میتونه درست باشه.»
خیر! هر دو گزاره همزمان درست هستن.
گفتم وجود محدودیت OP_RETURN تأثیر ناچیزی در متمرکز شدن استخراج داره.
چند حذف محدودیت OP_RETURN باعث متمرکز شدن نودها میشه (دقت کنید: نودها، نه استخراج).
تمرکز استخراج و تمرکز نودها دو تا موضوع جداگانه هستن. این دو گزارهای که میگید متناقض هستن در واقع هیچ تناقصی باهم ندارن اگر تفاوت تمرکز استخراج و تمرکز نودها رو درک کرده باشید.