در آخرین مقالهام درباره اینکه چگونه میتوانید با استفاده از nodejs یک مدیر کیف پول اتریوم بسازید، واریزهای دریافتی را تماشا کنید و برداشتها را انجام دهید، نوشتم.
من میخواستم به شما نشان دهم که چگونه با استفاده از بیتکوین یک کیف پول مشابه بسازید، اما این فرصت را داشتم که در عوض روی موتور معاملاتی صرافی کار کنم و بسیار هیجانزده هستم که آنچه را که از آن تجربه آموختم به اشتراک بگذارم.
موتور تطبیق چیست؟
موتور تطبیق یا معاملات، نرمافزاری است که تمام سفارشهای باز را در یک بازار ثبت میکند و در صورتی که این دو سفارش توسط یکدیگر انجام شوند، معاملات جدیدی ایجاد میکند.
اگر بخواهیم در مورد آن فکر کنیم: اگر بازاری دارید که در آن کاربران میتوانند اتر را برای بیتکوین بفروشند، میخواهید مواردی مانند قیمت خرید/فروش فعلی اتر در بیتکوین را دنبال کنید، سفارشهای خرید یا فروش تکمیل نشده باقی میمانند وامکان پردازش سفارشات جدید
این را به چندین جفت بازار افزایش دهید و مدیران کیف پول را از مقالات دیگر ما ادغام کنید و یک موتور مبادله کامل دارید که می توانید از آن برای ایجاد یک صرافی کامل مانند Binance. com استفاده کنید.
واژگان
بنابراین چگونه می توان با ساخت یک موتور منطبق شروع کرد؟
ابتدا، شما باید تمام مفاهیم مربوط به آن را درک کنید و هر نوع سفارش چه کاری انجام می دهد، بنابراین بیایید آنها را یکی یکی بررسی کنیم.
موتور تطبیق/تجارت
همانطور که در بالا توضیح داده شد، موتور تطبیق قطعه نرم افزاری است که می خواهیم بسازیم. و مانند هر نرم افزار مفیدی، دارای ورودی و خروجی است.
در این حالت، برخی از دستورات را به عنوان ورودی می گیریم و رویدادها را به عنوان خروجی تولید می کنیم.
دستورات ممکن می تواند باشد:
- NewOrder: سفارش جدیدی را به دفترچه سفارش اضافه می کند و سعی می کند آن را با سفارشات موجود مطابقت دهد.
- CancelOrder: اگر سفارشی هنوز در دفترچه سفارش باز باشد، آن را لغو می کند.
دستورات دیگری را نیز می توان تعریف کرد، اما برای سادگی، فعلا فقط این دو را مورد بحث قرار می دهیم.
رویدادهایی که می توان تولید کرد به نحوه اجرای دستورات بالا مربوط می شود:
- TradesGenerated: حاوی لیست معاملاتی است که توسط یک جفت سفارش معین ایجاد شده اند.
- Order Cancelled: نشان می دهد که یک سفارش قبل از تکمیل کامل لغو شده است.
سفارش کتاب
دفترچه سفارش لیستی از سفارشات خرید یا فروش است که بر اساس قیمت و مهر زمانی مرتب شده اند.
هنگامی که یک سفارش جدید دریافت میشود، در مقابل طرف دیگر بازار بررسی میشود (برای سفارش خرید جدید، سفارشهای فروش را بررسی میکنیم) تا ببینیم آیا سفارشهایی مطابق با شرایط اعمال شده توسط سفارش جدید وجود دارد یا خیر.
در این صورت، تا زمانی که شرایط باطل شود یا تا زمانی که سفارش تکمیل نشود، بین سفارشات معاملات ایجاد می کنیم.
سفارشات
در هر موتور معاملاتی ممکن است چندین نوع سفارش وجود داشته باشد که کاربر نهایی به آنها دسترسی دارد.
برخی از این موارد عبارتند از:
- سفارش محدود
- سفارش بازار
- توقف سفارش
به صورت اختیاری، میتوانید شرایط اضافی را نیز اضافه کنید که بر روی زمان ورود/خروج سفارش از بازار با استفاده از شرایط و مدت تأثیر میگذارد. اما اینها در اینجا مورد بحث قرار نخواهند گرفت زیرا موضوعات پیشرفته تری را نشان می دهند.
سفارش محدود
سفارشهای محدود رایجترین سفارشهایی هستند که در محیط کنونی مبادلات رمزنگاری استفاده میشوند.
آنها به شما این امکان را می دهند که سفارشی با قیمت مشخص ایجاد کنید که یا با قیمت مشخص شده بهتر تکمیل می شود.
برای سفارش خرید، این بدان معناست که اگر من یک سفارش خرید با قیمت 100 دلار انجام دهم، با هر قیمتی زیر یا برابر با 100 دلار پر می شود. به عنوان یک سفارش فروش، در عوض با مبلغی بالاتر یا برابر با 100 دلار پر می شود.
سفارش بازار
سفارش های بازار اولویت را به انجام سفارش برای مقدار مشخص می کنند بدون توجه به قیمت. آنها در دفتر سفارش اولویت دارند و در بازارهایی با نقدینگی کافی تضمین می کنند.
به عنوان مثال، زمانی که شما یک سفارش خرید ۲ اتر انجام می دهید، بسته به سفارشات باز فعلی در بازار، می توان آن را با قیمت ۹۰۰، ۱۰۰۰، ۲۰۰۰ دلار یا هر قیمت دیگری انجام داد. سفارشات بازار فقط با تعداد وجوهی که کاربر دارد و مقدار دارایی هایی که می خواهد بخرد/بفروشد محدود می شود.
توقف سفارش
سفارشات توقف تنها پس از رسیدن به یک سطح قیمت مشخص فعال می شوند. به این ترتیب آنها در جهت مخالف به عنوان دستورات حد عمل می کنند. پس از فعال شدن آنها به طور خودکار به یک بازار یا سفارش محدود تبدیل می شوند.
چند مفهوم دیگر وجود دارد که اگر میخواهید صرافی پیشرفتهتری بسازید، مانند نقدینگی، معاملات بلند/کوتاه، پروتکلهای FIX/FAST و دستهای دیگر، باید بدانید، اما من آنها را به شما میسپارم تا کشف کنید.
معماری
اکنون که درک بهتری از آنچه که یک موتور منطبق را تشکیل می دهد، داریم، بیایید ببینیم که معماری ما چگونه ممکن است به نظر برسد و از چه فناوری هایی می توانیم برای پروژه استفاده کنیم.
همانطور که در بالا می بینید، سیستم ما از چندین مشتری موتور ما تشکیل شده است. آنها میتوانند اجزای دیگری از یک صرافی باشند که درخواستهای سفارش را از کاربران نهایی دریافت میکند، آنها را در برابر وجوه موجودشان اعتبارسنجی میکند و برای پردازش ارسال میکند.
ارتباط بین مشتری و موتور از طریق موضوعات در آپاچی کافکا انجام می شود. برای هر جفت ارز یک عدد. به این ترتیب اطمینان حاصل می کنیم که وقتی یک سفارش در صف پیام پذیرفته می شود، به همان ترتیب توسط موتور نیز پردازش می شود. این یک سیستم قابل ردیابی ایجاد میکند که میتوانیم آن را مجدداً تکرار کنیم تا اگر چیزی خراب شد یا نیاز به راهاندازی مجدد موتور داشتیم، دفترچه سفارش را دوباره ایجاد کنیم.
کار موتورها در این مورد گوش دادن به موضوع فرمان کافکا، اجرای دستور در کتاب سفارش و انتشار نتیجه در موضوع رویدادها خواهد بود.
همچنین داشتن نوعی سرویس نظارتی که به ما میگوید با چه سرعتی سفارشات را پردازش میکنیم و معاملات ایجاد میکنیم، بار روی موتور یا کل سیستم چقدر است، جالب است.
برای آن یک راه حل عالی استفاده از Prometheus و Grafana است. Prometheus به ما کمک می کند تا معیارها را از برنامه خود دریافت کنیم و grafana همه آنها را در داشبوردی آسان برای درک نمایش می دهد.
انتخاب های زبان
بسته به زبان برنامه نویسی که با آن آشنایی دارید، می توانید هر کدام را که برای شما مناسب است انتخاب کنید. موتور تطبیق برای تطبیق معاملات و محاسبه مقادیر جدید برای هر سفارش منطبق، به شدت به قدرت پردازش متکی است.
بنابراین، باید زبانی را انتخاب کنید که تا حد ممکن سطح پایینی داشته باشد: C/C++، Golang، Rust و Java برخی از زبانهایی هستند که در اینجا به ذهن میرسند.
برای این آموزش ما با Golang کار خواهیم کرد، عمدتاً به این دلیل که بسیار سریع است، درک آن آسان است، همزمانی ساده دارد و من مدتی است که C++ را انجام نداده ام :).
چگونه یک موتور معاملاتی بسازیم
حال بیایید ببینیم که برای پیاده سازی یک موتور منطبق که قادر به پردازش سفارشات محدود و ایجاد معاملات باشد، چه کاری باید انجام دهیم. مراحل ساخت موتور معاملاتی چیست؟