تخطَّ إلى المحتوى

رسائل Snapchain

كل ما يفعله حساب على Farcaster رسالة موقّعة: منشور، أو إعجاب، أو متابعة، أو تغيير في الملف الشخصي، أو تغيير في المفاتيح. تفحص العقد كل رسالة وتخزّن ما تقبله. البروتوكول موصوف في Messages في توثيق Farcaster.

الحقل ما هو
data المحتوى: النوع، ومعرّف fid، والطابع الزمني، والشبكة، وجسم خاص بالنوع
hash تجزئة BLAKE3 لـ data، بطول 20 بايت
signature توقيع Ed25519 على التجزئة
signer المفتاح العام الذي وقّع، ويجب أن يكون مسجلًا لمعرّف fid

لا يجمّع casty هذه الحقول يدويًا أبدًا؛ بل يستدعي دوال البناء في @farcaster/core (makeCastAdd وmakeReactionAdd وmakeLinkAdd وغيرها) بمفتاح التطبيق الخاص بك.

تَعُدّ الطوابع الزمنية الثواني منذ حقبة Farcaster، 2021-01-01 00:00:00 UTC. ترفض العقد رسالة طابعها الزمني متقدم أكثر من 15 دقيقة في المستقبل، ولهذا يفحص casty doctor والخطوة 1 ساعة جهازك.

يحمل المنشور حتى 320 بايت من نص UTF-8، أو حتى 1024 بايت كمنشور طويل؛ ويختار casty النوع بحسب الطول. يُعدّ النص بالبايتات لا بالأحرف، لذا يتسع منشور بالسيريلية أو فيه رموز تعبيرية لأحرف أقل.

الذِكر ليس جزءًا من النص. يخزّن المنشور معرّفات fid المذكورة وإزاحات البايتات التي تنتمي إليها، وتعيد التغذية @name إلى مكانه. يشير الرد إلى أصله بمعرّف fid والتجزئة؛ أما منشور القناة فيشير إلى رابط القناة بدلًا من ذلك. وتوضع الروابط في التضمينات، --embed <url> في سطر الأوامر.

حذف منشور ينشر CAST_REMOVE. الإعجابات وإعادات النشر تفاعلات، والمتابعات روابط، ولكل منها رسالة إزالة أيضًا.

يقسم Snapchain الشبكة إلى شرائح. تعيش منشورات الحساب وتفاعلاته ومتابعاته وملفه الشخصي على شريحة رسائل واحدة، تُختار من أول 4 بايتات من SHA-256 لمعرّف fid الخاص به. وتذهب تغييرات المفاتيح وبضع رسائل أخرى على مستوى الحساب إلى الشريحة 0. لهذا يطبع status وcasty doctor سطرًا لكل شريحة: لا تكون العقدة متزامنة إلا حين تكون كل الشرائح كذلك.

  1. يبني casty الرسالة ويوقّعها ويرسل بايتاتها إلى POST /v1/submitMessage.
  2. تفحصها العقدة وتجيب بـ 200، أو بخطأ مع السبب.
  3. عقدة القراءة لا تحتفظ بشيء: تمرر الرسالة عبر gossip وتنساها. 200 تعني قُبلت للتمرير، لا خُزّنت.
  4. حين يُدرج مدقِّق الرسالة في كتلة، تصبح لدى كل عقدة، بما فيها عقدتك.

لذلك يقرأ casty الرسالة مجددًا، مثلًا بـ castById بعد منشور، حتى تظهر؛ وفي عقد القراءة والمدقِّقون التوقيتات. للبايتات نفسها التجزئة نفسها، لذا تُخزَّن الرسالة المرسلة مرتين مرة واحدة.

كل رسالة يحتفظ بها حساب تُحسب من تخزينه، بما في ذلك رسائل الإزالة: يبقى CAST_REMOVE سجلًا بأن المنشور حُذف. راجع إيجار التخزين.