---
title: "الكتل"
description: "نظرة عامة على الكتل في سلسلة كتل إيثيريوم – هيكل بياناتها، ولماذا هي ضرورية، وكيف يتم إنشاؤها."
lang: ar
---

الكتل هي دفعات من المعاملات تحتوي على تجزئة للكتلة السابقة في السلسلة. هذا يربط الكتل معًا (في سلسلة) لأن التجزئات تُشتق تشفيريًا من بيانات الكتلة. هذا يمنع الاحتيال، لأن تغييرًا واحدًا في أي كتلة في التاريخ من شأنه أن يبطل جميع الكتل التالية حيث ستتغير جميع التجزئات اللاحقة وسيلاحظ ذلك كل من يقوم بتشغيل سلسلة الكتل.

## المتطلبات الأساسية {#prerequisites}

الكتل موضوع مناسب جدًا للمبتدئين. ولكن لمساعدتك على فهم هذه الصفحة بشكل أفضل، نوصيك بقراءة [الحسابات](/developers/docs/accounts/)، و[المعاملات](/developers/docs/transactions/)، و[مقدمة عن إيثيريوم](/developers/docs/intro-to-ethereum/) أولاً.

## لماذا الكتل؟ {#why-blocks}

لضمان احتفاظ جميع المشاركين في شبكة [إيثيريوم](/) بحالة متزامنة والاتفاق على التاريخ الدقيق للمعاملات، نقوم بتجميع المعاملات في كتل. هذا يعني أنه يتم الالتزام بعشرات (أو مئات) المعاملات، والاتفاق عليها، ومزامنتها في وقت واحد.

![A diagram showing transaction in a block causing state changes](./tx-block.png)
_مخطط مقتبس من [Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_

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

## كيف تعمل الكتل {#how-blocks-work}

للحفاظ على تاريخ المعاملات، يتم ترتيب الكتل بدقة (تحتوي كل كتلة جديدة يتم إنشاؤها على إشارة إلى الكتلة الأصلية الخاصة بها)، ويتم ترتيب المعاملات داخل الكتل بدقة أيضًا. باستثناء الحالات النادرة، في أي وقت، يتفق جميع المشاركين في الشبكة على العدد الدقيق للكتل وتاريخها، ويعملون على تجميع طلبات المعاملات الحية الحالية في الكتلة التالية.

بمجرد تجميع الكتلة بواسطة مُدَقِّق يتم اختياره عشوائيًا على الشبكة، يتم نشرها إلى بقية الشبكة؛ وتضيف جميع العقد هذه الكتلة إلى نهاية سلسلة الكتل الخاصة بها، ويتم اختيار مُدَقِّق جديد لإنشاء الكتلة التالية. يتم تحديد عملية تجميع الكتل الدقيقة وعملية الالتزام/الإجماع حاليًا بواسطة بروتوكول "إثبات الحصة (PoS)" الخاص بإيثيريوم.

## بروتوكول إثبات الحصة (PoS) {#proof-of-stake-protocol}

إثبات الحصة (PoS) يعني ما يلي:

- يجب على العقد المدققة تخزين حصة تبلغ <span dir="ltr">32 ETH</span> في عقد الإيداع كضمان ضد السلوك السيئ. يساعد هذا في حماية الشبكة لأن النشاط غير النزيه الذي يمكن إثباته يؤدي إلى تدمير بعض أو كل حصة التخزين تلك.
- في كل خانة (متباعدة بفاصل زمني يبلغ اثنتي عشرة ثانية)، يتم اختيار مُدَقِّق عشوائيًا ليكون مقترح الكتلة. يقومون بتجميع المعاملات معًا، وتنفيذها، وتحديد "حالة" جديدة. يقومون بتغليف هذه المعلومات في كتلة وتمريرها إلى المدققين الآخرين.
- يقوم المدققون الآخرون الذين يتلقون الكتلة الجديدة بإعادة تنفيذ المعاملات للتأكد من موافقتهم على التغيير المقترح للحالة العالمية. بافتراض أن الكتلة صالحة، فإنهم يضيفونها إلى قاعدة البيانات الخاصة بهم.
- إذا تلقى المُدَقِّق كتلتين متعارضتين لنفس الخانة، فإنه يستخدم خوارزمية اختيار التفرع الخاصة به لاختيار الكتلة المدعومة بأكبر قدر من <span dir="ltr">ETH</span> المخزن.

[المزيد عن إثبات الحصة (PoS)](/developers/docs/consensus-mechanisms/pos)

## ماذا يوجد في الكتلة؟ {#block-anatomy}

هناك الكثير من المعلومات الواردة داخل الكتلة. في أعلى مستوى، تحتوي الكتلة على الحقول التالية:

| الحقل            | الوصف                                           |
| :--------------- | :---------------------------------------------------- |
| `slot`           | الخانة التي تنتمي إليها الكتلة                         |
| `proposer_index` | معرف المُدَقِّق الذي يقترح الكتلة           |
| `parent_root`    | تجزئة الكتلة السابقة                       |
| `state_root`     | التجزئة الجذرية لكائن الحالة                     |
| `body`           | كائن يحتوي على عدة حقول، كما هو محدد أدناه |

يحتوي `body` الخاص بالكتلة على عدة حقول خاصة به:

| الحقل                | الوصف                                      |
| :------------------- | :----------------------------------------------- |
| `randao_reveal`      | قيمة تُستخدم لاختيار مقترح الكتلة التالي   |
| `eth1_data`          | معلومات حول عقد الإيداع           |
| `graffiti`           | بيانات عشوائية تُستخدم لتمييز الكتل                |
| `proposer_slashings` | قائمة المدققين الذين سيتم اقتطاع حصصهم                 |
| `attester_slashings` | قائمة المصدقين الذين سيتم اقتطاع حصصهم                  |
| `attestations`       | قائمة التصديقات التي تمت ضد الخانات السابقة |
| `deposits`           | قائمة الإيداعات الجديدة في عقد الإيداع     |
| `voluntary_exits`    | قائمة المدققين الذين يغادرون الشبكة           |
| `sync_aggregate`     | مجموعة فرعية من المدققين تُستخدم لخدمة العملاء الخفيفين |
| `execution_payload`  | المعاملات الممررة من عميل التنفيذ    |

يحتوي الحقل `attestations` على قائمة بجميع التصديقات في الكتلة. للتصديقات نوع بيانات خاص بها يحتوي على عدة أجزاء من البيانات. يحتوي كل تصديق على:

| الحقل              | الوصف                                                    |
| :----------------- | :------------------------------------------------------------- |
| `aggregation_bits` | قائمة بالمدققين الذين شاركوا في هذا التصديق    |
| `data`             | حاوية بها حقول فرعية متعددة                            |
| `signature`        | توقيع مجمع لمجموعة من المدققين ضد جزء `data` |

يحتوي الحقل `data` في `attestation` على ما يلي:

| الحقل               | الوصف                                                     |
| :------------------ | :-------------------------------------------------------------- |
| `slot`              | الخانة التي يتعلق بها التصديق                             |
| `index`             | مؤشرات للمدققين المصدقين                                |
| `beacon_block_root` | التجزئة الجذرية لكتلة المنارة التي يُنظر إليها على أنها رأس السلسلة |
| `source`            | آخر نقطة فحص مبررة                                   |
| `target`            | أحدث كتلة حدودية للحقبة                                 |

يؤدي تنفيذ المعاملات في `execution_payload` إلى تحديث الحالة العالمية. يعيد جميع العملاء تنفيذ المعاملات في `execution_payload` للتأكد من أن الحالة الجديدة تتطابق مع تلك الموجودة في حقل `state_root` للكتلة الجديدة. هذه هي الطريقة التي يمكن للعملاء من خلالها معرفة أن الكتلة الجديدة صالحة وآمنة للإضافة إلى سلسلة الكتل الخاصة بهم. إن `execution payload` نفسه عبارة عن كائن يحتوي على عدة حقول. يوجد أيضًا `execution_payload_header` يحتوي على معلومات ملخصة مهمة حول بيانات التنفيذ. يتم تنظيم هياكل البيانات هذه على النحو التالي:

يحتوي `execution_payload_header` على الحقول التالية:

| الحقل               | الوصف                                                         |
| :------------------ | :------------------------------------------------------------------ |
| `parent_hash`       | تجزئة الكتلة الأصلية                                            |
| `fee_recipient`     | عنوان الحساب لدفع رسوم المعاملات إليه                      |
| `state_root`        | التجزئة الجذرية للحالة العالمية بعد تطبيق التغييرات في هذه الكتلة |
| `receipts_root`     | تجزئة شجرة إيصالات المعاملات                               |
| `logs_bloom`        | هيكل بيانات يحتوي على سجلات الأحداث                                |
| `prev_randao`       | قيمة تُستخدم في الاختيار العشوائي للمدقق                            |
| `block_number`      | رقم الكتلة الحالية                                     |
| `gas_limit`         | الحد الأقصى للغاز المسموح به في هذه الكتلة                                   |
| `gas_used`          | الكمية الفعلية للغاز المستخدم في هذه الكتلة                         |
| `timestamp`         | وقت الكتلة                                                      |
| `extra_data`        | بيانات إضافية عشوائية كبايتات خام                              |
| `base_fee_per_gas`  | قيمة الرسم الأساسي                                                  |
| `block_hash`        | تجزئة كتلة التنفيذ                                             |
| `transactions_root` | التجزئة الجذرية للمعاملات في الحمولة                        |
| `withdrawal_root`   | التجزئة الجذرية للسحوبات في الحمولة                         |

يحتوي `execution_payload` نفسه على ما يلي (لاحظ أن هذا مطابق للترويسة باستثناء أنه بدلاً من التجزئة الجذرية للمعاملات، فإنه يتضمن القائمة الفعلية للمعاملات ومعلومات السحب):

| الحقل              | الوصف                                                         |
| :----------------- | :------------------------------------------------------------------ |
| `parent_hash`      | تجزئة الكتلة الأصلية                                            |
| `fee_recipient`    | عنوان الحساب لدفع رسوم المعاملات إليه                      |
| `state_root`       | التجزئة الجذرية للحالة العالمية بعد تطبيق التغييرات في هذه الكتلة |
| `receipts_root`    | تجزئة شجرة إيصالات المعاملات                               |
| `logs_bloom`       | هيكل بيانات يحتوي على سجلات الأحداث                                |
| `prev_randao`      | قيمة تُستخدم في الاختيار العشوائي للمدقق                            |
| `block_number`     | رقم الكتلة الحالية                                     |
| `gas_limit`        | الحد الأقصى للغاز المسموح به في هذه الكتلة                                   |
| `gas_used`         | الكمية الفعلية للغاز المستخدم في هذه الكتلة                         |
| `timestamp`        | وقت الكتلة                                                      |
| `extra_data`       | بيانات إضافية عشوائية كبايتات خام                              |
| `base_fee_per_gas` | قيمة الرسم الأساسي                                                  |
| `block_hash`       | تجزئة كتلة التنفيذ                                             |
| `transactions`     | قائمة المعاملات المراد تنفيذها                                 |
| `withdrawals`      | قائمة كائنات السحب                                          |

تحتوي قائمة `withdrawals` على كائنات `withdrawal` منظمة بالطريقة التالية:

| الحقل            | الوصف                        |
| :--------------- | :--------------------------------- |
| `address`        | عنوان الحساب الذي قام بالسحب |
| `amount`         | مبلغ السحب                  |
| `index`          | قيمة مؤشر السحب             |
| `validatorIndex` | قيمة مؤشر المُدَقِّق              |

## وقت الكتلة {#block-time}

يشير وقت الكتلة إلى الوقت الفاصل بين الكتل. في إيثيريوم، يُقسم الوقت إلى وحدات مدتها اثنتا عشرة ثانية تسمى "خانات". في كل خانة، يتم اختيار مُدَقِّق واحد لاقتراح كتلة. بافتراض أن جميع المدققين متصلون بالإنترنت ويعملون بكامل طاقتهم، ستكون هناك كتلة في كل خانة، مما يعني أن وقت الكتلة هو <span dir="ltr">12s</span>. ومع ذلك، قد يكون المدققون غير متصلين بالإنترنت في بعض الأحيان عند استدعائهم لاقتراح كتلة، مما يعني أن الخانات يمكن أن تظل فارغة في بعض الأحيان.

يختلف هذا التنفيذ عن الأنظمة القائمة على إثبات العمل (PoW) حيث تكون أوقات الكتل احتمالية ويتم ضبطها بواسطة صعوبة التعدين المستهدفة للبروتوكول. يُعد [متوسط وقت الكتلة](https://etherscan.io/chart/blocktime) في إيثيريوم مثالاً مثاليًا على ذلك حيث يمكن استنتاج الانتقال من إثبات العمل (PoW) إلى إثبات الحصة (PoS) بوضوح بناءً على اتساق وقت الكتلة الجديد البالغ <span dir="ltr">12s</span>.

## حجم الكتلة {#block-size}

ملاحظة أخيرة مهمة هي أن الكتل نفسها محدودة الحجم. كل كتلة لها حجم مستهدف يبلغ 30 مليون غاز ولكن حجم الكتل سيزداد أو ينقص وفقًا لمتطلبات الشبكة، حتى حد الكتلة البالغ 60 مليون غاز (<span dir="ltr">2x</span> حجم الكتلة المستهدف). يمكن تعديل حد الغاز للكتلة صعودًا أو هبوطًا بمعامل <span dir="ltr">1/1024</span> من حد الغاز للكتلة السابقة. نتيجة لذلك، يمكن للمدققين تغيير حد الغاز للكتلة من خلال الإجماع. يجب أن يكون إجمالي كمية الغاز المستهلكة بواسطة جميع المعاملات في الكتلة أقل من حد الغاز للكتلة. هذا مهم لأنه يضمن عدم إمكانية أن تكون الكتل كبيرة بشكل تعسفي. إذا كان من الممكن أن تكون الكتل كبيرة بشكل تعسفي، فإن العقد الكاملة الأقل أداءً ستتوقف تدريجيًا عن القدرة على مواكبة الشبكة بسبب متطلبات المساحة والسرعة. كلما كبرت الكتلة، زادت قوة الحوسبة المطلوبة لمعالجتها في الوقت المناسب للخانة التالية. هذه قوة مركزية، تتم مقاومتها عن طريق وضع حد أقصى لأحجام الكتل.

## قراءات إضافية {#further-reading}

_هل تعرف موردًا مجتمعيًا ساعدك؟ قم بتعديل هذه الصفحة وأضفه!_

## مواضيع ذات صلة {#related-topics}

- [المعاملات](/developers/docs/transactions/)
- [الغاز](/developers/docs/gas/)
- [إثبات الحصة (PoS)](/developers/docs/consensus-mechanisms/pos)

<QuizWidget quizKey="blocks" />
