FIP-05: تنظیم سختی
نویسنده: Thiniboy
وضعیت: نهایی (Final)
تاریخ ایجاد: ۲۰۲۵-۰۷-۱۸
خلاصه
پذیرش بازتنظیم سختی در هر بلوک به سبک Digishield با استفاده از میانگین متحرک نمایی (EMA) به سمت هدفِ فاصله زمانی یک دقیقه بین بلوکها. این الگوریتم پاسخگویی به شوکهای نرخ هش را بهبود بخشیده و در عین حال نوسانات را مهار و واریانس را کاهش میدهد.
انگیزه
پنجرههای بازتنظیم طولانی اجازه نوسانات قابل سوءاستفاده و دورههای طولانی انحرافِ سختی از هدف را میدهند. یک EMA در هر بلوک، ضمن حفظ پایداری، به سرعت به تغییرات پاسخ میدهد.
مشخصات فنی
- فاصله هدف T = ۶۰ ثانیه.
- در هر بلوک n، مقدار EMA از فاصلههای مشاهده شده با مقسومعلیه دامنه ۸ (در واقع یک EWMA با ۸ نمونه) بهروزرسانی میشود.
- در هر مرحله، یک میرایی محدود اعمال میشود تا تأثیر فاصله موثر را به محدوده [0.75·T, 1.5·T] محدود کند.
- هدف بعدی با مقیاسبندی هدف قبلی بر اساس نسبت فاصله محدود شده به T، با رعایت محدودیتهای اجماع، محاسبه میشود.
- اجازه تولید بلوکهای با حداقل سختی در مواقعی که فاصله مشاهده شده از یک آستانه پارامتریک زنجیره فراتر میرود (در جاهایی که فعال است).
فعالسازی (mainnet): بلوک ۱۱۵,۰۰۰.
منطق فنی
EMA در هر بلوک، تاخیر را در مقایسه با بازتنظیمهای با پنجره طولانی کاهش میدهد، در حالی که محدودکننده (clamp) از واکنش بیش از حد به دادههای پرت جلوگیری میکند. رویکردهای مشابه در سایر زنجیرههای UTXO تحت خانواده «Digishield» اثبات شدهاند.
پیادهسازی مرجع
در go-flokicoin پیادهسازی شده و از طریق پارامترهای زنجیره فعال شده است. انتشار 0.25.7-beta و تغییرات اجماع موجود در آن را ببینید.
ورودیها:
T := 60 ثانیه (فاصله هدف)
Divisor := DigishieldAmplitudeDivisor (در فلوکیکوین 8 است)
ClampMin := 0.75 × T
ClampMax := 1.50 × T
prevTarget := آخرین هدف سختی (عدد صحیح)
actualSpan := timestamp_n - timestamp_{n-1}
الگوریتم:
1. modulatedSpan ← T + (actualSpan - T) / Divisor
2. modulatedSpan ← clamp(modulatedSpan, ClampMin, ClampMax)
3. nextTarget ← prevTarget × modulatedSpan / T
4. nextTarget ← min(nextTarget, PowLimit)
نتیجه:
تبدیل nextTarget به بیتهای فشرده (bits) برای هدر بلوک.
نکته: زمانی که ReduceMinDifficulty فعال باشد، یک قاعده جداگانه در صورتی که
actualSpan از مقدار DigishieldLateBlockMultiple × T فراتر رود، یک بلوک با
حداقل سختی ضرب میکند. این میانبر مستقل از EMA در هر بلوک در بالا است.