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

المعاملات هي تعليمات موقعة تشفيريًا من الحسابات. سيبدأ الحساب معاملة لتحديث حالة شبكة [إيثيريوم](/). أبسط معاملة هي تحويل <span dir="ltr">ETH</span> من حساب إلى آخر.

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

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

## ما هي المعاملة؟ {#whats-a-transaction}

تشير معاملة إيثيريوم إلى إجراء يبدأه حساب مملوك خارجيًا، بعبارة أخرى حساب يديره إنسان، وليس عقدًا. على سبيل المثال، إذا أرسل بوب إلى أليس <span dir="ltr">1 ETH</span>، فيجب خصم المبلغ من حساب بوب وإضافته إلى حساب أليس. يحدث هذا الإجراء الذي يغير الحالة داخل معاملة.

![Diagram showing a transaction cause state change](./tx.png)
_مخطط مقتبس من [توضيح آلة إيثيريوم الافتراضية (EVM)](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_

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

تتطلب المعاملات رسومًا ويجب تضمينها في كتلة تم التحقق من صحتها. لجعل هذه النظرة العامة أبسط، سنغطي رسوم الغاز والتحقق من الصحة في مكان آخر.

تتضمن المعاملة المقدمة المعلومات التالية:

- `from` – عنوان المرسل، الذي سيقوم بتوقيع المعاملة. سيكون هذا حسابًا مملوكًا خارجيًا لأن حسابات العقود لا يمكنها إرسال معاملات
- `to` – عنوان المستلم (إذا كان حسابًا مملوكًا خارجيًا، فستقوم المعاملة بتحويل القيمة. إذا كان حساب عقد، فستقوم المعاملة بتنفيذ كود العقد)
- `signature` – مُعرّف المرسل. يتم إنشاء هذا عندما يقوم المفتاح الخاص للمرسل بتوقيع المعاملة ويؤكد أن المرسل قد صرح بهذه المعاملة
- `nonce` - عداد يتزايد تسلسليًا يشير إلى رقم المعاملة من الحساب (رقم فريد)
- `value` – مقدار <span dir="ltr">ETH</span> المراد تحويله من المرسل إلى المستلم (مقوم بوحدة <span dir="ltr">Wei</span>، حيث يساوي <span dir="ltr">1 ETH</span> <span dir="ltr">1e+18 wei</span>)
- `input data` – حقل اختياري لتضمين بيانات عشوائية
- `gasLimit` – الحد الأقصى لعدد وحدات الغاز التي يمكن أن تستهلكها المعاملة. تحدد [آلة إيثيريوم الافتراضية (EVM)](/developers/docs/evm/opcodes) وحدات الغاز المطلوبة لكل خطوة حسابية
- `maxPriorityFeePerGas` - الحد الأقصى لسعر الغاز المستهلك ليتم تضمينه كإكرامية للمُدَقِّق
- `maxFeePerGas` - الحد الأقصى للرسوم لكل وحدة غاز التي يكون المستخدم على استعداد لدفعها مقابل المعاملة (شاملة `baseFeePerGas` و `maxPriorityFeePerGas`)

الغاز هو إشارة إلى الحساب المطلوب لمعالجة المعاملة بواسطة مُدَقِّق. يجب على المستخدمين دفع رسوم مقابل هذا الحساب. يحدد `gasLimit` و `maxPriorityFeePerGas` الحد الأقصى لرسوم المعاملة المدفوعة للمُدَقِّق. [المزيد عن الغاز](/developers/docs/gas/).

سيبدو كائن المعاملة هكذا تقريبًا:

```js
{
  from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
  to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
  gasLimit: "21000",
  maxFeePerGas: "300",
  maxPriorityFeePerGas: "10",
  nonce: "0",
  value: "10000000000"
}
```

لكن كائن المعاملة يحتاج إلى توقيع باستخدام المفتاح الخاص للمرسل. يثبت هذا أن المعاملة لا يمكن أن تأتي إلا من المرسل ولم يتم إرسالها بشكل احتيالي.

سيتعامل عميل إيثيريوم مثل جو إيثريوم (geth) مع عملية التوقيع هذه.

مثال على استدعاء [<span dir="ltr">JSON-RPC</span>](/developers/docs/apis/json-rpc):

```json
{
  "id": 2,
  "jsonrpc": "2.0",
  "method": "account_signTransaction",
  "params": [
    {
      "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",
      "gas": "0x55555",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "input": "0xabcd",
      "nonce": "0x0",
      "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
      "value": "0x1234"
    }
  ]
}
```

مثال على الاستجابة:

```json
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
    "tx": {
      "nonce": "0x0",
      "maxFeePerGas": "0x1234",
      "maxPriorityFeePerGas": "0x1234",
      "gas": "0x55555",
      "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",
      "value": "0x1234",
      "input": "0xabcd",
      "v": "0x26",
      "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",
      "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",
      "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"
    }
  }
}
```

- `raw` هي المعاملة الموقعة بصيغة مشفرة بـ [بادئة الطول العودية (RLP)](/developers/docs/data-structures-and-encoding/rlp)
- `tx` هي المعاملة الموقعة بصيغة <span dir="ltr">JSON</span>

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

### حقل البيانات {#the-data-field}

تصل الغالبية العظمى من المعاملات إلى عقد من حساب مملوك خارجيًا.
تُكتب معظم العقود بلغة <span dir="ltr">Solidity</span> وتفسر حقل بياناتها وفقًا لـ [واجهة التطبيق الثنائية (ABI)](/glossary/#abi).

تحدد البايتات الأربعة الأولى الوظيفة التي يجب استدعاؤها، باستخدام تجزئة اسم الوظيفة ووسائطها.
يمكنك أحيانًا تحديد الوظيفة من المُحدِّد باستخدام [قاعدة البيانات هذه](https://www.4byte.directory/signatures/).

بقية بيانات الاستدعاء هي الوسائط، [مشفرة كما هو محدد في مواصفات ABI](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding).

على سبيل المثال، دعنا نلقي نظرة على [هذه المعاملة](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1).
استخدم **انقر لرؤية المزيد** (Click to see More) لرؤية بيانات الاستدعاء.

مُحدِّد الوظيفة هو `0xa9059cbb`. هناك العديد من [الوظائف المعروفة بهذا التوقيع](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb).
في هذه الحالة، تم رفع [الكود المصدري للعقد](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) إلى <span dir="ltr">Etherscan</span>، لذلك نعلم أن الوظيفة هي `transfer(address,uint256)`.

بقية البيانات هي:

```
0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279
000000000000000000000000000000000000000000000000000000003b0559f4
```

وفقًا لمواصفات <span dir="ltr">ABI</span>، تظهر القيم الصحيحة (مثل العناوين، وهي أعداد صحيحة بحجم <span dir="ltr">20-byte</span>) في <span dir="ltr">ABI</span> ككلمات بحجم <span dir="ltr">32-byte</span>، مبطنة بأصفار في المقدمة.
لذلك نعلم أن عنوان `to` هو [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279).
قيمة `value` هي <span dir="ltr">0x3b0559f4 = 990206452</span>.

### واصفات المعاملة {#transaction-descriptors}

نظرًا لأن حقل البيانات يحتوي على بايتات سداسية عشرية مبهمة، فقد يكون من الصعب للغاية التحقق من الإجراء الذي ستنفذه المعاملة فعليًا. تتم معالجة ثغرة "التوقيع الأعمى" هذه بواسطة **[التوقيع الواضح](https://clearsigning.org/)** من خلال استخدام [واصفات المعاملة](https://eips.ethereum.org/EIPS/eip-7730) (المحددة بواسطة <span dir="ltr">ERC-7730</span>).  

تستخدم مواصفات <span dir="ltr">ERC-7730</span> واصفات المعاملة (غالبًا ما تكون مهيكلة كملفات <span dir="ltr">JSON</span>) لإثراء البيانات الموجودة في <span dir="ltr">ABIs</span> والرسائل المهيكلة، مثل بيانات الاستدعاء لمعاملات <span dir="ltr">EVM</span>، ورسائل <span dir="ltr">EIP-712</span>، وعمليات المستخدم في <span dir="ltr">EIP-4337</span>. يستخدم المطورون هذه الواصفات لتعيين متغيرات معاملة محددة مباشرة في قوالب التنسيق، مما يضمن بقاء البيانات الأساسية قابلة للقراءة آليًا للتطبيقات.

في الواجهة الأمامية، تستخدم المحافظ سياق التنسيق هذا لترجمة رمز البايت المبهم إلى معلومات واضحة يمكن للبشر قراءتها. من خلال حل القيم تلقائيًا مثل عناوين الرموز المميزة إلى رموز مؤشرات معروفة، أو المبالغ إلى أرقام عشرية، يتم تقديم ملخص بلغة بسيطة للمستخدمين يوضح القصد الدقيق للمعاملة (على سبيل المثال، 'مبادلة <span dir="ltr">1000 USDC</span> مقابل ما لا يقل عن <span dir="ltr">0.25 WETH</span>') قبل أن يقوموا بالتوقيع

## أنواع المعاملات {#types-of-transactions}

يوجد على إيثيريوم بضعة أنواع مختلفة من المعاملات:

- المعاملات العادية: معاملة من حساب إلى آخر.
- معاملات نشر العقد: معاملة بدون عنوان 'إلى' (to)، حيث يتم استخدام حقل البيانات لكود العقد.
- تنفيذ عقد: معاملة تتفاعل مع عقد ذكي تم نشره. في هذه الحالة، عنوان 'إلى' (to) هو عنوان العقد الذكي.

### حول الغاز {#on-gas}

كما ذكرنا، تكلف المعاملات [غاز](/developers/docs/gas/) لتنفيذها. تتطلب معاملات التحويل البسيطة <span dir="ltr">21,000</span> وحدة من الغاز.

لذلك لكي يرسل بوب إلى أليس <span dir="ltr">1 ETH</span> بـ `baseFeePerGas` يبلغ <span dir="ltr">190 Gwei</span> و `maxPriorityFeePerGas` يبلغ <span dir="ltr">10 Gwei</span>، سيحتاج بوب إلى دفع الرسوم التالية:

```
(190 + 10) * 21000 = 4,200,000 gwei
--أو--
0.0042 ETH
```

سيتم خصم **<span dir="ltr">-1.0042 ETH</span>** من حساب بوب (<span dir="ltr">1 ETH</span> لأليس + <span dir="ltr">0.0042 ETH</span> كرسوم الغاز)

سيتم إضافة **<span dir="ltr">+1.0 ETH</span>** إلى حساب أليس

سيتم حرق الرسم الأساسي **<span dir="ltr">-0.00399 ETH</span>**

يحتفظ المُدَقِّق بالإكرامية **<span dir="ltr">+0.000210 ETH</span>**


![Diagram showing how unused gas is refunded](./gas-tx.png)
_مخطط مقتبس من [توضيح آلة إيثيريوم الافتراضية (EVM)](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf)_

يتم استرداد أي غاز لم يُستخدم في المعاملة إلى حساب المستخدم.

### تفاعلات العقد الذكي {#smart-contract-interactions}

الغاز مطلوب لأي معاملة تتضمن عقدًا ذكيًا.

يمكن أن تحتوي العقود الذكية أيضًا على وظائف تُعرف بوظائف [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) أو [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions)، والتي لا تغير حالة العقد. على هذا النحو، فإن استدعاء هذه الوظائف من حساب مملوك خارجيًا (EOA) لن يتطلب أي غاز. استدعاء <span dir="ltr">RPC</span> الأساسي لهذا السيناريو هو [`eth_call`](/developers/docs/apis/json-rpc#eth_call).

على عكس الوصول إليها باستخدام `eth_call`، يتم أيضًا استدعاء وظائف `view` أو `pure` هذه بشكل شائع داخليًا (أي من العقد نفسه أو من عقد آخر) مما يكلف غازًا.

## دورة حياة المعاملة {#transaction-lifecycle}

بمجرد تقديم المعاملة، يحدث ما يلي:

1. يتم إنشاء تجزئة المعاملة تشفيريًا:
   `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017`
2. يتم بعد ذلك بث المعاملة إلى الشبكة وإضافتها إلى مجمع المعاملات الذي يتكون من جميع معاملات الشبكة المعلقة الأخرى.
3. يجب أن يختار مُدَقِّق معاملتك ويضمنها في كتلة من أجل التحقق من المعاملة واعتبارها "ناجحة".
4. بمرور الوقت، ستتم ترقية الكتلة التي تحتوي على معاملتك إلى "مبررة" ثم "نهائية". تجعل هذه الترقيات من المؤكد بشكل أكبر أن معاملتك كانت ناجحة ولن يتم تغييرها أبدًا. بمجرد أن تصبح الكتلة "نهائية"، لا يمكن تغييرها إلا من خلال هجوم على مستوى الشبكة سيكلف مليارات الدولارات.

## عرض مرئي {#a-visual-demo}

شاهد أوستن وهو يرشدك عبر المعاملات، والغاز، والتعدين.

<VideoWatch slug="transactions-eth-build" />

## غلاف المعاملة محدد النوع {#typed-transaction-envelope}

كان لدى إيثيريوم في الأصل تنسيق واحد للمعاملات. احتوت كل معاملة على رقم فريد، وسعر الغاز، وحد الغاز، وعنوان المستلم (to)، والقيمة، والبيانات، و v، و r، و s. هذه الحقول [مشفرة بـ RLP](/developers/docs/data-structures-and-encoding/rlp/)، لتبدو هكذا تقريبًا:

`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])`

تطورت إيثيريوم لدعم أنواع متعددة من المعاملات للسماح بتنفيذ ميزات جديدة مثل قوائم الوصول و [<span dir="ltr">EIP-1559</span>](https://eips.ethereum.org/EIPS/eip-1559) دون التأثير على تنسيقات المعاملات القديمة.

[<span dir="ltr">EIP-2718</span>](https://eips.ethereum.org/EIPS/eip-2718) هو ما يسمح بهذا السلوك. يتم تفسير المعاملات على النحو التالي:

`TransactionType || TransactionPayload`

حيث يتم تعريف الحقول على النحو التالي:

- `TransactionType` - رقم بين <span dir="ltr">0</span> و <span dir="ltr">0x7f</span>، لإجمالي <span dir="ltr">128</span> نوعًا ممكنًا من المعاملات.
- `TransactionPayload` - مصفوفة بايتات عشوائية يحددها نوع المعاملة.

بناءً على قيمة `TransactionType`، يمكن تصنيف المعاملة إلى:

1. **معاملات النوع 0 (القديمة):** تنسيق المعاملة الأصلي المستخدم منذ إطلاق إيثيريوم. لا تتضمن ميزات من [<span dir="ltr">EIP-1559</span>](https://eips.ethereum.org/EIPS/eip-1559) مثل حسابات رسوم الغاز الديناميكية أو قوائم الوصول للعقود الذكية. تفتقر المعاملات القديمة إلى بادئة محددة تشير إلى نوعها في شكلها المتسلسل، وتبدأ بالبايت `0xf8` عند استخدام تشفير [بادئة الطول العودية (RLP)](/developers/docs/data-structures-and-encoding/rlp). قيمة نوع المعاملة (TransactionType) لهذه المعاملات هي `0x0`.

2. **معاملات النوع 1:** تم تقديمها في [<span dir="ltr">EIP-2930</span>](https://eips.ethereum.org/EIPS/eip-2930) كجزء من [ترقية برلين](/ethereum-forks/#berlin) لإيثيريوم، وتتضمن هذه المعاملات معلمة `accessList`. تحدد هذه القائمة العناوين ومفاتيح التخزين التي تتوقع المعاملة الوصول إليها، مما يساعد على تقليل تكاليف [الغاز](/developers/docs/gas/) المحتملة للمعاملات المعقدة التي تتضمن عقودًا ذكية. لا يتم تضمين تغييرات سوق رسوم <span dir="ltr">EIP-1559</span> في معاملات النوع 1. تتضمن معاملات النوع 1 أيضًا معلمة `yParity`، والتي يمكن أن تكون إما `0x0` أو `0x1`، مما يشير إلى تكافؤ قيمة y لتوقيع secp256k1. يتم التعرف عليها من خلال البدء بالبايت `0x01`، وقيمة نوع المعاملة (TransactionType) الخاصة بها هي `0x1`.

3. **معاملات النوع 2**، والتي يشار إليها عادةً باسم معاملات <span dir="ltr">EIP-1559</span>، هي معاملات تم تقديمها في [<span dir="ltr">EIP-1559</span>](https://eips.ethereum.org/EIPS/eip-1559)، في [ترقية لندن](/ethereum-forks/#london) لإيثيريوم. لقد أصبحت نوع المعاملة القياسي على شبكة إيثيريوم. تقدم هذه المعاملات آلية جديدة لسوق الرسوم تعمل على تحسين القدرة على التنبؤ من خلال فصل رسوم المعاملة إلى الرسم الأساسي ورسم الأولوية. تبدأ بالبايت `0x02` وتتضمن حقولاً مثل `maxPriorityFeePerGas` و `maxFeePerGas`. أصبحت معاملات النوع 2 الآن هي الافتراضية نظرًا لمرونتها وكفاءتها، وهي مفضلة بشكل خاص خلال فترات ازدحام الشبكة العالي لقدرتها على مساعدة المستخدمين في إدارة رسوم المعاملات بشكل أكثر قابلية للتنبؤ. قيمة نوع المعاملة (TransactionType) لهذه المعاملات هي `0x2`.

4. **معاملات النوع 3 (كتلة بيانات)** تم تقديمها في [<span dir="ltr">EIP-4844</span>](https://eips.ethereum.org/EIPS/eip-4844) كجزء من [ترقية دينكون](/ethereum-forks/#dencun) لإيثيريوم. تم تصميم هذه المعاملات للتعامل مع بيانات "كتلة بيانات" (الكائنات الثنائية الكبيرة) بشكل أكثر كفاءة، مما يفيد بشكل خاص تجميعات طبقة 2 (L2) من خلال توفير طريقة لنشر البيانات على شبكة إيثيريوم بتكلفة أقل. تتضمن معاملات كتلة بيانات حقولاً إضافية مثل `blobVersionedHashes`، و `maxFeePerBlobGas`، و `blobGasPrice`. تبدأ بالبايت `0x03`، وقيمة نوع المعاملة (TransactionType) الخاصة بها هي `0x3`. تمثل معاملات كتلة بيانات تحسنًا كبيرًا في توفر بيانات إيثيريوم وقدرات التوسع.

5. **معاملات النوع 4** تم تقديمها في [<span dir="ltr">EIP-7702</span>](https://eips.ethereum.org/EIPS/eip-7702) كجزء من [ترقية بيكترا](/roadmap/pectra/) لإيثيريوم. تم تصميم هذه المعاملات لتكون متوافقة مع الإصدارات المستقبلية مع تجريد الحساب. إنها تسمح للحسابات المملوكة خارجيًا (EOAs) بالتصرف مؤقتًا مثل حسابات العقود الذكية دون المساس بوظائفها الأصلية. تتضمن معلمة `authorization_list`، والتي تحدد العقد الذكي الذي يفوض إليه الحساب المملوك خارجيًا سلطته. بعد المعاملة، سيحتوي حقل كود الحساب المملوك خارجيًا على عنوان العقد الذكي المفوض.

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

- [<span dir="ltr">EIP-2718</span>: غلاف المعاملة محدد النوع](https://eips.ethereum.org/EIPS/eip-2718)

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

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

- [الحسابات](/developers/docs/accounts/)
- [آلة إيثيريوم الافتراضية (EVM)](/developers/docs/evm/)
- [الغاز](/developers/docs/gas/)

<Divider />

<QuizWidget quizKey="transactions" />
