﻿---
title: "مخاطر التخزين في delegatecall"
description: "ينفّذ delegatecall تعليمات عقد آخر البرمجية باستخدام تخزين العقد المستدعي. تعرّف إلى كيفية تعريض تعارضات التخزين وسلطة الترقية والأهداف غير الموثوقة للعقد الوكيل أو المحفظة الذكية للخطر."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# مخاطر التخزين في delegatecall

> لأغراض تعليمية فقط؛ وليست نصيحة استثمارية. قد يؤدي الاستثمار إلى خسارة.

<a id="answer"></a>

## الإجابة المباشرة

ينفّذ `delegatecall` تعليمات العقد المستهدف البرمجية ضمن سياق العقد المستدعي. يحتفظ العقد المستدعي بتخزينه ورصيده و`address(this)` الخاص به، بينما يحتفظ `msg.sender` و`msg.value` بالقيم الواردة من الاستدعاء الأصلي.

يتيح هذا السلوك إنشاء العقود الوكيلة والمكتبات ووحدات المحافظ الذكية، لكنه يمنح التعليمات المفوّضة فعليًا صلاحيات العقد المستدعي. فأي كتابة في التخزين أو نقل للأصول أو منح للموافقات أو استدعاء خارجي يُنفّذ بصفة العقد المستدعي، لا بصفة العقد المستهدف الذي قدّم التعليمات البرمجية.

تعامل مع كل هدف يمكن الوصول إليه عبر `delegatecall` بوصفه تعليمات برمجية ذات امتيازات. تعتمد السلامة على قواعد اختيار الهدف، وتوافق تخطيطات التخزين، وحالة التهيئة، وضوابط الترقية، والتنفيذ الفعلي النشط للمعاملة.

<a id="mechanism"></a>

## آلية العمل

في الاستدعاء الخارجي العادي، يقرأ العقد المستدعَى تخزينه ويكتب فيه. أما مع `delegatecall`، فتعمل التعليمات البرمجية للهدف على تخزين العقد المستدعي: إذ تغيّر تعليمة `SSTORE` فتحةً تخص العقد المستدعي. ولا تهم أسماء متغيرات الهدف في وقت التشغيل؛ بل تهم فقط مواضع الفتحات المحسوبة.

ينشئ ذلك أربعة حدود ينبغي تدقيقها:

- **التحكم في الهدف:** حدّد ما إذا كانت الوجهة ثابتة، أو يختارها مستخدم، أو تُحل عبر سجل، أو يمكن لمسؤول تغييرها.
- **توافق التخزين:** قارن ترتيب المتغيرات وأنواعها والوراثة وفجوات التخزين والفتحات المسمّاة أو المعيارية عبر كل إصدار من التنفيذ.
- **التهيئة والتفويض:** تأكد من تعذر إعادة تشغيل دوال التهيئة، ومن أن دوال الترقية أو إدارة الوحدات تفرض هوية المستدعي المقصود وتأخير الحوكمة المقرر.
- **معالجة القيم المرجعة:** تحقق من تمرير حالات الفشل ومن فك ترميز البيانات المرجعة بوصفها النوع المتوقع؛ فالاستدعاءات منخفضة المستوى لا توفر فحوص نوع العقد المعتادة في Solidity.

يقلل ERC-1967 من تعارضات العقود الوكيلة بوضع عناوين التنفيذ والمنارة والمسؤول في فتحات معيارية خارج نطاق التخصيص المعتاد للمصرّف. لكنه لا يثبت أن التنفيذ آمن أو أن الترقية المصرح بها غير ضارة.

<a id="example"></a>

## مثال

افترض أن محفظة تخزن `owner` في `slot 0`. وتستخدم إضافة برمجية جرى تصريفها مع `counter` في `slot 0` هذا العداد وتزيده عندما تصل إليها المحفظة عبر `delegatecall`.

تغيّر الكتابة قيمة `owner` في المحفظة لأن التخزين يعود إلى المحفظة. وإذا كانت الكلمة الناتجة ترمّز عنوانًا يتحكم فيه مهاجم، فقد تتعرف فحوص التفويض اللاحقة إلى المهاجم بوصفه المالك، رغم أن الإضافة لم تحتفظ قط بأصول المحفظة.

لا يميّز إيصال ناجح بين تغييرات الحالة المقصودة والضارة. لذلك ينبغي لمحاكاة المعاملة فحص فروق التخزين، وتغيرات الأصول والموافقات، والأحداث الصادرة، والاستدعاءات اللاحقة بالاستناد إلى عنواني العقد الوكيل والتنفيذ المحددين.

<a id="risks"></a>

## المخاطر

- **تنفيذ هدف اعتباطي:** يمكن للأهداف التي يتحكم فيها المستخدم أو التي لا تُتحقق منها جيدًا تشغيل تعليمات برمجية ضارة بصلاحيات العقد المستدعي.
- **تعارض التخزين:** يمكن للتنفيذ الكتابة فوق الملكية أو الأرصدة أو حالة الإيقاف المؤقت، أو حتى الفتحة التي تحدد التنفيذ التالي.
- **ترقية غير آمنة:** يمكن لمسؤول أو عملية حوكمة مخترقة استبدال تعليمات برمجية خضعت للمراجعة سابقًا بعد أن يودع المستخدمون أصولًا أو يمنحوا موافقات.
- **فشل التهيئة:** قد يتيح عقد وكيل أو تنفيذ غير مهيأ لحساب آخر الاستحواذ على أدوار ذات امتيازات أو إعداد تبعيات خطرة.
- **فحص مضلل:** قد يؤدي التحقق من مصدر العقد الوكيل أو التنفيذ الحالي أو الواجهة وحدها إلى إغفال منارة أو ترقية معلقة أو سجل وحدات أو مسار تنفيذ بديل.

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

<a id="misconceptions"></a>

## مفاهيم خاطئة شائعة

- **«لا يستطيع الهدف المساس بأصول العقد المستدعي».** تعمل التعليمات المفوّضة بصفة العقد المستدعي، ويمكنها استدعاء عقود خارجية أو نقل الأصول أو إنشاء موافقات إذا كان العقد المستدعي يملك هذه القدرات.
- **«تطابق أسماء المتغيرات يمنع التعارضات».** تستخدم EVM فتحات التخزين لا أسماء الشفرة المصدرية. ويجب أن يظل ترتيب التخطيط والوراثة والأنواع متوافقًا.
- **«توثيق شفرة العقد الوكيل يعني أن النظام موثّق».** يمثل كل من التنفيذ النشط والمنارة ومسؤول الترقية وحالة التهيئة وصلاحيات الوحدات جزءًا منفصلًا من حدود الثقة.

<a id="related"></a>

## مواضيع ذات صلة

- [الأمن الاقتصادي المشفّر](/ar/crypto/crypto-economic-security/)
- [RPC للمعاملات الخاصة](/ar/crypto/private-transaction-rpc/)
- [العقد الوكيل](/ar/crypto/proxy-contract/)
- [العقد الذكي](/ar/crypto/smart-contract/)
- [محاكاة المعاملات](/ar/crypto/transaction-simulation/)

<a id="sources"></a>

## المصادر

- [Introduction to Smart Contracts](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html) - Solidity Documentation (تاريخ الاطلاع: 2026-08-20)
- [Units and Globally Available Variables](https://docs.soliditylang.org/en/latest/units-and-global-variables.html) - Solidity Documentation (تاريخ الاطلاع: 2026-08-20)
- [ERC-1967: Proxy Storage Slots](https://eips.ethereum.org/EIPS/eip-1967) - Ethereum Improvement Proposals (تاريخ الاطلاع: 2026-08-20)

Source: https://wiki.fcontext.com/ar/crypto/delegatecall-storage-risk/index.mdx
