کان کنی

بکٹکائن کور کا فوری ٹور

ماہ پہلے، جب آدم بیک نے اس ٹویٹ کو بطسائن کلاسیکی "نیم ٹیسٹ کیا الفا کوڈ" کہا تھا، میں نے اسے نظر انداز کیا. لیکن آج انہوں نے ایک ریڈ ایٹ ایم اے اے کے ساتھ ریڈ ایٹ ایم اے اے پر مندرجہ ذیل گندی گرام پوسٹ کیا:

"کیا آپ سمجھتے ہیں کہ بی بی غیر فعال، چھوٹا سا تجربہ کیا، جزوی طور پر نافذ کیا ہے، جو کچھ بھی چل سکتا ہے اس سے کہیں زیادہ ہے. محدود ڈویلپر کا تجربہ، مؤثر طریقے سے کوئی QA اور Bitcoin سیکورٹی مینجمنٹ کے تجربہ کے ساتھ اور شاید اس کے بلاکس کے پیچھے لوگوں کے لئے نیٹ ورک کو برباد کر دے گا؟ ...

اگر آپ ان میں سے کوئی سوالات پر مجبور اور قائل دلائل فراہم نہیں کرسکتے تو میں تجزیہ کرتا ہوں کہ آپ تک پہنچنے اور ڈویلپرز سے گفتگو کریں. "(لنک)

آدم، آپ کے بیان کے برعکس (جو رائے سے متعلق ہے ابھی تک صفر حقیقی اعداد و شمار پر مشتمل ہے)، میں اس پوسٹ میں کچھ" زبردست اور قائل کرنے والے دلائل "فراہم کروں گا.

لیکن سب سے پہلے میں یہ کہنے کی ضرورت ہے کہ میں نے بکٹکائن لامحدود شروع کرنے والے وجوہات میں سے ایک کو اس پوسٹ میں دیکھے جانے والے، غیر جانبدار اور اذیت پسندانہ رویے سے دور ہونے اور روزانہ کی بنیاد پر مختلف موضوعات سے متعلق فورمز میں دیکھنا تھا.

عام طور پر، بکٹکین لا محدود میں جب ہم کور بگ تلاش کرتے ہیں تو ہم صرف اس کو حل کرتے ہیں اور منتقل کرتے ہیں. مجھے محسوس ہوتا ہے کہ ہر مسئلہ کو Reddit trolls سے نکالنے میں منفی ماحول پیدا ہوتا ہے جو بٹکوینو کوششوں پر اثر انداز کرتی ہے.

لیکن مجھے لگتا ہے کہ کور ٹیم کو احساس پیدا کرنے کی کوشش کر رہی ہے کہ وہ بکٹکوز پر کام کرنے کے لئے منفرد ہیں اور یہ کام دوسرے مشن کے اہم ترقی سے کہیں زیادہ مشکل ہے.

اس پوسٹ کو یہ تصور متنازعہ کو تباہ کرنا چاہئے کہ بکٹکائن کور ٹیم کسی دوسرے انجنیر کے مقابلے میں کسی نہ کسی طرح بہتر یا زیادہ مستحکم ہے جو کیڑے کو میں دکھایا جائے گا. اگر آپ انجنیئر نہیں ہیں تو، ایک کو تلاش کریں (اسے تھوڑا سا سکونر نہیں ہونا چاہیے) اور ان کی فہرست ان کی رائے سے پوچھیں.

دراصل، Bitcoin لا محدود سب سے زیادہ معیار، سب سے زیادہ مستحکم، بٹکوئن کلائنٹ دستیاب ہے. ہمارے پاس اس دستاویز کے باقی حصوں میں نظر آئے گا جیسے ہمارے پاس معیار اور جانچ کی مضبوط عزم ہے. اگر آپ بطورائن کور "بروگرمر" ذہنیت سے تیار ہیں اور اگر آپ اپنے نظریات سے تھکاوٹ رکھتے ہیں تو ایک کور کمیٹی کے بغیر بغیر کسی طرح کے بغیر کچلنے کی کوشش کی جا رہی ہے، میں آپ کو ایک کوشش کرنے کی درخواست کروں گا.

مجھے لگتا ہے کہ آپ کو صورتحال بہت مختلف ہوگی - یہ ظاہر ہوتا ہے کیونکہ ہم اپنے آرٹیکل آف آرٹیکلز میں بیان کردہ تنظیمی نظام کی پیروی کرتے ہیں، جس میں اس معاملے میں ارکان کو اس جگہ کی اجازت دیتا ہے جہاں ایک ڈویلپر کمر کے ساتھ متفق ہے. یہ عمل بالآخر اس رکنیت کی طرف سے ووٹ دیا جائے گا، اور quantitatively قبول یا مسترد کرنے کی اجازت دیتا ہے.

لیکن کیڑے پر واپس: جیسا کہ ہم بکٹکو کور کور کوڈ میں ردی کی کھدائی کرتے ہیں، میں پوچھتا ہوں کہ آپ کو یاد ہے کہ کوئی بھی کامل نہیں ہے. یاد رکھیں کہ بہت سے معاون رضاکار ہیں، مزہ کرنے کے بجائے اس پر کام کرتے ہیں. اور لوگ بہت سے پس منظر، کرپٹو، نیٹ ورکنگ، سفید ٹوپی سے آتے ہیں، اور اپنی مہارت سے باہر غلطیوں کو مسلط کرنے کے قابل ہیں.

اس کے بجائے، میں چاہتا ہوں کہ آپ کو یہ احساس ہوا کہ یہ مسائل کور کے نظام میں ہیں، نہ کسی فرد. لہذا، براہ کرم اس کا پیچھا کرتے ہیں کہ اصل میں کوڈ کو کسی خاص مسئلے میں لکھا ہے. جی ہاں، ڈویلپر کی کیفیت 100 یا اس سے زیادہ کے عنصر سے مختلف ہوسکتا ہے، لیکن اس معیار کو دریافت کرنے کے لئے ضروری ہے کہ وہ غیر معمولی طور پر نہ ہو. میں نے اس کی پوزیشن کے لئے "ان کے" بگ کا انتخاب کیا، کسی کو بھی کچھ نہیں مل سکا.

آخر میں، براہ کرم نوٹ کریں کہ گزشتہ سال کے دوران ہم نے مختلف کور ریلیزز میں یہ کیڑے پایا. جبکہ میں اب بھی 0 سے زائد ریلیز یا ماسٹر شاخوں میں موجود کوڈ سے منسلک کر رہا ہوں، میرے پاس وقت نہیں ہے اور یہ بھی تعین کرنے کے لئے ہر ایک بار پھر آزمائش کا تعین کرنا ہے کہ وہ موجودہ رہائی میں ابھی بھی آسانی سے اظہار کیا جاۓ.

1. چلو کچھ پیسہ کماتے ہیں

خلاصہ: اگر آپ کو QT کلائنٹ میں پیسہ بھیجیں اور ایک بہت بڑی ٹرانزیکشن فیس شامل ہو تو، آپ کو ایک خرابی سے متعلق ڈائیلاگ باکس ملتا ہے کہ یہ فیس زیادہ حد تک بڑا ہے، ٹرانزیکشن بھیجا نہیں ہے لیکن پیسے سے کٹوتی ہے آپ کے بٹوے.

ٹھیک ہے، ٹھیک ہے، آپ شاید دراصل تھوڑا سا ٹوکری نہیں کھو چکے ہیں- اگر آپ اپنے بٹوے کو بلاچین ڈیٹا کے ساتھ دوبارہ بھیجیں گے تو آپ پیسہ دوبارہ لوٹ لیں گے. لیکن کون جانتا ہے کہ یہ کس طرح کرنا ہے، اور کیا ہم عام صارف کو گھبراہٹ کرنے کی توقع کر سکتے ہیں؟

آپ کو یہاں مسئلہ "CommitTransaction" میں AcceptToMemoryPool پر کال میں دیکھ سکتے ہیں. 2460 لائن پر لین دین میں بٹوے شامل ہیں. لیکن اس نے 2481 لائن پر میموری پول میں شامل کیا. اور دیکھو، ڈویلپر نے ایک تبصرہ شامل کیا "// یہ ناکام نہیں ہونا چاہیے. ٹرانزیکشن پہلے ہی دستخط اور ریکارڈ کیا گیا ہے. "لیکن اگر یہ ناکام ہوتا ہے تو کیا ہوگا؟ اگر فنکشن کبھی نہیں ناکام ہو تو، یہ کیوں بولی واپس آئے گا؟

حقیقت میں، یہ ناکامی کرتا ہے، بہت سے معاملات میں غلط واپس. خاص طور پر، اگر صارف کو "بے حد اعلی فیس" فراہم کرتا ہے.

ایک غیر معمولی اعلی فیس کی جانچ ایک سال پہلے 0. 0. 0 وقت کا فریم میں شامل کیا گیا تھا. کیا ڈیولپر نے اس چیک کی تلاش کو قبول کیا ہے جو قبول کرنے کے لئے AcceptToMemoryPool کے استعمال کے لۓ اس کی واپسی کی قیمت مناسب طریقے سے سنبھال لی جائے گی؟ نہیں، اس نے تبصرہ دیکھا ہوگا. کیا اس نے ایک یونٹ ٹیسٹ بنایا تھا؟ نہیں، اس نے بگ دیکھا ہوگا. کیا وہ ہاتھ سے کوڈ بھی آزماتا تھا؟ مجھے اسی وجہ سے شک ہے. کیا میں نے "ناکام" واپس لے سکتا ہے ایک تقریب کے لئے ایک پل کی درخواست میں ایک "// یہ ناکام نہیں" تبصرہ قبول کرے گا؟ بالکل نہیں.

یہ کوڈ ایک سال سے زائد عرصے تک کور کی طرف سے زیر زمین بیٹھ گیا ہے. ہم نے گزشتہ جنوری کو مقرر کیا تھا اور مقررہ کوڈ ہمارے ذخیرہ میں اس لمبے عرصہ سے دستیاب ہے. Bitcoin لا محدود عمل کا ایک فائدہ یہ ہے کہ ہم سب دیگر ترقیاتی ٹیموں سے بہترین کام اٹھائیں ...

اپ ڈیٹ: کور ڈویلپرز کی جانب سے بہت زیادہ ردعمل کی تصدیق کی گئی ہے (مضبوط ترقیاتی ٹیم سے اچھا جواب نہیں ہے. ، راستے سے) لہذا میں نے ایک ویڈیو بنا دیا جس میں تھوڑا سا اسٹاک Bitcoin کور 0. چل رہا ہے. 12. 1 رہائی بائنری ڈاؤن لوڈ. اس ویڈیو میں آپ کو 110 سے زائد بی ٹی ٹی کے ساتھ شروع ہو جائے گا، اپنے آپ کو 100 BTC بھیجیں گے، غلطی کا پیغام ملیں اور تقریبا 10 بی ٹی ٹی کے ساتھ ختم ہوجائیں گے.

2. گلوبل ڈویلپر اور تباہ کن آرڈرنگ: ردی کی ٹوکری کے ساتھ ردی کی ٹوکری کو ٹھیک کرنا

خلاصہ: "ترجمہ یونٹس" (فائلیں) بھر میں عالمی متغیرات کی تعمیر اور تباہی کا حکم C ++ زبان میں غیر منحصر ہے، لیکن کور کوڈ میں انٹر فائل پر متعدد متغیر عالمی متغیر ہے. اس مسئلہ کا ایک اثر اضافی غیر معمولی طرز عمل کے استعمال سے تازہ ترین کور کی رہائی میں "حل" ہے.

مسئلہ کا سب سے آسان مثال CCriticalSection کی طرف سے استعمال ہونے والے mutex تالے ہے. یہ چیزیں کسی بھی دوسرے چیز کے بعد جو کہ CCriticalSection پر مشتمل ہے اس سے قبل اس کو تعمیر کرنے کی ضرورت ہے، لیکن CCriticalSection عالمی متغیرات دیگر ماڈیولز (نیٹ، سی پی پی، مین، سی پی پی، اور RPcwallet کے لئے سی پی، 3 پر قبضے میں) میں اعلان کی جاتی ہے. لہذا سی کمپائلر اس بات کی ضمانت نہیں دے سکتا کہ سی سی آرٹیکل ایس ایس کا استعمال اس سے قبل متقابل دستیاب ہے.

غیر معمولی رویے کے معاملات کے کسی بھی استعمال میں عام طور پر صرف متبادل پلیٹ فارمز جیسے ونڈوز اور میک، یا متبادل آرکیٹیکچرز (آرمی) پر نظر آتے ہیں، کیونکہ اگر وہ عام ترقی پلیٹ فارم پر دیکھے جاتے ہیں تو وہ مقرر ہوجائیں گے. یا ارد گرد کام کیا (جیسا کہ ہم نیچے دیکھیں گے). لیکن اعلی معیار کا کوڈ پیدا کرنے کے لئے جو متعدد پلیٹ فارمز پر مسلسل مسلسل چلتا ہے، ڈویلپرز کو پروگرامنگ کی زبان کی مقرر کردہ حدود میں رہنے کی ضرورت ہے.

بٹکوئن لا محدود گروپ میں، ہمارے ڈویلپرز روزانہ ونڈوز اور لینکس مشینیں پر کام کرتے ہیں، اور میں ذاتی طور پر ونڈوز، لینکس، میک اور آرم لینکس مشینیں اپنے "لیب" میں کلائنٹ 24x7 چل رہا ہوں. ہم نے پہلے ہی یہ مسئلہ میک پلیٹ فارم پر بنیادی ڈمپ کے طور پر دیکھا. مسئلہ کو حل کرنے کے لئے، ہم "گلوبلز" نامی وقف شدہ فائل میں تمام انحصار عالمی متغیرات رکھتی ہیں. cpp ". چونکہ تمام منحصر عالمی دنیا اب ایک "ترجمہ یونٹ" میں ہیں، تعمیراتی اور تباہ کن آرڈر کو اچھی طرح سے بیان کیا جاتا ہے. یہ معروف مسئلہ کا ایک عام حل ہے.

ان کے تازہ ترین ورژن میں، Bitcoin کور نے بھی مسئلہ کو حل کیا ہے. سب سے پہلے، مصنف کا تبصرہ ملاحظہ کریں؛ اس بات کا نوٹس ہے کہ یہ مسئلہ "کی وضاحت کرتا ہے جیسا کہ" گلوبل ڈویلپرز اور ہتھیاروں کا واحد واحد دھاگہ چلتا ہے ". یہ سختی سے مشورہ دیتا ہے کہ وہ اس معاملے کو اصل میں سمجھ نہیں پائے کیونکہ اس "واحد موضوع" حقیقت غیر متعلقہ ہے. دوسرا، مصنف اصل میں یہ "بہت بدسورت ہیک" کے طور پر شناخت کرتا ہے، اس کوڈ سے ہم غلط استعمال کو روک سکتے ہیں.

اگلا، ہم حل کے کوڈ کی جانچ پڑتال کرتے ہیں. مصنف نے نئے "دستیاب" گلوبل متغیر کے ساتھ کسی بھی ساخت میں کچھ عالمی متغیرات رکھتی ہیں. اگر "دستیاب" سچ ہے تو، dd_mutex استعمال کیا جاتا ہے. اگر یہ نہیں ہے تو یہ نظر انداز کر دیا جاتا ہے. تاہم، یاد رکھیں کہ "دستیاب" اعتراض کو پہلے ہی "غلط" میں مقرر کیا گیا ہے. لہذا مصنف ریم پر اعتماد رکھتا ہے جس میں "دستیاب" موجود ہے اب بھی متغیر کی تباہی کے بعد قدر "جھوٹ" ہے. یہ مشہور C / C ++ "مفت بگ کے بعد استعمال" کا ایک عمدہ استعمال ہے. مسئلہ یہ ہے کہ C اور C ++ میں، تباہی کے بعد متغیر کی قدر غیر منقول ہے لہذا اس بات کی کوئی ضمانت نہیں ہے کہ "دستیاب" متغیر "جھوٹے" رہیں گے یا اس سے بھی میموری تک رسائی حاصل ہوگی.

خرابی پر مبنی رویے پر انحصار کی وجہ سے ایک مسئلہ کو حل کرنے کے لئے بے ترتیب سلوک پر بکٹکائن کور کوڈ پر زور دیا جاتا ہے. ایک بہت آسان جزوی حل ضرور "دستیاب" عالمی متغیر ایک علیحدہ ابتدائی عالمی بنانے کے لئے ہو گا کیونکہ پرائمریوں کو تعمیر نہیں کیا گیا ہے، ابھی تک یہ درست / غلط لاکاٹا کے کرٹر / ڈٹر میں مقرر کیا گیا ہے ... ایک ایسا ہونا ضروری ہے کہ یہ خیال کیوں نہیں تھا استعمال کیا جاتا ہے.

لیکن یہ سادہ حل بنیادی مسئلہ کو نظر انداز کرتا ہے - ایک اہم کوڈ سیکشن کی حفاظت کے لئے ایک متقابل ضرورت ہے. اس کی عام طور پر "ٹھیک" نہیں ہے کہ نیچے کی تہوں کو تالا لگا یا غیر مقفل کرنے کا انتخاب کرنے کے لۓ، اگرچہ اوپر کی تہوں نے تالا / انلاک کو بلایا ہے. اور آخر میں یہ "حل" صرف ان 3 گلوبلز کے لئے مسئلہ کو حل کرتا ہے، دوسرے دیگر انحصار عالمی متغیرات کو نظر انداز کر رہا ہے ...

3. Crashes

خلاصہ: میں کئی حادثات میں سے ایک کا اشتراک کرتا ہوں جو کثیر موضوع سے متعلق مسائل کی وجہ سے ہے جب CNOD اشیاء کو پوائنٹس کا استعمال کرتے ہوئے.

Bitcoin لا محدود میں ہم بڑے بلاکس کی جانچ کر رہے ہیں لہذا ہمیں آج استعمال کیا جا رہا ہے اس سے کہیں زیادہ تیزی سے بٹکوئن ٹیسٹ کے نیٹ ورک کو چلانے کی ضرورت ہے (مثال کے طور پر، آپ اپنے کام کو بہتر بنانے کے لیئے ٹرانزیکشن نسل دیکھ سکتے ہیں جس سے ہمیں ٹرانزیکشن 1000 مرتبہ پیدا ہوتا ہے. آج کل کور کلائنٹ سے زیادہ ہے). اس کوڈ کے ساتھ 10 یا اس طرح کے دنیا بھر میں نوڈس چل رہے ہیں جو Bitcoin ٹیسٹ کے لئے لا محدود استعمال کرتا ہے، ہم گھنٹے میں استعمال کے مہینے میں چل رہے ہیں. ٹیسٹنگ کی شدت کا مطلب یہ ہے کہ غیر معمولی مسائل بڑھتے ہیں.

تو ہاں، بہت سی حادثات ہوسکتے ہیں کہ ہم براہ راست کور کوڈ کو ٹریس کر سکتے ہیں.

چلتے ہیں ایک سے زیادہ:

خالص. سی پی پی ایک مددگار فنکشن "FindNode" ہے جسے نوڈ کی فہرست کے ذریعہ نظر آتا ہے اور ایک مماثلت نوڈ واپس آتا ہے. اصل میں، 5 FindNode افعال ہیں اور ان سب میں ایک ہی مسئلہ ہے. نوڈ کی فہرست کے ذریعہ تلاش کرنے کے دوران فنکشن کو مناسب طریقے سے نوڈ mutex (cs_vNodes) تالے دیتا ہے، اور پھر یہ cs_vNodes انلاک کرتے ہوئے، نوڈ نوڈ پر ایک پوائنٹر واپس کرتا ہے.

بدقسمتی سے، یہ ایک کثیر دھاگے کی درخواست ہے، لہذا جیسے ہی ملٹی غیر مقفل ہوجاتا ہے، دوسرا دھاگے نوڈ سے منسلک ہوجاتا ہے اور نوڈ اعتراض کو خارج کر دیتا ہے. یہ ایک بنیادی ڈمپ بناتا ہے (یا خرابی کو خراب کرنا) جیسے ہی کالر خارج شدہ اعتراض کو استعمال کرنے کی کوشش کرتا ہے.

کوڈ میں FindNode کے 7 استعمال ہیں. مجھے یاد نہیں ہے کہ یہ سب یا زیادہ تر اکثریت تھی جس نے اپنے cs_vNodes کے تالا لگا نہیں کیا. فوری حوالہ کے لئے، یہاں ایک ہے.

صحیح حل cs_vNodes غیر مقفل کرنے سے پہلے یا نوڈ کو حوالہ دیتے ہیں یا "AssertLockHeld" کا استعمال کرکے cs_vNodes کو تالا لگا کرنے کے لۓ درست حل کرنا ہے.

اس مسئلے کی وجہ سے، اور دوسرا، ایک حملہ آور کے لۓ یہ نظریاتی طور پر ممکنہ طور پر صحیح لمحے پر منقطع ریموٹ نوڈ کو حادثہ کرنا ممکن ہو گا. تاہم، میں اپنے ٹیسٹ کے دوران اس استحصال کو "ہتھیار ڈالنے" میں ناکام رہا تھا لہذا مجھے محسوس ہوتا ہے کہ آج عوامی افادیت میں بہت کم خطرہ ہے.

اختتام

مجھے امید ہے کہ جب ان مسائل کو پڑھنے کے لۓ، آپ کو یہ احساس ہو جائے گا کہ بکٹکوئن لا محدود ٹیم اصل میں سب سے زیادہ محتاط کمیٹی اور امتحان رکھنے والا ہے، جس میں بہت وسیع اور وقف ٹیسٹ کی بنیادی ڈھانچہ ہے.اور میں امید کرتا ہوں کہ آپ کو یہ بکٹوئن کور مل جائے گا جس میں مشکل اور گستاخی نہیں ہے، لیکن سادہ معاملات جو اوسط سوفٹ ویئر انجینئرز کے نام سے مشہور ہیں اور وہ "بہت بدسورت ہیک" کا کوڈ انجام دیتے ہیں جو ایک ضروری کے لئے لازمی دیکھ بھال کی عکاسی نہیں کرتے. مالیاتی نیٹ ورک

مجھے امید ہے کہ آپ کو پتہ چلتا ہے کہ، آدم بیک اور دوسروں کے بیانات کے برعکس، کور ٹیم میں منفرد مہارت اور صلاحیتوں کی ضرورت نہیں ہے جو انہیں اس نیٹ ورک کو منظم کرنے کے قابل ہو.