العقد والمحافظ الباردة: كيفية الاحتفاظ بالمفاتيح الخاصة
الاحتفاظ بالمفاتيح الخاصة بعيدا عن الشبكة
يأتي توزيع شبكة MultiChain مزودا بملف إضافي قابل للتنفيذ يسمى multichaind-cold، والذي يمكن استخدامه كعقدة ومحفظة باردة لتخزين المفاتيح الخاصة بعيدا عن الشبكة وتوقيع المعاملات دون الاتصال بالإنترنت.
ويتشابه عمل multichaind-cold مع أمر multichaind العادي المتزامن مع معلمة offline وقت التشغيل، مع وجود اختلافين رئيسيين:
• تمت إزالة القدرة على الاتصال بالأقران في وقت التجميع multichaind-cold، لذلك لا يوجد خطر من تشغيلها عن طريق الخطأ باستخدام الخيارات الخاطئة وتصبح محفظة متصلة بالشبكة “ساخنة”.
• الدليل الافتراضي هو .multichain-coldبدلاً من .multichain(في نظام التشغيل Windows، MultiChainColdبدلاً من MultiChain)، لمنع المشاركة غير المقصودة للمحافظ بين العقد الباردة والساخنة.
إعداد العقدة الباردة
تحصل عقد MultiChain العادية على معلمات البلوكتشين تلقائيا من عقدة أخرى عند الاتصال بالشبكة لأول مرة. وهذا غير ممكن في العقدة الباردة، لذا بدلا من ذلك يجب إجراء العملية يدويا كما يلي:
1. على خادم العقدة الباردة، قم بإنشاء الدليل ~/.multichain-cold (في نظام التشغيل ويندوز %APPDATA%\MultiChainCold). لاحظ أنه يمكنك استخدام دليل آخر إذا كنت تفضل ذلك، وتمريره كمعلمة -datadir في كل مرة تقوم فيها بتشغيل multichaind-cold أو multichain-cli.
2. قم بإنشاء دليل فرعي داخل الدليل الذي تم إنشاؤه مسبقا، باسم بلوكتشين (على سبيل المثال chain1).
3. انسخ الملف params.dat من دليل بلوكتشين على العقدة الساخنة إلى دليل بلوكتشين على خادم العقدة الباردة.
استخدام العقدة الباردة
يعمل الملف القابل للتنفيذ multichaind-cold كبرنامج خفي بنفس الطريقة تماما مثل multichaind، ولكنه يقبل فقط طلبات JSON-RPC API الواردة ولا يقبل اتصالات نP2P الواردة (أو إنشاء صادرة). للتشغيل multichaind-cold على نظام لينوكس:
/path/to/multichaind-cold [chain-name] -daemon
يعمل الوصول إلى واجهة برمجة التطبيقات (API) بنفس الطريقة التي يتم بها استخدام multichaind multichain-cli أو كائن JSON-RPC آخر. حيث يتم تخزين بيانات اعتماد واجهة برمجة التطبيقات (API) في دليل بلوكتشين multichain.conf للعقدة الباردة، مع إنشاء قيم عشوائية تلقائيا عند تشغيل multichaind-cold لأول مرة.
لاستخدام بيانات الاعتماد من دليل بلوكتشين للعقدة الباردة الافتراضية (على سبيل المثال ~/.multichain-cold/[chain-name]بدلا من ~/.multichain/[chain-name]Linux)، قم بتشغيل هذا الخيار multichain-cli -cold.
لاحظ أن غالبية أوامر API معطلة، ولم يتبق سوى الحد الأدنى من المجموعة المطلوبة لإدارة المحفظة الباردة والعقدة. استخدم أمر المساعدة help لرؤية قائمة الأوامر المتوفرة وأمر stop لإيقاف البرنامج الخفي.
يقوم الإصدار الحالي multichaind-cold بإنشاء العديد من الملفات والأدلة الأخرى في دليل بلوكتشين، ولكن معظمها لن يتم تحديثه أبدا بعد الإعداد الأولي ويمكن تجاهلها. وكما هو الحال مع multichaind، يتم الاحتفاظ بالمفاتيح الخاصة نفسها في الملف wallet.dat.
إنشاء عنوان بارد ومفتاح خاص
هناك ثلاثة خيارات لإنشاء عنوان ومفتاح خاص مطابق على عقدة باردة:
• الخيار الأبسط هو تخزين المفتاح الخاص داخل محفظة multichaind-cold. في البداية، ستحتوي المحفظة الباردة على عنوان واحد يتم إنشاؤه تلقائيًا ومفتاح خاص. استخدم الأمر getnewaddress لإنشاء أي عناوين إضافية ومفاتيح خاصة كما هو مطلوب. يمكن استرداد المفتاح الخاص لأي عنوان في المحفظة باستخدام dumpprivkey. كما يمكن الحصول على قائمة العناوين الموجودة في المحفظة باستخدام getaddresses أو listaddresses.
• يمكن استخدام الأمر createkeypairs على العقدة الباردة لإنشاء مفاتيح وعناوين خاصة دون تخزينها في محفظتها. في هذه الحالة، يجب تخزين المفاتيح والعناوين الخاصة في بعض قواعد البيانات أو أي نظام آخر خارج MultiChain.
• يمكن أيضا إنشاء المفاتيح الخاصة باستخدام مولد أرقام عشوائي خارجي أو مكتبة متخصصة. يمكن تخزين هذه المفاتيح الخاصة اختياريا في محفظة العقدة الباردة باستخدام الأمر importprivkey أو الاحتفاظ بها في نظام خارجي. في كلتا الحالتين، يجب تنسيق المفتاح الخاص والعنوان المقابل له للاستخدام مع MultiChain API.
بمجرد إنشاء المفتاح الخاص، يمكن مشاركة عنوانه المقابل بأمان مع عقدة فعالة للمساعدة في إعداد المعاملات للتوقيع.
بناء وتوقيع المعاملات
فيما يلي تعليمات خطوة بخطوة لإنشاء معاملة وتوقيعها لعنوان يتم تخزين مفتاحه الخاص على خادم بارد:
1. إذا لم يتم بعد استيراد العنوان المطابق للمفتاح الخاص إلى العقدة الساخنة، فيجب أن يتم ذلك الآن باستخدام الأمر importaddress. بالطبع، لا ينبغي أبدا مشاركة المفتاح الخاص نفسه مع عقدة فعالة.
2. استخدم الأمر createrawsendfrom على العقدة الساخنة لإعداد معاملة للتوقيع عوضا عن العنوان. راجع إدارة المفاتيح الخارجية للحصول على بعض الأمثلة على معاملات الأصول والتدفق البسيطة، أو صفحة المعاملات الأولية للحصول على حالات أكثر تعقيدا ونادرة.
3. استخدم الأمر decoderawtransaction على العقدة الساخنة للحصول على قائمة المخرجات التي تم إنفاقها في المعاملة الأولية غير الموقعة (عادة واحدة فقط). لكل عنصر في مصفوفة الاستجابة vin، وانتبه للقيم txid و vout.
4. بالنسبة لكل أزواج txid,vout تم استردادها في الخطوة السابقة، استخدمه gettxout على العقدة الساخنة للحصول على البرنامج النصي الست عشري للإخراج المقابل. يتم تقديم ذلك في العنصر الفرعي hex لعنصر الاستجابة scriptPubKey.
5. انقل المعاملة الأولية غير الموقعة وقائمة القيم txid,vout,scriptPubKey التي تم الحصول عليها من العقدة الساخنة إلى خادم العقدة الباردة بطريقة مناسبة، لتناسب متطلبات الأمان الخاصة بك. على سبيل المثال، يمكن تخزينها في ملف نصي على مفتاح USB منسق بشكل نظيف.
6. على العقدة الباردة، استخدم الأمر signrawtransaction لتوقيع المعاملة، مع المعلمات التالية بالترتيب: (أ) المعاملة الأولية غير الموقعة (نص سداسي عشري)، (ب) مصفوفة من الكائنات التي تمثل المخرجات المستهلكة، حيث يحتوي كل كائن على الحقول ( txid نص سداسي عشري) )، vout(عدد صحيح)، scriptPubKey(نص سداسي عشري)، (ج) في حالة استخدام MultiChain 1.0.1، مصفوفة ذات عنصر واحد تحتوي على المفتاح الخاص المطلوب للتوقيع (استخدم dumpprivkey). من MultiChain 1.0.2، لا يلزم تمرير هذا المفتاح الخاص كمعلمة إذا تم الاحتفاظ به في محفظة العقدة الباردة.
فيما يلي مثال لاستخدام الأمر multichain-cli على نظام لينوكس Linux:
./multichain-cli -cold chain1 signrawtransaction 010000000137d6e74ad5213ef84684c8719cd47273ad64ab5c1c7aff9876c84714901c8d990000000000ffffffff0200000000000000003776a9146bc5ac43c6cfd5c7237528e63d1bd16587f5b9d788ac1c73706b71ad64ab5c1c7aff9876c84714901c8d9910270000000000007500000000000000003776a9143bd846ebff3876b49cbd0e9736352ecbc581affe88ac1c73706b71ad64ab5c1c7aff9876c84714901c8d99905f0100000000007500000000 ‘[{“txid”:”998d1c901447c87698ff7a1c5cab64ad7372d49c71c88446f83e21d54ae7d637″,”vout”:0,”scriptPubKey”:”76a9143bd846ebff3876b49cbd0e9736352ecbc581affe88ac0c73706b67a08601000000000075″}]’ ‘[“V9hpPzPBZXPFYYEG17xsUFunZpyXuvVZTn5qC4Eh5JmfwukeqyrpJe3K”]’
7. يجب أن يحتوي الرد على المعاملة الموقعة بالكامل في الحقل hex. في الإصدارات السابقة لـ MultiChain 1.0.2، تجاهل الأمر complete.
8. انقل المعاملة الموقعة بالكامل من الخادم البارد مرة أخرى إلى العقدة الساخنة وأرسلها باستخدام sendrawtransaction.