---
title: "أبقِ مفتاح التداول والأسرار الخاصة بالتطبيق بعيدًا عن قرص الخادم"
description: "يحفظ erpc worker مفتاح التداول والأسرار الخاصة بالتطبيق في 1Password أو سلسلة مفاتيح نظام التشغيل أو مخزن مفاتيح مشفر، ويسلّمها إلى التطبيق في الذاكرة."
canonical: "https://erpc.global/ar/doc/erpc-cli/worker-secrets/"
locale: "ar"
---

# أبقِ مفتاح التداول والأسرار الخاصة بالتطبيق بعيدًا عن قرص الخادم

يحفظ `erpc worker` مفتاح التداول والأسرار الخاصة بالتطبيق في 1Password أو سلسلة مفاتيحك أو مخزن مفاتيح مشفر، ويسلّمها إلى التطبيق في الذاكرة، ولا يسلّمها أبدًا إلى قرص الخادم.

تصف هذه الصفحة ERPC CLI `v0.1.0-rc.4`، وهو إصدار تمهيدي.

## كيف يصل مفتاح التداول إلى التطبيق

يحصل التطبيق الذي لديه محفظة على مفتاحه عبر أنبوب عند بدء تشغيله. لا يوجد `wallet.json` ولا `.env` ولا نسخة على الخادم. ولا يكتب erpc المفتاح على أي قرص دون تشفير: الملف الوحيد الذي يضعه فيه هو ملف مخزن المفاتيح، على جهازك، مشفرًا بعبارة المرور الخاصة بك.

- **مكان الحفظ:** ينشئ `erpc worker key new` المفتاح في 1Password عندما يحفظ `erpc login` الجلسة هناك، وإلا ففي سلسلة المفاتيح، وإلا ففي مخزن المفاتيح. ويسجّل `erpc.toml` مرجع المفتاح ومفتاحه العام.
- **على الخادم:** يحتفظ وكيل erpc worker بالمفتاح في الذاكرة فقط. فهو يجعل نفسه غير قابل للتفريغ ويقفل ذاكرته، ويسلّم المفتاح إلى التطبيق عبر واصف ملف؛ ويمسحه التطبيق بعد قراءته.
- **بعد إعادة تشغيل الخادم،** يعود الـ worker مقفلًا: لا يعمل التطبيق حتى يرسل `erpc worker start` المفتاح مرة أخرى. والوكيل الذي يفشل أو يُقتل يبدؤه systemd من جديد، ويعود مقفلًا بالطريقة نفسها.
- **تحديث الحزم لا يعيد تشغيل الـ worker.** يطلب `deploy` من `needrestart` أن يترك وحدات الـ worker وشأنها: في وضعه التلقائي يؤجلها، وعند سؤاله في الطرفية تكون إجابته الافتراضية بشأنها لا، لذا فإن تحديث الأمان الذي يجري دون إشراف لا يعيد تشغيل التطبيق. وعندما يتعذر كتابة تلك القاعدة، يذكر النشر ذلك ويستمر، ويعمل الـ worker حينها دون هذه الحماية.

يُحدَّد مفتاح التداول بواسطة `[wallet]` ولا شيء غيره، ولا يقرؤه erpc إلا لشخص أمام الطرفية: لا لأداة ذكاء اصطناعي، ولا باستخدام حساب خدمة 1Password. ويُرفض سطر في `[secrets]` يذكر مرجع `[wallet]`، أو يذكر حساب `keychain:` أو `keystore:` ينتهي بـ `.wallet`. وفي مخزن المفاتيح، المُدخل المحفوظ بوصفه مفتاحًا لا يُفتح بوصفه سرًّا. أما في 1Password، وتحت حساب سلسلة مفاتيح باسم آخر، فلا شيء يميّز المفتاح: ملف `erpc.toml` بلا `[wallet]` يذكر عنصرًا كهذا تحت `[secrets]` يُقرأ فيه ذلك العنصر بوصفه سرًّا.

## اختيار مكان حفظ القيم

استخدام 1Password اختياري. يحفظ `erpc worker key new` و`erpc worker secret put` ما يُعطى لهما في أول ما ينطبق مما يلي، ما لم يحدد `--store` مكانًا بعينه (`--store 1password --vault <id>` و`--store keychain` و`--store keystore`):

1. **1Password**، عندما يحفظ `erpc login` الجلسة هناك أو عند تمرير `--vault`.
2. **سلسلة مفاتيح نظام التشغيل**، حيث تبقى القيمة محفوظة بعد إعادة تشغيل الجهاز: macOS وWindows وLinux مع حلقة مفاتيح سطح المكتب في جلسة مسجَّل الدخول إليها.
3. **مخزن مفاتيح erpc**، على جهاز Linux لا يحتوي على حلقة مفاتيح كهذه: خادم بلا واجهة رسومية، أو WSL، أو تسجيل دخول عبر SSH. ويُرفض `--store keychain` على جهاز كهذا.

في سلسلة المفاتيح أو مخزن المفاتيح، يوجد المفتاح على ذلك الجهاز وحده، دون نسخة ودون مزامنة، ولا يستطيع جهاز آخر قراءة مرجع `keychain:` أو `keystore:`.

فقدان الجهاز أو مسحه يعني ضياع المحفظة: احتفظ فيها بالقليل، أو استخدم 1Password، الذي يستطيع قراءته كل جهاز مسجَّل الدخول إلى الخزنة. سجّل الدخول إلى 1Password باستخدام `erpc login --store 1password-desktop`، أو عبر `op signin` حيث لا يوجد تطبيق سطح المكتب.

يمكن لحساب خدمة 1Password أن يحتفظ بأسرار التطبيق، لكن erpc لا يقرأ مفتاح التداول بواسطته. ومع 1Password، قد تُظهر كل قراءة طلب موافقة في التطبيق، ويعرض erpc مؤشرًا دوّارًا أثناء الانتظار.

## حفظ سر

تُحفظ الأسرار، مثل رموز API ومفاتيح RPC، بالطريقة نفسها، لكنها تصل إلى التطبيق كمتغيرات بيئة، لا عبر أنبوب. يحفظ `erpc worker secret put <NAME>` القيمة، ولا يحتوي `[secrets]` في `erpc.toml` إلا على مرجعها.

```bash
erpc worker secret put API_TOKEN --generate          # the bot's own API token, made for you and shown to nobody
erpc worker secret put ERPC_API_KEY --from-account   # the account's RPC key, read from your account (or SOLANA_RPC_ENDPOINT in [vars])
```

- **`--generate`** ينشئ القيمة: 32 بايتًا عشوائيًا، في صورة 64 حرفًا بالصيغة السداسية العشرية.
- **`--from-account`** يحفظ أول مفتاح من مفاتيح RPC في حسابك يقبله RPC المشترك. تُجرَّب المفاتيح بالترتيب، بدءًا بالمفتاح الأساسي، باستدعاء `getHealth` واحد لكل مفتاح، مع مهلة 8 ثوانٍ للرد. والمفتاح الذي يُجاب عنه بـ 401 أو 403 يُرفض ويُجرَّب التالي، ولا يُحفظ إلا المفتاح الذي قَبِله RPC. ويذكر الأمر ما إذا كان هو المفتاح الأساسي للحساب أم مفتاحًا آخر (`account_key` مع `--json`).
- لا تُطبع أي من القيمتين، ولا حتى مع `--json`. وأول استخدام لمخزن المفاتيح، أو استخدام مخزن مفاتيح مقفل، يحتاج إلى شخص أمام الطرفية.
- تُجرَّب المفاتيح من هذا الجهاز، لذا فإن المفتاح المقيَّد بعنوان الخادم يُرفض هنا رغم أنه يعمل هناك. وعندما تُرفض كل المفاتيح، لا يحفظ `--from-account` شيئًا، وتحفظ أنت المفتاح الذي تقصده يدويًا، بكتابته دون أن يظهر أو بتمريره عبر أنبوب. وعندما يتعذر سؤال RPC، لا يحفظ شيئًا ويبقى `erpc.toml` كما كان؛ شغّل الأمر نفسه مرة أخرى.

لحفظ مفتاح يدويًا:

```bash
erpc worker secret put ERPC_API_KEY        # asks for the value, unseen
```

- يحفظ `--replace` قيمة جديدة لاسم مضبوط مسبقًا. ويسرد `erpc worker secret list` الإعدادات السرية بأسمائها ومكان حفظ كل منها.
- الإعداد الذي يوفره خط بيانات (`GRPC_ENDPOINT` و`SHREDS_ENDPOINT` و`SOLANA_SEND_RPC_ENDPOINT`) ليس سرًّا أبدًا: يضبطه `--grpc` و`--shreds` و`--unlimited`.

المرجع في `[secrets]` أو `[wallet]` واحد مما يلي:

| المرجع | مكان القيمة |
| --- | --- |
| `op://<vault-id>/<item-id>/<field>` | 1Password، بمعرّف الخزنة ومعرّف العنصر |
| `keychain:<service>/<account>` | سلسلة مفاتيح نظام التشغيل على الجهاز الذي حفظها |
| `keystore:<service>/<account>` | مخزن مفاتيح erpc على الجهاز الذي حفظها |

## مخزن المفاتيح

مخزن المفاتيح هو المجلد `~/.erpc/keystore` (أو `keystore` تحت `ERPC_HOME` عند ضبطه). على Linux وmacOS تكون صلاحيات مجلداته `0700` وملفاته `0600`؛ أما على Windows فلا يضبط erpc أي صلاحيات من عنده.

- يحتوي `master.json` على مفتاح رئيسي عشوائي بطول 32 بايتًا، مختوم بمفتاح يشتقه PBKDF2-HMAC-SHA256 (600,000 تكرار) من عبارة المرور الخاصة بك. ويحتوي كل مُدخل على قيمة واحدة، مختومة بـ ChaCha20-Poly1305 بمفتاح خاص به.
- **عبارة المرور:** أول `key new` أو `secret put` يستخدم مخزن المفاتيح يطلب منك اختيارها، بكتابتها مرتين في الطرفية، بطول 12 حرفًا أو أكثر. ولا يأخذها erpc إلا من ذلك الموجّه المخفي، ولا يأخذها أبدًا من وسيط أو متغير بيئة أو أنبوب.
- **فتح القفل على Linux:** بعد أن تفتح عبارة المرور مخزن المفاتيح، يُحفظ فتح القفل في حلقة المفاتيح الدائمة في النواة، في الذاكرة، حتى يُعاد تشغيل الجهاز، أو تبقى حلقة المفاتيح دون استخدام طوال مدة انتهاء الخمول الخاصة بها (ثلاثة أيام، ما لم يحدد النظام غير ذلك)، أو حتى تشغيل `erpc worker secret lock`. ويطلب `erpc worker secret unlock` عبارة المرور مسبقًا ويذكر حتى متى يبقى فتح القفل. وفي صدفة بُدئت دون تسجيل دخول خاص بها (`su` بدون `-`، و`sudo -E`)، لا يُحفظ أي فتح للقفل ويسأل كل أمر.
- **عندما لا يوجد أحد أمام الطرفية،** يستخدم الأمر الذي يحتاج إلى مخزن المفاتيح فتح القفل إن وُجد، وإلا يفشل، مع ذكر `erpc worker secret unlock`. ومخزن المفاتيح الذي فُتح قفله يسلّم الأسرار، لا مفتاح التداول.
- **على macOS وWindows** (`--store keystore`)، لا يُحفظ أي فتح للقفل: كل أمر يحتاج إلى مخزن المفاتيح يطلب عبارة المرور مرة واحدة، ولذلك يحتاج إلى طرفية.

### ما يحميه مخزن المفاتيح، وما لا يحميه

- **انسخ مجلد `keystore` احتياطيًا وتذكّر عبارة المرور.** لا يستطيع erpc استعادة أي منهما، ودون وجودهما معًا يضيع ما يحتويه مخزن المفاتيح.
- من يملك ملفات مخزن المفاتيح وعبارة المرور يملك المفتاح. يجعل PBKDF2 كل تخمين بطيئًا، لكنه لا يجعل عبارة المرور القابلة للتخمين آمنة.
- ما دام قفل مخزن المفاتيح مفتوحًا، يستطيع أي برنامج يعمل باسمك قراءة المفتاح الرئيسي من حلقة المفاتيح في النواة (والبرنامج الذي لا تضم جلستُه حلقةَ مفاتيحك يستطيع أن يربطها بجلسته) وفتح كل مُدخل، بما في ذلك مُدخلات المفاتيح. وقواعد erpc الخاصة (ألا يقرأ المفتاح الذي يذكره `[wallet]` إلا لشخص أمام الطرفية، وألا يقرأه أبدًا لأداة ذكاء اصطناعي؛ وألا يفتح أبدًا مفتاحًا محفوظًا في مخزن المفاتيح بوصفه سرًّا) هي ما يفعله erpc؛ ولا تُلزم البرامج الأخرى التي تعمل باسمك. شغّل `erpc worker secret lock` عندما تنتهي.
- أسماء المُدخلات ليست مخفية، وحجم المُدخل يكشف طول القيمة.
- الملف الذي تغيّر لا يُفتح؛ أما النسخة الأقدم من المُدخل نفسه إذا أُعيدت إلى مكانه فتُفتح.
- يحذف `erpc worker secret rm` مُدخل السر في مخزن المفاتيح مع سطره في `erpc.toml` (ما لم يذكر إعداد آخر للتطبيق المُدخل نفسه)، ويترك القيمة الموجودة في 1Password أو سلسلة المفاتيح في مكانها. ولا يمسح القرص، وتبقى النسخ الموجودة في نسخك الاحتياطية.
- لا يحذف erpc مُدخل مفتاح التداول ولا يكتب فوقه أبدًا. لاستبدال مفتاح، انقل الأموال، ثم أزل ملفه و`[wallet]` بنفسك.
- لا يمكن تسمية إعداد `WALLET`، بأي حالة أحرف، في مخزن المفاتيح أو سلسلة المفاتيح؛ أما `--store 1password` فيقبل هذا الاسم.

## العمل مع مفتاح التداول

| الأمر | ما يفعله |
| --- | --- |
| `erpc worker key new` | ينشئ مفتاح التداول ويطبع المفتاح العام الذي ستموّله |
| `erpc worker key import <FILE>` | ينقل ملف مفتاح إلى 1Password أو سلسلة المفاتيح أو مخزن المفاتيح، ثم يعرض عليك مسح الملف |
| `erpc worker key show` | يعرض المفتاح العام للمفتاح ومكان حفظه |
| `erpc worker key balance` | يعرض رصيد المفتاح، عبر إعداد RPC الخاص بالتطبيق نفسه |
| `erpc worker key send --to <ADDRESS> --sol <N>` | يوقّع تحويلًا واحدًا في الذاكرة بعد موافقتك بنعم في الطرفية. ويرسل `--all` كل شيء باستثناء الرسوم |

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