ارزهای رمزنگاری شده بیشتر و بیشتر در زندگی روزمره ما ادغام شده اند. بسیاری از ارزهای دیجیتال مانند بیت کوین و اتریوم شبکه های غیرمتمرکز مبتنی بر فناوری بلاک چین هستند. آنها طیف گسترده ای از موارد استفاده دارند و توسط شرکت ها و دولت های مختلف اجرا شده اند. یکی از ویژگی های قابل توجه بسیاری از ارزهای دیجیتال این است که همه تراکنش ها به صورت عمومی در دسترس هستند. علاوه بر این، برخی از سایتها نقاط پایانی با دسترسی آزاد را برای بازیابی تراکنشهای رمزنگاری در زمان واقعی ارائه میکنند. این امر توسعه یک ابزار نظارتی را برای تجزیه و تحلیل تراکنشهای رمزنگاری یا ردیابی چگونگی جریان ارزش در سراسر شبکه بسیار آسان میکند.
این پست یک معماری ساده برای گوش دادن، ذخیره و تجزیه و تحلیل تراکنش های بیت کوین در زمان واقعی ارائه می دهد. ما از Blockchain. com WebSocket API برای گوش دادن به تراکنش های جدید بیت کوین استفاده خواهیم کرد. این یک نقطه پایانی رایگان است و نیازی به مجوز ندارد. بیشتر معاملات را می توان به عنوان مبادله ارزش بین دو یا چند نهاد نشان داد. اگر شما هم مثل من هستید، اولین چیزی که وقتی می شنوید شخصی فرمت داده ای را ارائه می کند که شامل موجودیت ها و روابط آنهاست، به آن فکر می کنید، یک نمودار است. بنابراین، ذخیره تراکنش های بیت کوین در یک پایگاه داده گراف منطقی است. نه تنها قادر به محاسبه آمارهای مختلف دادهها هستید، بلکه مهمتر از آن، میتوانید جریان ارزش در شبکه را تجزیه و تحلیل کنید و به راحتی بازیگران مهم را شناسایی کنید. در این مثال، ما از Neo4j، یک پایگاه داده گراف بومی، برای ذخیره اطلاعات بازیابی شده استفاده خواهیم کرد. در نهایت، ما از یک ابزار داشبورد ساده به نام NeoDash استفاده خواهیم کرد که میتوانید به Neo4j متصل شوید و بهطور یکپارچه تجسمهای مختلف را برای تجزیه و تحلیل سادهتر دادهها ایجاد کنید.
مروری بر معماری سرویستصویر توسط نویسنده
قبل از شروع کد، ابتدا باید ساختار تراکنش های بیت کوین را بررسی کنیم. برای مثال، ممکن است عادت داشته باشید که با تراکنشهایی که یک فرستنده و گیرنده دارند سروکار داشته باشید. با این حال، این مورد در مورد بیت کوین صدق نمی کند. در عوض، هر تراکنش بیت کوین می تواند چندین فرستنده و گیرنده داشته باشد.
نمونه ای از تراکنش بیت کوین با چندین فرستنده و گیرنده. تصویر توسط نویسنده
در اصطلاح بیت کوین، فرستنده ها ورودی نامیده می شوند، در حالی که گیرندگان را خروجی می نامند. از آنجایی که یک تراکنش می تواند چندین ورودی و خروجی داشته باشد، تراکنش را به عنوان یک گره میانی مدل می کنیم. این مدل به ما اجازه می دهد تا تراکنش ها را به شکل اصلی ضبط کنیم زیرا می توانیم چندین پیوند ورودی و خروجی را به یک گره تراکنش اضافه کنیم.
من همچنین یکی دیگر از ویژگی های جذاب شبکه بیت کوین را یاد گرفتم. به عنوان مثال، فرض کنید که شخص A و B هر کدام 0. 5 BTC برای شما ارسال کرده اند. بنابراین اکنون شما در مجموع صاحب 1 بیت کوین هستید که از دو تراکنش جداگانه حاصل شده است. شما یک دوست خوب جیمی دارید و می خواهید 0. 8 BTC برای او ارسال کنید. ساختار داده تراکنش به صورت زیر خواهد بود:
زنجیره تراکنش بیت کوین، جایی که تراکنش دوم «تغییر» را به فرستنده اصلی برمی گرداند. تصویر توسط نویسنده
بنابراین، ابتدا فقط می توانید آنچه را که از سایر تراکنش ها دریافت کرده اید به عنوان ورودی ارسال کنید. نمی تواند بیشتر یا کمتر باشد. من قبلاً این را نمی دانستم، اما هاکان لوفکویست آن را با یک مثال ساده توضیح داد. هر بیت کوینی که از یک تراکنش دریافت می کنید مانند یک اسکناس دلار است. تنها تفاوت این است که ارزش یک یادداشت می تواند هر تعداد بیت کوین باشد. شما ابتدا دو اسکناس در نمونه های بالا دریافت کردید که هر کدام 0. 5 بیت کوین ارزش دارند. اکنون می خواهید برای بلیط یک سینما 0. 8 BTC بپردازید. صندوقدار هر دو یادداشت شما را می گیرد و مبلغ 0. 2 بیت کوین را به شما برمی گرداند. من حدس میزنم که این ساختار داده یکپارچگی کل بلاک چین را تضمین میکند، اما من زیاد به آن پرداختهام. به هر حال، ارزش کل تراکنش 1 بیت کوین به نظر می رسد، حتی اگر 0. 2 بیت کوین به عنوان تغییر برگردانده شده باشد. من اصطلاح دیگری را در مدل نمودارم برای مقابله با این موضوع معرفی کرده ام. حتی اگر ارزش کل تراکنش 1 بیت کوین است، جریان ارزش تنها 0. 8 بیت کوین است. در جریان ارزش تراکنش، من به ارزش بیت کوینی که به عنوان «تغییر» برگردانده نشده است، اشاره خواهم کرد.
در اینجا نمونه ای از تراکنش بیت کوین با ارزش کل 1. 2 میلیارد دلار است، اما ارزش جریان واقعی تنها 50 دلار است. از آنجایی که بیشتر ارزش به فرستنده اصلی بازگردانده شده است، هنگام تجزیه و تحلیل جریان های شبکه بیت کوین، اطلاعات روشنگری نیست. با این حال، هنوز هم جالب است بدانید که شخصی یک اسکناس بیت کوین به ارزش بیش از یک میلیارد دلار دارد.
کد داشبورد بلادرنگ به عنوان یک مخزن GitHub در دسترس است.
توسعه داشبورد بیت کوین بلادرنگ
اکنون که نظریه را از سر راه برداشتیم، میتوانیم به توسعه داشبورد بیتکوین بلادرنگ بپردازیم. ما با تعریف مدل گراف Neo4j شروع می کنیم. ما دو گزینه برای مدل سازی تراکنش های بیت کوین داریم.
مدل سازی خروجی های تراکنش به عنوان گره های صریح در نمودار. تصویر توسط نویسنده
مدل سازی خروجی های تراکنش به عنوان گره های صریح یک گزینه است. با این رویکرد، ساختار اصلی بلاک چین بیت کوین و اطلاعات آن را حفظ می کنیم. این به ما اجازه می دهد تا به سرعت بازیابی کنیم که هر آدرس چه تعداد یادداشت (خروجی) بیت کوین دارد و چه تعداد از آنها خرج شده است. آدرس، شناسه محل نگهداری بیت کوین ها است.
با این حال، من تصمیم گرفتم از یک مدل نمودار سادهتر استفاده کنم، زیرا فقط به تجزیه و تحلیل جریان تراکنشهای بیتکوین از طریق شبکه علاقهمندم و کمتر در مورد اینکه هر آدرس چه تعداد خروجی خرج یا خرج نشده دارد.
مدل نمودار تراکنش بیت کوینتصویر توسط نویسنده
نمودار از آدرس ها و تراکنش ها تشکیل شده است. گره های تراکنش حاوی هش تراکنش و مهر زمانی و برخی اطلاعات از پیش پردازش شده مانند کل و مقدار جریان تراکنش هستند. مشارکت های ورودی و خروجی اصلی به عنوان ویژگی های رابطه ذخیره می شوند تا ورودی ها و خروجی های متعدد با مشارکت های مختلف اجازه دهند. جهت روابط نشان دهنده جریان ارزش است.
مخزن GitHub حاوی اسکریپت های bash define_schema. sh است که محدودیت ها و شاخص های منحصر به فردی را در Neo4j تنظیم می کند.
ما نگاهی به میکروسرویس پایتون خواهیم داشت که تراکنش های بیت کوین را در Neo4j وارد می کند. این سرویس از کتابخانه مشتری WebSocket برای گوش دادن به تراکنش ها از طریق وب سوکت بلاک چین استفاده می کند.
از آنجایی که خود تراکنش ها ارزش تبدیل USD را ارائه نمی کنند، من تابعی را اضافه کرده ام که نسبت تبدیل بیت کوین را یک بار در ساعت به روز می کند و از آن برای محاسبه ارزش تراکنش و جریان به دلار استفاده می کند.
از آنجا که WebSocket به طور تصادفی اتصال را هر پنج تا ده هزار معامله کاهش می دهد ، من کد را برای رسیدگی به هرگونه خطای WebSocket درج کرده و به طور خودکار وصل می کنم.
تنها چیز گمشده کدی است که هنگام انتقال معامله جدید از طریق WebSocket اجرا می شود. می توانید ساختار پاسخ را در وب سایت blockchain بررسی کنید. داده ها حاوی اطلاعاتی در مورد ورودی ها و خروجی های معامله و همچنین هش و زمان بندی آن است. برای یک تجزیه و تحلیل ساده تر ، ما همچنین مقادیر کل و جریان معاملات و معادل USD مقادیر BTC را از پیش پردازش خواهیم کرد.
مقادیر بیت کوین به عنوان Satoshis نشان داده شده است ، بنابراین برای دریافت مقادیر معامله در BTC باید 100 میلیون ارزش را تقسیم کنیم. گوگل می گوید حدود 300-400 هزار معاملات بیت کوین در روز وجود دارد که تقریباً پنج معاملات در ثانیه است. در ابتدا ، من فکر می کردم برای رسیدگی به این جلد باید از نوعی واردات دسته ای استفاده کنم ، اما معلوم می شود که می توانیم بدون هیچ مشکلی معاملات یک به یک را وارد کنیم. من در این مقطع از زمان 48 ساعت سرویس را ترک کرده ام و با این رویکرد خطایی ظاهر نشده است.
کل پروژه از سه سرویس Docker و پیکربندی آنها به عنوان یک پرونده Docker-Composion تشکیل شده است. پس از تعریف محدودیت های منحصر به فرد در NEO4J با Define_Schema. shscript ، می توانید به سادگی دستور Docker-Compose Up را اجرا کنید تا شروع به ذخیره معاملات بیت کوین در زمان واقعی در Neo4J کنید.
سرانجام ، من از ابزار Neodash برای تهیه داشبورد ساده برای نظارت بر آمار معاملات کلی و همچنین داشتن گزینه ای برای پایین آمدن آدرس ها یا معاملات خاص در پایگاه داده استفاده کرده ام. Neodash به عنوان یک برنامه دسک تاپ NEO4J و یک نمونه داکر مستقل در دسترس است. در مورد ما ، ما از نمونه داکر مستقل استفاده خواهیم کرد. من تنظیمات داشبورد و دستورالعمل های مربوط به نحوه تنظیم آن در Readme مخزن را اضافه کرده ام.
اگر از Docker-Composecommand استفاده کرده اید ، Neodash در پورت 80 در دسترس خواهد بود. اولین برگه داشبورد آمار معاملات کلی ، بزرگترین معاملات و جریان آدرس ورودی را برای 24 ساعت گذشته ارائه می دهد.
داشبورد که نشان دهنده معاملات کلی بیت کوین است. تصویر توسط نویسنده.
جالب اینجاست که تعداد معاملات در طول شب اروپا کمی کاهش می یابد. به عنوان مثال ، بیایید بگوییم که شما یک آدرس خاص را که می خواهید بیشتر تحقیق کنید شناسایی کرده اید. در برگه دوم داشبورد ، شما می توانید شناسه آدرس را به عنوان یک پارامتر وارد کنید ، که به شما امکان می دهد یک آدرس خاص را پایین بیاورید.
یک آدرس خاص را سوراخ کنید. تصویر توسط نویسنده.
من یک آدرس را انتخاب کرده ام که با بالاترین جریان ورودی در لیست آمده است. به نظر می رسد که یک آدرس در اول مارس ده هزار BTC دریافت کرد و در کمتر از 30 دقیقه آن را به آدرس بعدی ارسال کرد.
سرانجام ، من یک برگه داشبورد را تهیه کرده ام که به شما امکان می دهد یک معامله واحد را بازرسی کنید.
یک معامله واحد را در Neodash بازرسی کنید. تصویر توسط نویسنده.
من نمی دانستم که این نوع حجم از طریق شبکه بیت کوین منتقل می شود. به عنوان مثال ، من چند معاملات با بیش از 500 میلیون جریان ارزش USD را شناسایی کرده ام. از آنجا که داده ها در NEO4J ذخیره می شوند ، شما انعطاف پذیری کاملی از Cypher و همچنین ویژگی های الگوریتم های نمودار در کتابخانه علمی داده های Neo4J Graph را برای جستجوی الگوهای جالب معامله دارید.
به عنوان مثال ، من معامله ای به ارزش 15 هزار BTC را شناسایی کرده ام و سپس چگونه ارزش پراکنده از طریق شبکه را تجزیه و تحلیل کردم.
مسیر 15 هزار بیت کوین از طریق شبکه بیت کوین. آدرس ها آبی و بنفش تراکنش ها هستند. تصویر توسط نویسنده
به نظر می رسد که در 1 مارس 2022، شخصی با ارسال 15 هزار بیت کوین به حساب دیگری، جریان ارزش را آغاز کرده است. توجه داشته باشید که معادل دلار جریان تراکنش بیش از 650 میلیون تومان است. سپس بیت کوین ها از طریق 6 حساب مختلف به مقصد نهایی خود در مدت شش ساعت ارسال شدند.
نتیجه
اساساً، تمام تراکنشهای شبکه بیتکوین بهصورت عمومی در دسترس هستند و بهراحتی در زمان واقعی برای تجزیه و تحلیل آنها قابل دسترسی هستند. بنابراین، اگر میخواهید تحقیقات آکادمیک انجام دهید یا به تحقیقات پزشکی قانونی بپردازید، امیدوارم این پست و کد همراه آن بتواند به شما در شروع کار کمک کند. آن را آزمایش کنید و اگر نظری در مورد بهبود کد یا موارد استفاده جالب از طریق اضافه کردن مشکلی به مخزن دارید، به من اطلاع دهید.
ما هنوز از هیچ تکنیک پیشرفته Cypher یا الگوریتم های نموداری برای بررسی تراکنش های بیت کوین استفاده نکرده ایم، پس با ما همراه باشید، زیرا احتمالاً این پست بعدی من خواهد بود.
مثل همیشه، تمام کدها در GitHub در دسترس هستند.
P. S. بعداً متوجه شدم که پروژه ای است که کل تاریخ بیت کوین را در صورت علاقه به Neo4j وارد می کند.
داشبورد بلادرنگ تراکنشهای بیت کوین با Neo4j و NeoDash در ابتدا در Neo4j Developer Blog در Medium منتشر شد، جایی که مردم با برجسته کردن و پاسخ دادن به این داستان به گفتگو ادامه میدهند.