# Transfer Hooks

تتيح عمليات الربط لنقل Token-2022 أن ينفّذ البرنامج منطقًا مخصصًا على كل عملية نقل للرمز. يتيح Rome لعقود Solidity الذكية أن تعمل كعمليات ربط للنقل — مما يجلب قابلية برمجة EVM إلى معيار الرموز في Solana.

## كيف تعمل عمليات ربط النقل

يدعم Token-2022 (برنامج الرموز من الجيل التالي في Solana) امتدادًا يسمى Transfer Hook. عندما يكون لدى mint ربط نقل مُهيأ:

1. كل `transfer_checked` استدعاء لذلك الـ mint يستدعي برنامج الربط المخصص
2. يتلقى الربط تفاصيل النقل (المرسل، المستلم، المبلغ، mint)
3. يمكن للربط الموافقة على النقل أو رفضه
4. إذا رفض الربط (تراجع)، يفشل النقل بالكامل

## عمليات ربط النقل المدعومة بـ EVM

في Rome، يمكن لعقد Solidity أن يعمل كمعالج لربط النقل:

```
المستخدم يبدّل الرمز على Jupiter (Solana)
    ↓
Jupiter يستدعي transfer_checked
    ↓
Token-2022 يستدعي برنامج الربط المخصص
    ↓
برنامج الربط = Rome Meta-Hook Router
    ↓
الموجّه يرسل الطلب إلى عقد Solidity عبر CPI → Rome EVM
    ↓
عقد Solidity ينفّذ منطق الامتثال
    ↓
نجاح: يكتمل النقل
فشل: يتراجع النقل بالكامل
```

هذا يعني **كل عملية نقل لرموز SPL على Solana** — سواء على Jupiter أو Raydium أو Phantom أو أي محفظة — يمكن أن تؤدي إلى تشغيل منطق امتثال EVM.

## مثال: ربط امتثال KYC

```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;

contract ComplianceHook {
    mapping(address => bool) public kycApproved;
    mapping(address => bool) public sanctioned;

    // يُستدعى بواسطة Meta-Hook Router عند كل عملية نقل
    function onTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bytes32 mint
    ) external view {
        // التحقق من أن المرسل خضع لـ KYC
        require(kycApproved[sender], "Sender not KYC approved");

        // التحقق من أن المستلم خضع لـ KYC
        require(kycApproved[recipient], "Recipient not KYC approved");

        // التحقق من أن أيًا من الطرفين ليس خاضعًا للعقوبات
        require(!sanctioned[sender], "Sender sanctioned");
        require(!sanctioned[recipient], "Recipient sanctioned");

        // تمت الموافقة على النقل — تعود الدالة بدون تراجع
    }
}
```

## القيود الرئيسية

**`transfer_checked` فقط.** تعمل الربط فقط عند `transfer_checked` الاستدعاءات، وليس عند `transfer`. أي تكامل يستخدم رموز Rome يجب أن يستخدم `transfer_checked` لضمان تطبيق الامتثال.

**يلزم وضع الحالة الواحدة.** تُنفَّذ عمليات ربط النقل داخل معاملات Solana. لا يمكن الوصول إلى OP-Geth من ذلك السياق. يجب أن يعمل كل منطق ربط EVM في وضع الحالة الواحدة (proxy).

**ميزانية عمق CPI.** يستهلك استدعاء الربط عمق CPI:

```
المستوى 0: بروتوكول DeFi → SPL Token-2022
المستوى 1: Token-2022 → Meta-Hook Router
المستوى 2: Meta-Hook Router → Rome EVM (CPI precompile)
المستوى 3: Rome EVM → (أي CPI إضافي من Solidity)
```

يبقى مستوى CPI واحد فقط بعد سلسلة استدعاء الربط.

**ميزانية الحوسبة.** تستهلك عمليات ربط EVM قدرًا كبيرًا من CU:

* الحد الأساسي لحمولة النقل: 100,000 CU
* لكل ربط فرعي EVM: 200,000 CU
* الميزانية الموصى بها لنقل EVM: 800,000 CU

## إدراج بروتوكولات DeFi في القائمة البيضاء

تحتاج خزائن بروتوكولات DeFi (Jupiter، Kamino، Orca، خزنة جسر Rome) إلى معالجة خاصة. تتلقى هذه الخزائن الرموز وترسلها كجزء من العمليات العادية — ومنعها سيكسر DeFi.

يحافظ عقد الامتثال على `protocolWhitelist` mapping. تُوافق العناوين المدرجة في القائمة البيضاء (الخزائن، وPDAs للبروتوكولات المعروفة) دون فحوصات KYC. يتيح ذلك نقل الرموز عبر بروتوكولات DeFi مع الاستمرار في فرض الامتثال على تحويلات المستخدم النهائي.

## نموذج العناوين

ترى عمليات ربط النقل **عناوين EVM المشتقة من Rome**، وليس عناوين Ethereum. عندما يتفاعل مستخدم Solana مع رمز مربوط بـ Rome، يتم ربط مفتاحه العام في Solana بعنوان EVM عبر اشتقاق PDA. يوفّر Rome Solidity SDK أدوات مساعدة لهذا الربط.

## الصفحات ذات الصلة

* [Meta-Hook Router](/ar/almntjat/meta-hook-router.md) — مضاعف الربط الذي يتيح عدة روابط فرعية لكل mint
* [تكامل الرموز](/ar/almfahym-alasasyh/token-interop.md) — كيف ترتبط رموز ERC-20 و SPL
* [دليل بناء Transfer Hook](https://github.com/rome-protocol/docs/blob/main/developer-guides/build-transfer-hook.md) — تطوير الربط خطوة بخطوة


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rome.builders/ar/almfahym-alasasyh/transfer-hooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
