عقد القراءة والمدقِّقون
في Snapchain نوعان من العقد. يتفق المدقِّقون على ترتيب الرسائل وينتجون الكتل. وتنزّل عقد القراءة تلك الكتل، وتحتفظ بالحالة الكاملة، وتقدّمها عبر واجهتي HTTP وgRPC. يُعدّ casty عقدة قراءة. ويقارن توثيق Snapchain بين النوعين في أنواع العقد.
ما تمنحك إياه عقدة القراءة
Section titled “ما تمنحك إياه عقدة القراءة”- منشورات كل حساب وتفاعلاته ومتابعاته وملفاته الشخصية ومفاتيحه، مقروءة من قرصك أنت، عبر
http://127.0.0.1:3381بعد تشغيل النفق. واجهة HTTP موثّقة في المرجع. - مدخلًا للكتابة: يعمل
POST /v1/submitMessageعلى عقدة القراءة. - بلا مفتاح API: تأتي البيانات من مضيفك أنت.
تشغيل عقدة كهذه لا يكسبك مكافآت: يجب أن ينص ملف .env الخاص بـ Snapchain على
AGREE_NO_REWARDS_FOR_ME=true، وهو ما يكتبه 1-node.sh لك.
كلفة التشغيل
Section titled “كلفة التشغيل”يطلب Snapchain ذاكرة 16 GB و4 vCPU و2 TB من القرص الحر وعنوان IP عامًا. تنزّل أول بداية لقطة بحجم
عدة مئات من GB، ثم تزامن الكتل التي جاءت بعدها. تقع قاعدة البيانات في ~/snapchain/.rocks؛ وأثناء
استعادة لقطة يوجد .rocks.snapshot بجانبها ويحتاج إلى مساحة أيضًا.
المنافذ، من توثيق Snapchain:
| المنفذ | ما هو | مفتوح لـ |
|---|---|---|
| 3381/tcp | واجهة HTTP | عنوانك فقط، على المضيفات التي يستأجرها casty |
| 3382/udp | gossip مع العقد الأخرى (يفتح casty أيضًا TCP) | الجميع |
| 3383/tcp | واجهة gRPC | عنوانك فقط، على المضيفات التي يستأجرها casty |
يُنشر Grafana (3000) وstatsd (8125/udp، 8126/tcp) على واجهة loopback للمضيف فقط: يضبط 1-node.sh
المتغيرين STATSD_PUBLISH وSTATSD_ADMIN_PUBLISH في ملف .env الخاص بـ Snapchain على
127.0.0.1، على أي مضيف يعمل عليه.
الكتابة تمر، لكنها لا تُحفظ
Section titled “الكتابة تمر، لكنها لا تُحفظ”حين ترسل رسالة إلى عقدة قراءة، تفحصها وتمررها عبر gossip ولا تحتفظ بشيء. استجابة HTTP 200 تعني
«قُبلت للتمرير»، لا «في كتلة». إذا ضاعت الرسالة في الطريق فقد ذهبت، ويجب إرسالها مجددًا. ويقول توثيق
Snapchain الشيء نفسه عن عقد القراءة: تتحقق العقدة من
الرسالة، وتمررها إلى المدقِّقين عبر gossip ولا تحتفظ بنسخة، لذا تحتاج الرسالة الضائعة في الطريق إلى
إعادة إرسال، وهذا أرجح حين تكون الشبكة تحت حمل كبير.
لذلك يؤكد casty كل كتابة بقراءتها من العقدة حتى تظهر مدمجة. ينتظر 20 ثانية، ويرسل البايتات نفسها مرة أخرى، وينتظر 20 أخرى، ثم يتوقف برسالة:
casty: <hash> was accepted but not merged within 40sقد تُدمج الرسالة بعد ذلك. ابحث عنها قبل أن ترسلها مجددًا، لأن تشغيل الأمر مرة أخرى يبني رسالة جديدة.
التقليم
Section titled “التقليم”تحتفظ عقدة القراءة بكل كتلة افتراضيًا. يشغّل 1-node.sh --block-retention <days> تقليم الكتل، الذي
لا يقدّمه Snapchain إلا على عقد القراءة. وتُحفظ الأحداث 3 أيام افتراضيًا.