Kon

Konchilik blok zanjiriga yangi bloklarni qo'shib, tranzaktsiyalar tarixini o'zgartirishni qiyinlashtiradi.

Kirish¶

Bugungi kunda qazib olish ikki shaklda amalga oshiriladi:

Yolg'iz qazib olish, bu erda konchi o'z -o'zidan yangi bloklar ishlab chiqarishga harakat qiladi, blok mukofoti va tranzaktsiya yig'imidan tushgan mablag 'butunlay o'ziga tushadi, bu unga katta farqlarni (to'lovlar orasidagi ko'proq vaqt) olish imkonini beradi.

Pooled kon, bu erda konchi boshqa konchilar bilan tez -tez bloklarni topish uchun resurslarni to'playdi, tushgan mablag 'hovuz konchilari o'rtasida har biri qo'shgan xesh kuchining miqdori bilan chambarchas bog'liq bo'lib, konchiga kichik farqlar bilan kichik to'lovlarni olish imkonini beradi. (to'lovlar orasidagi qisqa vaqt).

Yakka qazib olish

Quyida tasvirlanganidek, yakka konchilar odatda tarmoqdan yangi operatsiyalarni olish uchun bitcoind -dan foydalanadilar. Ularning tog' -kon dasturiy ta'minoti vaqti -vaqti bilan bitcoin -ni yangi bitimlar uchun so'rovnoma o'tkazadi "getblocktemplate" RPC, bu yangi bitimlar ro'yxatini va tangalararo bitim yuborilishi kerak bo'lgan ochiq kalitni beradi.

Yakkaxon Bitcoin koni.

Konchilik dasturi shablon yordamida blok tuzadi (quyida tasvirlangan) va blok sarlavhasini yaratadi. Keyin u 80 baytli blok sarlavhasini kon uskunasiga (ASIC) maqsadli chegara (qiyinchilikni sozlash) bilan yuboradi. Kon uskunalari blok sarlavhasi nonce uchun barcha mumkin bo'lgan qiymatlar orqali takrorlanadi va tegishli xash hosil qiladi.

Agar xeshlarning hech biri ostonadan past bo'lmasa, kon uskunalari kon dasturidan yangi merkle ildizi bilan yangilangan blok sarlavhasini oladi; bu yangi blok sarlavhasi coinbase operatsiyasining coinbase maydoniga qo'shimcha nonce ma'lumotlarini qo'shish orqali yaratiladi.

Boshqa tomondan, agar maqsadli ostonadan pastda xesh topilsa, kon uskunalari blok sarlavhasini kon dasturiga muvaffaqiyatli qaytarish bilan qaytaradi. Kon dasturiy ta'minoti sarlavhani blok bilan birlashtiradi va tugallangan blokni blok zanjiriga qo'shimcha sifatida tarmoqqa uzatish uchun bitcoindga yuboradi.

Hovuz koni

Hovuz konchilari quyida ko'rsatilgan shunga o'xshash ish oqimiga amal qilishadi, bu esa kon havzasi operatorlariga bajarilgan ishlarning ulushiga qarab konchilarga to'lash imkonini beradi. Kon hovuzi bitcoind yordamida tarmoqdan yangi operatsiyalarni oladi. Keyinchalik muhokama qilingan usullardan birini qo'llagan holda, har bir konchi kon dasturi hovuzga ulanadi va blok sarlavhalarini yaratish uchun kerakli ma'lumotlarni so'raydi.

Birlashtirilgan Bitcoin koni.

Birlashtirilgan konlarda, kon havzasi maqsadli chegarani tarmoqdagi qiyinchilikdan yuqori (unchalik qiyin bo'lmagan) bir necha darajaga o'rnatadi. Bu kon uskunalari blok zanjiriga kiritilishi mumkin bo'lgan qiymatga ega bo'lmagan, lekin basseyn maqsadidan pastroq bo'lgan, blokirovka qiladigan ko'plab sarlavhalarni qaytarishiga olib keladi, bu esa konchi mumkin bo'lgan xash qiymatlarining foizini tekshirganligini isbotlaydi. .

Keyin konchi hovuzga kerakli ma'lumotlarning nusxasini yuboradi, bu sarlavha nishondan pastda joylashganligini va sarlavhaning merkle ildiz maydonida ko'rsatilgan tranzaktsiyalar bloki hovuz maqsadlari uchun to'g'ri ekanligini tasdiqlashi kerak. (Bu odatda coinbase operatsiyasi pulni to'lashi kerakligini bildiradi.)

Konchi basseynga yuboradigan ma'lumot ulush deb ataladi, chunki u konchi ishning bir qismini bajarganligini isbotlaydi. Tasodifan, hovuz oladigan ba'zi aktsiyalar tarmoq maqsadidan past bo'ladi - kon havzasi ularni tarmoqqa blok zanjiriga qo'shish uchun yuboradi.

Ushbu blokni qazib olishdan kelib chiqadigan blok mukofoti va tranzaksiya to'lovlari kon hovuziga to'lanadi. Kon hovuzi ushbu daromadning bir qismini yakka konchilarga qancha aktsiya ishlab chiqarganiga qarab to'laydi. Masalan, agar kon qazish havzasining maqsadli chegarasi tarmoq maqsadli chegarasidan 100 baravar past bo'lsa, muvaffaqiyatli blok yaratish uchun o'rtacha 100 ta aktsiyani ishlab chiqarish kerak bo'ladi, shuning uchun kon hovuzi olingan har bir aktsiya uchun to'lovning 1/100 qismini to'lashi mumkin. . Turli kon konlari ushbu asosiy aktsiyalar tizimiga asoslangan turli xil mukofot tarqatish tizimlaridan foydalanadilar.

Prototiplarni blokirovka qilish

Yakkaxon va basseynli konlarda, kon dasturlari blok sarlavhalarini yaratish uchun kerakli ma'lumotlarni olishi kerak. Ushbu bo'limda ma'lumotlarning qanday uzatilishi va ishlatilishini chiziqli tasvirlangan. Biroq, haqiqiy dasturlarda, ASIC xasherlarini maksimal quvvat bilan ishlashini ta'minlash uchun parallel iplar va navbatlar ishlatiladi.

ish RPC¶

Eng oddiy va eng erta usul-bu endi eskirgan Bitcoin Core getwork RPC bo'lib, u to'g'ridan-to'g'ri konchi uchun sarlavha quradi. Sarlavhada faqat 4 gigagashli bitta 4 baytli nonce borligi sababli, ko'plab zamonaviy konchilar bir soniyada o'nlab yoki yuzlab ishlarni bajarishni so'rashlari kerak. Yakkaxon konchilar hali ham v0.9.5 yoki undan pastda ishdan foydalanishlari mumkin, lekin bugungi kunda ko'pchilik hovuzlar undan foydalanishni to'xtatadi yoki taqiqlaydi.

getblocktemplate RPC¶

Yaxshilangan usul - bu Bitcoin Core "getblocktemplate" RPC. Bu tog' -kon dasturiga qo'shimcha ma'lumot beradi:

Hovuz yoki yakka shaxtachining bitcoind hamyonini to'laydigan tangalararo bitim tuzish uchun zarur bo'lgan ma'lumotlar.

Bitcoind yoki tog'-kon havzalarining to'liq yig'indisi, blokirovkada, kon dasturiga tranzaktsiyalarni tekshirishga, ixtiyoriy ravishda qo'shimcha tranzaktsiyalarni qo'shishga va ixtiyoriy ravishda kerak bo'lmagan operatsiyalarni olib tashlashga imkon beradi.

Keyingi blok uchun blok sarlavhasini tuzish uchun zarur bo'lgan boshqa ma'lumotlar: blok versiyasi, oldingi blok xesh va bitlar (nishon).

Aktsiyalarni qabul qilish uchun kon hovuzining maqsadli chegarasi. (Yakkaxon konchilar uchun bu tarmoq maqsadi.)

Qabul qilingan tranzaktsiyalardan foydalanib, tog' -kon dasturiy ta'minoti coinbase qo'shimcha nonce maydoniga nonce qo'shadi va keyin blok sarlavhasida ishlatilishi mumkin bo'lgan merkle ildizini olish uchun barcha operatsiyalarni merkle daraxtiga aylantiradi. Qachon qo'shimcha nonce maydonini o'zgartirish kerak bo'lsa, tog' -kon dasturiy ta'minoti merkle daraxtining kerakli qismlarini qayta tiklaydi va blok sarlavhasidagi vaqt va merkle ildiz maydonlarini yangilaydi.

Boshqa bitcoind RPC kabi, "getblocktemplate" ham HTTP orqali yuboriladi. Ko'pchilik konchilar HTTP longpoll yordamida "getblocktemplate" so'rovini har doim ochiq qoldiradilar. Bu konlar hovuziga tengdoshlar tarmog'idagi har qanday konchi yangi blokni e'lon qilsa yoki hovuz kon dasturiga ko'proq tranzaktsiyalarni yubormoqchi bo'lsa, konchi uchun yangi "getblocktemplate" ni surish imkonini beradi.

Qatlam¶

"Getblocktemplate" ga keng qo'llaniladigan alternativ - bu qatlam qazib olish protokoli. Stratum konchilarga o'z -o'zidan blok sarlavhalarini yaratish uchun zarur bo'lgan minimal ma'lumotlarni berishga qaratilgan:

Hovuzni to'lash uchun tangalararo bitim tuzish uchun zarur bo'lgan ma'lumotlar.

Coinbase tranzaktsiyasi yangi qo'shimcha nonce bilan yangilanganida, yangi merkle ildizini yaratish uchun qayta kesish kerak bo'lgan merkle daraxtining qismlari. Merkle daraxtining boshqa qismlari, agar mavjud bo'lsa, jo'natilmayapti, bu esa tranzaktsiya hajmida taxminan bir kilobaytga yuborilishi kerak bo'lgan ma'lumotlarning miqdorini samarali cheklaydi.

Keyingi blok uchun blok sarlavhasini tuzish uchun zarur bo'lgan boshqa barcha ildiz ma'lumotlari.

Aktsiyalarni qabul qilish uchun kon hovuzining maqsadli chegarasi.

Qabul qilingan coinbase tranzaksiyasidan foydalanib, qazib olish dasturi coinbase qo'shimcha nonce maydoniga nonce qo'shadi, coinbase tranzaksiyasini xesh qiladi va merkle daraxtining qabul qilingan qismlariga xash qo'shadi. Daraxt merkle ildizini yaratish uchun kerak bo'lganda kesiladi, u qabul qilingan blok sarlavhasi ma'lumotiga qo'shiladi. Qachon qo'shimcha nonce maydonini o'zgartirish kerak bo'lsa, qazib olinadigan dasturiy ta'minot tangalar bazasi tranzaktsiyasini yangilaydi va qayta joylashtiradi, merkle ildizini tiklaydi va sarlavha merkle ildiz maydonini yangilaydi.

"Getblocktemplate" dan farqli o'laroq, Stratum -dan foydalanadigan konchilar hozirda qazib olayotgan blokni tekshira olmaydi yoki qo'sha olmaydi. Bundan tashqari, "getblocktemplate" dan farqli o'laroq, Stratum protokoli ikki tomonlama TCP soketini to'g'ridan-to'g'ri ishlatadi, shuning uchun konchilar hovuzlaridagi yangi bloklar tengdoshlariga uzatilganda darhol yangilanishlarni olishlari uchun HTTP longpoll-dan foydalanishlari shart emas. tarmoq.

Resurslar:GPLv3 BFGMiner tog'-kon dasturi va AGPLv3 Eloipool kon havzasi dasturi konchilar va hovuzlar orasida keng qo'llaniladi. Libblkmaker C kutubxonasi va python-blkmaker kutubxonasi, MIT litsenziyaga ega, sizning dasturlaringiz uchun GetBlockTemplate-ni sharhlay oladi.