توسط: برت مکلین، مدیر مهندسی – کریپتو، فیات، استیکینگ
اگر به ارزهای رمزنگاری شده، پرداختها یا سرمایهگذاری علاقه دارید و میخواهید به ساختن سیستم مالی آینده کمک کنید، تیم مهندسی سرمایه @ Kraken در حال استخدام است!
هنگامی که Kraken یک دهه پیش راه اندازی شد، تنها سه ارز دیجیتال پشتیبانی می شدند: BTC، LTC و XRP.
امروزه کراکن از 82 دارایی در 33 بلاک چین و خدمات سهامداری برای 8 ارز دیجیتال پشتیبانی می کند.
برای تسهیل میلیونها سپرده، برداشت و تراکنش در سال در Kraken، تیم مهندسی کریپتو صدها سرویس را برای اطمینان از جریان روان وجوه در داخل و خارج از صرافی اجرا میکند. نرمافزار بلاکچین که زیربنای این خدمات است، اغلب بهروزرسانی میشود. برای برخی از بلاک چینهای فعالتر، فورکهای سخت و نرم میتوانند ماهیت ماهانه داشته باشند، در حالی که برخی دیگر مانند اتریوم دو بار رویداد سالانه هستند. به طور کلی هر هفته حداقل چند به روز رسانی نرم افزاری برای زیرساخت بلاک چین ما وجود دارد.
چالش پشتیبانی و به روز رسانی چنین تعداد زیادی از سرویس های مختلف و در عین حال ساخت سرویس های جدید می تواند دلهره آور باشد.
در 12 ماه گذشته تیم ما پشتیبانی برای موارد زیر را اضافه کرده است:
- 60 ارز دیجیتال جدید:
- 39 عدد توکن ERC20
- Polkadot (در راه اندازی شبکه اصلی)
- کوشامه
- فایل کوین (در راه اندازی شبکه اصلی)
- جریان (در راه اندازی شبکه اصلی)
- کاوا
- توکن وب انرژی (در زمان راه اندازی شبکه اصلی)
- USDT (TRC20)
- 10 x پاراچین Crowdloans
- سولانا
- 1 عدد توکن SPL (سرم)
- مینا
- 8 دارایی سهام جدید:
- Polkadot (در راه اندازی شبکه اصلی)
- کوشامه
- اتریوم 2.0 (در راه اندازی شبکه اصلی)
- جریان (در راه اندازی شبکه اصلی)
- کاردانو
- کیهان
- کاوا
- سولانا
این دستاوردها در کنار حفظ ادغام های موجود ما به دست آمد. مهندسان تیم کریپتو نه تنها مسئول نرم افزار دروازه نوشته شده در خانه هستند، بلکه مسئول نگهداری و استقرار زیرساخت بلاک چین ما هستند که دروازه های ما به آن متکی هستند. سرعت توسعه بلاک چین در این پروژه ها می تواند تاول زا باشد، با تغییرات شکسته و ویژگی های جدید جدید که اغلب و گاهی اوقات با هشدار کمی ارائه می شود.
بنابراین، چگونه کراکن موفق می شود هر سال ده ها محصول جدید را منتشر کند و در عین حال با سرعت توسعه بلاک چین همگام باشد؟
پایان به پایان (E2E) تست!
چرا ما برای تست های E2E ارزش قائل هستیم و از تمسخر اجتناب می کنیم
از همان روزهای اولیه در Kraken، تاکید بر این بوده است که تستهای E2E با ارزشترین نوع تستهایی هستند که یک مهندس میتواند بسازد. تستهای واحد جایگاه خود را دارند، اما بسیاری از توسعهدهندگان بیتجربه با ادغامهای پیچیده تمایل دارند برای هر قطعه کدی که میسازند، تستهای واحد بنویسند، با این باور که کیفیت کلی نرمافزاری را که در حال توسعه هستند بهبود میبخشند.
این مسیر، در حالی که پر از نیت های خوب است، اغلب می تواند به دردسرهای زیادی در مسیر منجر شود. اتکای بیش از حد به آزمون های واحد، معماری شما را تقویت می کند. مثل ریختن یک لایه اپوکسی روی کل پایه کدتان است. شما به شدت کد را با آزمایشهای آن مرتبط میکنید، و کد را سفتتر، غیرقابل انعطافتر و مقاومتر در برابر دوبارهسازی میکنید. اگر نیاز به ایجاد تغییر دارید، احتمالاً باید تغییرات قابل توجهی در تست ها ایجاد کنید و در برخی موارد، آنها را به طور کامل کنار بگذارید. کد Refactoring یک قابلیت کلیدی برای یک تیم مهندسی است که در جعبه ابزار خود داشته باشد و هر چیزی که اصطکاک را به سهولت refactoring اضافه کند باید قبل از معرفی به دقت ارزیابی شود. هنگام بازسازی کد، یک تست E2E که به خوبی طراحی شده است، اغلب به تغییرات زیادی نیاز ندارد، و انعطافپذیری را در تنظیم بخشهای داخلی یک برنامه فراهم میکند و در عین حال اطمینان میدهد که همانطور که انتظار میرود به کار خود ادامه میدهد.
این به این معنی است که نباید تست های واحد بنویسید؟ اصلا! سناریوهای زیادی وجود دارد که در آن تست های واحد راه حل عالی هستند، با این حال ما دریافتیم که برای ادغام های پیچیده، تست های E2E بهتر کار می کنند. به طور کلی، تست های واحد زمانی موثرتر هستند که برای کدهایی نوشته شوند که معیارهای زیر را برآورده می کنند:
- از لحاظ الگوریتمی پیچیده با بسیاری از موارد لبه.
- دارای محدوده دقیق با الزامات به خوبی تعریف شده است.
- یک واحد کار را تکمیل می کند.
- بی تابعیت
این قطعات کوچک و با دامنه دقیق کد پیچیده اغلب بلوک های سازنده یک برنامه کاربردی بزرگتر هستند و حتی اگر یک Refactor رخ دهد، این توابع بعید است که تغییر کنند. در دنیای ما مواردی مانند استخراج آدرس، اعتبار سنجی آدرس، امضای تراکنش و غیره خواهد بود.
نکته کلیدی در اینجا این است که به عنوان یک تیم مهندسی کوچک، هیچ راهی وجود ندارد که بتوانیم حجم خدماتی را که در حال حاضر پشتیبانی می کنیم، حفظ کنیم. و ساخت محصولات جدید بدون آزمایش های پایانی تستهای واحد باید به عنوان میز در نظر گرفته شوند، اما بهطور مجزا، برای ما کافی نیستند تا در این فضای در حال تکامل ادامه دهیم. درعوض، ما سرمایهگذاری هنگفتی را روی مجموعههای قوی از یکپارچهسازی و تستهای E2E انتخاب کردهایم که تأیید میکنند خدمات ما در رایجترین حالتهای عملکردشان با موفقیت کار میکنند.
چالش های آزمون E2E
اگرچه تستهای E2E میتوانند قدرتمند باشند، اما نوشدارویی نیستند. هنگام ادغام با سرویسهای شخص ثالث، این نوع آزمایشها اغلب ارزش خود را از دست میدهند، زیرا برای آزمایش کامل جریان یک تابع یا تماس خاص، باید نقاط پایانی یا رابطهای خاصی مورد تمسخر قرار گیرند. Mock ها فقط به اندازه درک شما از سرویسی است که مسخره می کنید، و در نتیجه، زمانی که به روز رسانی ها مکرر و ماهیت زیادی دارند، ممکن است مستعد خطا باشند. حفظ کد خود و همچنین مسخره کردن شما، نقض اصل DRY است (خودتان را تکرار نکنید)، اصطلاحی که توسط دیوید توماس و اندرو هانت در "برنامه نویس عملی" ابداع شده است. آنها در کتاب خود بیان میکنند که «هر دانشی باید یک بازنمایی واحد، بدون ابهام و معتبر در یک سیستم داشته باشد». ایجاد یک نسخه مسخره شده از هر سرویس به این معنی است که اکنون دو نسخه بالقوه متفاوت از سرویس مذکور وجود دارد: نسخه مسخره شده شما و نسخه واقعی. خطاها در ترجمه رفتار وابستگی مسخره شده اکنون نگرانی دیگری است که باید به آن توجه کرد.
آزمایش مجدد برای نجات
خوشبختانه برای ما، اکثر بلاک چینها از توانایی اجرای شبکههای خصوصی موقتی پشتیبانی میکنند که میتوانند به عنوان بخشی از فرآیند ادغام مداوم (CI) / استقرار مداوم (CD) ما بچرخند. محبوب ترین مثال در این مورد، حالت تست رگرسیون بیت کوین (regtest) است. هنگامی که بیت کوین را با گزینه «-regtest» شروع می کنید، یک محیط بلاک چین محلی جدید ایجاد می کند که کنترل کاملی روی آن دارید. ویژگی کلیدی حالت regtest این است که می توانید تعداد دلخواه بلوک را به دلخواه استخراج کنید و به تست های E2E خود اجازه می دهد تا سفرهای رفت و برگشت را برای واریز و برداشت از همه نوع و تنوع انجام دهند و صدها سناریو را در عرض چند ثانیه شبیه سازی کنند. موارد لبه و دیگر سناریوهای منحصربهفرد را میتوان به راحتی در حالت regtest شبیهسازی کرد، مانند تراکنشهای چندشاخهای، سازمانهای مجدد، جایگزینی با هزینه (RBF)، پرداخت فرزند برای والدین (CPFP) و موارد دیگر! این آزمایشها نه تنها تضمین میکنند که کد ما فاقد خطاست، بلکه وضعیت پایان بلاک چین و دفتر کل ما را نیز تأیید میکند تا اطمینان حاصل شود که همه چیز طبق انتظار عمل میکند.
به عنوان بخشی از فرآیند افزودن پشتیبانی از یک ارز دیجیتال جدید در Kraken، تیم تامین مالی یک چارچوب آزمایش ثبت نام برای همه لیستهای جدید ایجاد میکند. این کد پایه و اساس رژیم تعمیر و نگهداری ما است: هر زمان که نسخه جدیدی منتشر می شود، به سادگی به روز رسانی نسخه گره بلاک چین و اجرای مجدد خط لوله CI ما برای اطمینان از عدم ایجاد تغییرات قطعی است. خواندن دقیق یادداشتهای انتشار و همکاری با جامعه همچنان بسیار ضروری است، اما این آزمایشها به ما اطمینان میدهند که نسخههای جدیدی را منتشر کنیم که در غیر این صورت نمیتوانستیم داشته باشیم.
راه حل های خلاقانه
متأسفانه برای ما، همه بلاک چین ها به اندازه بیت کوین آزمایش نبرده اند. بلاکچینهای جدید اغلب مفاهیم جدیدی را معرفی میکنند، و برای اینکه به مشتریان خود دسترسی به هیجانانگیزترین فناوریهای جدید را ارائه دهیم، Kraken ترجیح میدهد پشتیبانی از بلاک چینهای جدید را تا حد امکان نزدیک به شروع شبکه اصلی راهاندازی کند. برای پشتیبانی ایمن از یک دارایی جدید در تاریخ راهاندازی یا نزدیک به آن، کراکن گاهی اوقات نیاز به توسعه مهارهای آزمایشی پیچیده دارد تا در یکپارچگی اطمینان حاصل کند و اطمینان حاصل کند که وجوه مشتری در خطر نیست.
یک نمونه کامل از این موضوع زمانی است که کراکن پشتیبانی از اتریوم 2.0 را تنها 3 روز پس از راه اندازی شبکه اصلی در 1 دسامبر 2020 راه اندازی کرد. اگرچه هزاران فرد و شرکت در سراسر جهان به آزمایش اتریوم 2.0 در چندین شبکه آزمایشی مانند مدالا و اسپادینا کمک کردند، ما هنوز تصمیم گرفتیم مفهوم regtests را با این ادغام به سطحی دیگر ببریم. اوایل می دانستیم که اتریوم 2.0 توسعه قابل توجهی خواهد بود، و این باور ثابت شده است که میلیون ها ETH تا کنون در زنجیره فانوس، از جمله بیش از 800,000 ETH که توسط مشتریان Kraken به اشتراک گذاشته شده است، صادق است.
در زیر میتوانید نموداری از مجموعه خدماتی را مشاهده کنید که خط لوله یکپارچهسازی پیوسته (CI) ما هر بار که یک توسعهدهنده کد را به یکی از مخزنهای کد ETH2 ما متعهد میکند، چرخیده و از بین میرود.
در سطح بالا، جریان تست به صورت زیر است:
- گرههای اولیه و جایگزین ETH1 (هر کدام به نوبت برای اجماع استخراج میکنند) با یک پیدایش که حاوی مقدار اولیه ETH برای آزمایش است، شروع کنید.
- ETH2 beacon chain node را بهعنوان یک زنجیره خصوصی با استفاده از یک حالت پیکربندی حداقلی که در آن تنها ۱۶ اعتبارسنجی برای فعالسازی پیدایش لازم است، راهاندازی کنید.
- قرارداد هوشمند ETH2 را در بلاک چین ETH1 مستقر کنید.
- ETH را به قرارداد سپرده ETH2 واریز کنید که در آن وجوه سوزانده می شود و اعتبار سنجی در گره اعتبارسنجی خارجی ETH2 ایجاد می شود. اینها اعتباردهندههایی هستند که فقط شبکه ETH2 را کار میکنند و به گونهای رفتار میشوند که گویی خارج از هر اعتبارسنجی Kraken هستند.
- کاوشگرهای بلوک ETH1 و ETH2 را راه اندازی کنید.
- پایگاه داده را شروع کنید.
- راه اندازی دروازه و امضا کنندگان.
- درج درخواست های مشتری برای سهام ETH -> ETH2.
- Gateway درخواستهای مشتری را دریافت میکند و ETH را به قرارداد سپرده در بلاک چین ETH1 ارسال میکند و تعداد مربوطه اعتباردهنده را در گره اعتبارسنجی داخلی ETH2 ایجاد میکند. اعتبارسنجیها به مجموعههای اعتبارسنجی داخلی و خارجی تفکیک میشوند تا بتوانیم آزمایش کنیم که وقتی اعتباردهندههای ما از کار میافتد (برای آزمایش کاهش، جریمهها، پاداشهای از دست رفته) چه اتفاقی میافتد، و ببینیم وقتی بقیه شبکه از کار میافتد یا آفلاین میشود، چه اتفاقی میافتد اما اعتبارسنجیهای ما. بالا باقی بماند
- نظارت کنید تا اعتباردهندهها در زنجیره ETH2 فعال شوند، شروع به ردیابی پاداشها، پرداختها، کاهش تست و جریمهها، شناسایی پاداش از دست رفته و پرداخت پاداش به مشتریان کنید.
- فرآیند تطبیق مالی جداگانه ما را روی همه تراکنش ها اجرا کنید تا مطمئن شوید همه چیز در همه دفترهای ما به درستی مطابقت دارد.
موارد فوق تنها خلاصه سطح بالایی از آنچه در چارچوب آزمون ما می گذرد است. تعدادی آزمایش، بررسی و اعتبارسنجی دیگر نیز وجود دارد. اگر یک توسعهدهنده نیاز به اشکالزدایی داشته باشد یا به وضعیت هر یک از شبکهها نگاه کند، میتواند با کاوشگرهای بلوک مشورت کند تا ببیند دقیقاً در یک نگاه چه اتفاقی افتاده است. ما معمولاً کاوشگرهای بلوک را در خط لوله CI خود قرار نمی دهیم، اما با توجه به پیچیدگی یکپارچه سازی، در مرحله توسعه برای تجسم آنچه در زنجیره اتفاق می افتد مفید بود.
ممکن است فکر کنید که این تاخیر زیادی به خط لوله CI ما اضافه می کند، اما خوشبختانه اینطور نیست. در حال حاضر، اجرای کامل خط لوله CI برای مخزن اتریوم 2.0 ما تنها 14 دقیقه طول می کشد. این شامل ممیزی/ایجاد همه وابستگیها، شروع تمام خدمات، استقرار قراردادهای هوشمند مختلف در زنجیره بلوکی، بلوکهای استخراج، ایجاد اعتبارسنجی و سپس اجرای تمام سناریوهای آزمایشی بیش از 100 است.
افکار نهایی
توسعه تست های جامع E2E برای هر یکپارچه سازی بلاک چین در Kraken مقدار قابل توجهی از منابع مهندسی را مصرف می کند. این بهایی است که ما با کمال میل می پردازیم، زیرا مهمترین دغدغه ما ایمنی سرمایه مشتریان و اطمینان از داشتن تجربه با کیفیت در پلتفرم ما است. آیا تیم ما میتواند محصولات بیشتری را عرضه کند اگر زمان کمتری را برای آزمایشها در هنگام ساختن ادغامهای جدید صرف کنیم؟ بدون سوال. با این حال، انجام این کار برخلاف اخلاق و ارزشهای نه تنها تیم مهندسی، بلکه کل شرکت است. این آزمایشها تضمین میکنند که ما میتوانیم با خیال راحت به نسخههای جدید نرمافزار بلاکچین بهروزرسانی کنیم، اعتماد به نفس را در طول فورکهای سخت/نرمافزار افزایش دهیم و استرس توسعهدهندگان را هنگام اعمال تغییرات کاهش دهیم.
چرا مهندسان کراکن از معتبرترین مهندسان در صنعت هستند؟ این پیام از استیو هانت، معاون مهندسی کراکن، ارزش ها و تعهد ما برای کمک به دیگر مهندسان بلاک چین را تشریح می کند.
منبع: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- دسترسی
- حساب
- فعال
- معرفی
- تمام معاملات
- اجازه دادن
- کاربرد
- معماری
- دور و بر
- دارایی
- دارایی
- نبرد
- زنجیره چراغ
- بیت کوین
- بلاکچین
- BTC
- ساختن
- بنا
- صدا
- موارد
- به چالش
- تغییر دادن
- چک
- کودک
- رمز
- همکاری
- آینده
- مشترک
- انجمن
- شرکت
- شرکت
- اعتماد به نفس
- اجماع
- ادامه
- قرارداد
- قرارداد
- ایجاد
- عضو سازمانهای سری ومخفی
- ارز رمزنگاری
- کریپتو کارنسی (رمز ارزها )
- پایگاه داده
- مقدار
- تاخیر
- کشف
- توسعه
- توسعه دهنده
- توسعه دهندگان
- پروژه
- مدیر
- در اوایل
- لبه
- موثر
- مهندس
- مهندسی
- مورد تأیید
- محیط
- ERC20
- ETH
- ethereum
- Ethereum 2.0
- اخلاق
- حوادث
- تبادل
- FAST
- ویژگی
- امکانات
- حکم
- مالی
- انعطاف پذیری
- جریان
- چارچوب
- کامل
- تابع
- بودجه
- بودجه
- آینده
- سوالات عمومی
- پیدایش
- خوب
- بزرگ
- اینجا کلیک نمایید
- زیاد
- خانه
- چگونه
- HTTPS
- صدها نفر
- از جمله
- افزایش
- صنعت
- شالوده
- ادغام
- یکپارچگی
- انزوا
- IT
- نگهداری
- کلید
- دانش
- Kraken
- بزرگ
- راه اندازی
- رهبری
- سطح
- لیست
- محلی
- LTC
- ساخت
- استخراج معدن
- ماه
- محبوبترین
- چندرسانه ای
- شبکه
- ویژگی های جدید
- محصولات جدید
- گره
- ارائه
- عملیاتی
- گزینه
- سفارش
- دیگر
- درد
- پرداخت
- مبلغ پرداختی
- سکو
- محبوب
- قیمت
- خصوصی
- محصولات
- پروژه ها
- کیفیت
- مطالعه
- كاهش دادن
- اعتماد
- مورد نیاز
- منابع
- REST
- پاداش
- خطر
- دویدن
- در حال اجرا
- ایمنی
- پرده
- خدمات
- تنظیم
- کوچک
- هوشمند
- قرارداد هوشمند
- قراردادهای هوشمند
- So
- نرم افزار
- فضا
- سهام
- ردی
- شروع
- دولت
- فشار
- پشتیبانی
- پشتیبانی
- پشتیبانی از
- سیستم
- فن آوری
- موقت
- آزمون
- تست
- تست
- زمان
- رمز
- بالا
- پیگردی
- معامله
- معاملات
- بروزرسانی
- به روز رسانی
- us
- ارزش
- حجم
- وب
- هفته
- در داخل
- مهاجرت کاری
- جهان
- X
- xrp
- سال