مرحبا ، عزيزي المتسللين! هذا المقال حول الويب 3.0 ، الإنترنت مع اللامركزية. يقدم Web 3.0 مفهوم اللامركزية كأساس للإنترنت الحديث ؛ تحتاج العديد من أنظمة وشبكات الكمبيوتر إلى خصائص الأمان واللامركزية لتلبية احتياجاتهم. يسمى حل اللامركزية تكنولوجيا التسجيل الموزعة أو blockchain.

Blockchain هو سجل موزعة. يمكن اعتباره قاعدة بيانات ضخمة تعيش إلى الأبد ولا تتغير في التاريخ ، ويتم استخدام blockchain كأساس لتطبيقات أو خدمات الويب اللامركزية.
في جوهرها ، blockchain ليست مجرد قاعدة بيانات ، بل هي فرصة لزيادة الثقة بين المشاركين في الشبكة مع القدرة على تنفيذ منطق العمل على الشبكة.
الإجماع البيزنطي يزيد من موثوقية الشبكة يحل مشكلة الاتساق
قابلية التوسع التي توفرها DLT هي تغيير شبكات الأعمال الحالية.
تقدم Blockchain مزايا جديدة مهمة للغاية:
- منع الأخطاء المكلفة.
- معاملات شفافة.
- الرقمنة للسلع الحقيقية.
- العقود الذكية.
- سرعة وأمن المدفوعات.
Opportunitiesy PoE هو مشروع يهدف إلى دراسة بروتوكولات التشفير وتحسين حلول DLT و blockchain الحالية.
لا تحتوي معظم أنظمة السجل الموزعة العامة على خصائص قابلية للتوسعة - حيث إن إنتاجيتها منخفضة إلى حد ما. على سبيل المثال ، يعالج الأثير فقط ~ 20 tx / s.
تم إنشاء العديد من الحلول لزيادة خاصية قابلية التوسع وعدم فقدان اللامركزية (كما تعلمون ، يمكن التعرف فقط على 2 من أصل 3: قابلية التوسع والأمان واللامركزية).
واحدة من أكثرها فعالية هو الحل باستخدام sidechains.
مفهوم البلازما
المفهوم هو أن سلسلة الجذر تعالج عددًا صغيرًا من التعهدات من سلاسل الأطفال ، بحيث تكون سلسلة الجذر بمثابة الطبقة الأكثر أمانًا والأخيرة لتخزين جميع الحالات الوسيطة. تعمل كل سلسلة تابعة كسلسلة مفاتيح خاصة بها مع خوارزمية إجماع خاصة بها ، ولكن هناك بعض المحاذير المهمة.
- يتم إنشاء العقود الذكية في سلسلة الجذر وتعمل كنقطة تفتيش على السلسلة الفرعية في سلسلة الجذر.
- يتم إنشاء سلسلة تابعة تعمل كقطعة رئيسية خاصة بها مع إجماعها الخاص. جميع الولايات في سلسلة العمليات الفرعية محمية ببراهين الاحتيال ، والتي تضمن أن جميع عمليات الانتقال بين الولايات صالحة وتطبق بروتوكول السحب.
- يمكن بعد ذلك نشر العقود الذكية الخاصة بـ dapp أو السلسلة الفرعية (منطق التطبيق) في السلسلة الفرعية.
- يمكن نقل الأدوات اللازمة من سلسلة الجذر إلى سلسلة الأطفال.
يمتلك المدققون حوافز اقتصادية للتصرف بأمانة وإرسال التعليقات إلى سلسلة الجذر - طبقة التسوية النهائية للمعاملة.
نتيجة لذلك ، يجب ألا يتفاعل مستخدمو dapp الذين يعملون في سلسلة الأطفال مع سلسلة الجذر على الإطلاق. بالإضافة إلى ذلك ، يمكنهم سحب أموالهم إلى سلسلة الجذر وقتما يريدون ، حتى لو تم اختراق سلسلة الأطفال. تتيح هذه المخارج من السلسلة الفرعية للمستخدمين تخزين أموالهم بأمان باستخدام أدلة Merkle ، مما يؤكد ملكية مبلغ معين من الأموال.
ترتبط المزايا الرئيسية للبلازما بقدرتها على تسهيل الحسابات التي تفرط السلسلة الرئيسية بشكل كبير. بالإضافة إلى ذلك ، يمكن لـ Ethereum blockchain معالجة مجموعات البيانات الأكثر شمولاً وأكثر توازناً. يتم أيضًا نقل الوقت المستغرق من سلسلة الجذر إلى عقد Ethereum ، والتي تتلقى متطلبات معالجة وتخزين أقل.
Plasma Cash هو تصميم يمنح الرموز المميزة للشبكة أرقامًا تسلسلية فريدة تحولها إلى رموز فريدة. تشمل مزايا ذلك غياب الحاجة إلى التأكيدات ، ودعم أبسط لجميع أنواع الرموز (بما في ذلك الرموز غير القابلة للفطريات) ، والتخفيف من المخارج الجماعية من سلسلة الأطفال.
ترتبط مشكلة البلازما بمفهوم "الخروج الجماعي" من سلسلة الأطفال. في هذا السيناريو ، يمكن أن يؤدي الخروج المتزامن المنسق من سلسلة الابنة إلى نقص في الحوسبة لسحب جميع الأموال. نتيجة لذلك ، قد يخسر المستخدمون المال.
خيارات تنفيذ البلازما

البلازما الأساسية لديها العديد من الخيارات للتنفيذ.
الاختلافات الرئيسية هي:
- تخزين المعلومات حول طريقة تخزين وعرض الدولة ،
- أنواع الرموز (غير قابلة للتجزئة)
- أمن المعاملات
- نوع خوارزمية الإجماع ، إلخ.
الاختلافات الرئيسية في البلازما:
- قائم على UTXO - تتكون كل معاملة من المدخلات والمخرجات: يمكن إجراء المعاملة وإنفاقها ، وقائمة المعاملات التي لم يتم إنفاقها هي حالة من السلسلة الفرعية نفسها.
- حساب قائم - يحتوي ببساطة على انعكاس لكل حساب حساب ورصيده ، ويستخدم هذا النوع في الأثير حيث أن كل حساب يمكن أن يكون من نوعين - حساب مستخدم وحساب عقد ذكي. ميزة هذا النوع من تخزين الحالة هو بساطته ، والناقص هو أن هذا الخيار غير قابل للتطوير (يتم استخدام خاصية nonce الخاصة لمنع تنفيذ المعاملة مرتين).
الغرض من هذه المقالة هو شرح هياكل البيانات المستخدمة في blockchain Cash blockchain.
من أجل فهم بالضبط كيف يعمل الالتزام ، تحتاج إلى توضيح مفهوم شجرة ميركل.
أشجار ميركل استخدامها في البلازما
أشجار Merkle هي بنية بيانات مهمة للغاية في عالم blockchain. في جوهرها ، تمنحنا أشجار Merkle القدرة على التقاط بعض مجموعة البيانات بطريقة تخفي البيانات ، ولكنها تسمح للمستخدمين بإثبات أن بعض المعلومات كانت في المجموعة. على سبيل المثال ، إذا كان لدي عشرة أرقام ، فيمكنني إنشاء دليل لهذه الأرقام ثم إثبات وجود رقم معين في هذه المجموعة من الأرقام. هذه البراهين لها حجم ثابت صغير ، مما يجعلها رخيصة النشر إلى Ethereum.
يمكنك استخدام هذا لمجموعة من المعاملات. يمكنك أيضًا إثبات أن معاملة معينة موجودة في مجموعة المعاملات هذه. هذا هو بالضبط ما يفعله المشغل. يتكون كل كتلة من مجموعة من المعاملات التي تتحول إلى شجرة Merkle. جذر هذه الشجرة هو الدليل الذي يتم نشره في Ethereum مع كل كتلة من البلازما.
يجب أن يكون المستخدمون قادرين على سحب أموالهم من سلسلة البلازما ، وعندما يريد المستخدمون الخروج من سلسلة البلازما ، يرسلون معاملة "الخروج" إلى Ethereum.
يستخدم Plasma Cash خاص Merkle Tree الذي يجعل من الممكن عدم التحقق من صحة الكتلة بأكملها ولكن التحقق من صحة فقط الفروع التي تتوافق مع رمز المستخدم.
أي ، لنقل رمز مميز ، تحتاج إلى استعراض السجل وفحص الرموز المميزة التي يحتاجها مستخدم معين فقط ، عند نقل رمز مميز ، يقوم المستخدم ببساطة بتمرير السجل بأكمله إلى مستخدم آخر ويمكنه بالفعل مصادقة السجل بالكامل - والأهم من ذلك ، أن يفعل ذلك بسرعة كبيرة.

هياكل البيانات النقدية البلازما لتخزين الحالة والتاريخ
ومع ذلك ، من الضروري استخدام بعض أشجار Merkle فقط ، لأنه من الضروري الحصول على دليل على التضمين وأيضًا دليل على عدم إدراج المعاملة في الكتلة ، على سبيل المثال
- شجرة ميركل متناثرة
- باتريشيا تري
انتهزت الفرصة من تنفيذها Sparse Merkle Tree و Patricia Trie
تشبه شجرة Merkle المتناثرة شجرة Merkle القياسية ، فيما عدا أن البيانات التي تحتوي عليها مفهرسة وتوضع كل نقطة بيانات على ورقة تطابق فهرس نقطة البيانات تلك
دعنا نقول أن لدينا شجرة ميركل مع أربع أوراق. سوف نملأ هذه الشجرة بأحرف قليلة (أ ، د) للتظاهر. الحرف A هو الحرف الأول من الأبجدية ، لذلك يجب وضعه على الورقة الأولى. وبالمثل ، يمكننا وضع D على الورقة الرابعة.
إذن ما الذي يحدث في الأوراق الثانية والثالثة؟ نحن فقط نتركهم فارغين. بتعبير أدق ، يتم وضع قيمة خاصة (على سبيل المثال ، صفر) بدلاً من وضع الحرف.
الشجرة تبدو في النهاية هكذا:

يعمل دليل التضمين تمامًا كما هو الحال في شجرة Merkle العادية ، ماذا يحدث إذا أردنا إثبات أن C ليس جزءًا من شجرة Merkle هذه؟ إنه سهل! نعلم أنه إذا كانت C جزءًا من شجرة ، فستكون على الورقة الثالثة. إذا لم يكن C جزءًا من الشجرة ، فيجب أن تكون الورقة الثالثة صفرية.
كل ما نحتاجه هو الدليل المعياري لإدراج Merkle ، مما يدل على أن الورقة الثالثة هي صفر.
أفضل جزء من شجرة ميركل المتناثرة هو أنها تمثل بالفعل متاجر القيمة الرئيسية داخل شجرة ميركل!
فيما يلي جزء من كود بروتوكول PoE الذي يقوم بتنفيذ Sparse Merkle Tree.
class SparseTree { //... buildTree() { if (Object.keys(this.leaves).length > 0) { this.levels = [] this.levels.unshift(this.leaves) for (let level = 0; level < this.depth; level++) { let currentLevel = this.levels[0] let nextLevel = {} Object.keys(currentLevel).forEach((leafKey) => { let leafHash = currentLevel[leafKey] let isEvenLeaf = this.isEvenLeaf(leafKey) let parentLeafKey = leafKey.slice(0, -1) let neighborLeafKey = parentLeafKey + (isEvenLeaf ? '1' : '0') let neighborLeafHash = currentLevel[neighborLeafKey] if (!neighborLeafHash) { neighborLeafHash = this.defaultHashes[level] } if (!nextLevel[parentLeafKey]) { let parentLeafHash = isEvenLeaf ? ethUtil.sha3(Buffer.concat([leafHash, neighborLeafHash])) : ethUtil.sha3(Buffer.concat([neighborLeafHash, leafHash])) if (level == this.depth - 1) { nextLevel['merkleRoot'] = parentLeafHash } else { nextLevel[parentLeafKey] = parentLeafHash } } }) this.levels.unshift(nextLevel) } } } }
هذا الرمز هو تافهة جدا. لدينا متجر ذو قيمة أساسية مع دليل على التضمين / عدم التضمين.
في كل تكرار ، يتم ملء مستوى معين من الشجرة النهائية ، بدءًا من آخرها. بناءً على أي مفتاح للورقة الحالية هو زوجي أو غريب ، نأخذ صفحتين متجاورتين وننظر في تجزئة المستوى الحالي. إذا وصلنا إلى النهاية نكتب merkleRoot واحد - تجزئة مشتركة.
يجب أن تفهم أن هذه الشجرة مليئة بالفعل بقيم فارغة في البداية! وإذا قمنا بتخزين كمية كبيرة من الرمز المميز IDS. لدينا حجم شجرة ضخم ويستغرق توليده وقتًا طويلاً جدًا!
هناك العديد من الحلول لهذا الإبطال ، لكن الفرصة قررت تغيير هذه الشجرة إلى باتريشيا تري.
باتريشيا تري هي مزيج من Radix Trie و Merkle Trie.
سيتم تخزين مفتاح البيانات Radix Trie مسار البيانات نفسه! هذا يسمح لك بإنشاء بنية بيانات محسّنة للذاكرة!

تنفيذ الفرصة
buildNode(childNodes, key = '', level = 0) { let node = {key} this.iterations++ if (childNodes.length == 1) { let nodeKey = level == 0 ? childNodes[0].key : childNodes[0].key.slice(level - 1) node.key = nodeKey let nodeHashes = Buffer.concat([Buffer.from(ethUtil.sha3(nodeKey)), childNodes[0].hash]) node.hash = ethUtil.sha3(nodeHashes) return node } let leftChilds = [] let rightChilds = [] childNodes.forEach((node) => { if (node.key[level] == '1') { rightChilds.push(node) } else { leftChilds.push(node) } }) if (leftChilds.length && rightChilds.length) { node.leftChild = this.buildNode(leftChilds, '0', level + 1) node.rightChild = this.buildNode(rightChilds, '1', level + 1) let nodeHashes = Buffer.concat([Buffer.from(ethUtil.sha3(node.key)), node.leftChild.hash, node.rightChild.hash]) node.hash = ethUtil.sha3(nodeHashes) } else if (leftChilds.length && !rightChilds.length) { node = this.buildNode(leftChilds, key + '0', level + 1) } else if (!leftChilds.length && rightChilds.length) { node = this.buildNode(rightChilds, key + '1', level + 1) } else if (!leftChilds.length && !rightChilds.length) { throw new Error('invalid tree') } return node }
وهذا هو ، ونحن نذهب من خلال متكرر وبناء بشكل منفصل الأشجار الفرعية اليسار واليمين. في نفس الوقت ، فإن بناء المفتاح يشبه المسار في هذه الشجرة!
هذا الحل هو أكثر تافهة ويعمل بشكل أسرع في حين يجري الأمثل! في الواقع ، يمكن تحسين شجرة Patricia عن طريق إدخال أنواع جديدة من العقد - عقدة التمديد ، العقدة الفرعية ، إلخ ، كما هو الحال في بروتوكول ethereum ، لكن هذا التنفيذ يلبي جميع شروطنا - لقد حصلنا على بنية بيانات سريعة ومحسّنة للذاكرة.
من خلال تطبيق هياكل البيانات هذه ، أتاحت الفرصة لتوسيع نطاق Plasma Cash لأنه يتيح التحقق من تاريخ الرمز وإدراج عدم تضمين الرمز المميز في الشجرة! يتيح لك ذلك تسريع عملية التحقق من الكتل وسلسلة الطفل البلازما نفسها بشكل كبير.
روابط مفيدة:
- البلازما ورقة بيضاء
- بوابة جيت
- استخدام الحالات ووصف العمارة
- ورقة شبكة البرق