الخميس، 3 مايو 2018

ملف bitcoin-qt conf


<h1> ملف conf بتنسيق Bitcoin-qt </ h1>


الحصول على عبر متجر التطبيقات قراءة هذه المشاركة في التطبيق لدينا!


موقع bitcoin-qt bitcoin. conf؟ [مكرر]


هذا السؤال لديه بالفعل إجابة هنا:


لقد قمت بتثبيت Bitcoin-qt وتشغيله على محرك أقراص ثابت خارجي. أين يجب علي وضع ملف bitcoin. conf حتى أتمكن من تهيئته مع إعداد الخادم والمستخدم وكلمة المرور؟


تم وضع علامة كـ مكررة بواسطة Murch ♦ 26 مايو 2017 في الساعة 16:08.


تم وضع علامة على هذا السؤال على أنه نسخة طبق الأصل من سؤال موجود.


يعتمد ذلك على نظام التشغيل الذي لديك. Windows ، Linux ، Mac OS؟


ومع ذلك ، فإن أحد الحلول الممكنة الكثيرة هي بطريقة مستقلة عن نظام التشغيل: نقل كل شيء إلى دليل واحد على القرص الخارجي بما في ذلك ملف wallet. dat ، وملف. conf ، و الملف القابل للتنفيذ ، وبيانات blockchain. ثم تأكد من بدء تشغيل عميل Bitcoin-Qt من وحدة التحكم دائمًا وقم بتضمين المعلمات - datadir و - conf في سطر الأوامر الخاص بك. في ما يلي مثال لنظام Linux:


(أضفت المعلمة الاختيارية - printtoconsole. هذا يمنع تضخيم ملف debug. log في مكان ما على قرص نظام التشغيل الخاص بك طوال الوقت.)


في MS-Windows سيبدو الأمر مشابهاً للغاية ، على ما أعتقد (لا أستطيع الوصول إلى جهاز كمبيوتر يعمل بنظام Windows في الوقت الحالي).


<h1> ملف conf بتنسيق Bitcoin-qt </ h1>


الحصول على عبر متجر التطبيقات قراءة هذه المشاركة في التطبيق لدينا!


أين يتم الاحتفاظ ملف التكوين من بيتكوين-كيو تي؟


وأظل الحصول على هذا الخطأ:


أين يمكنني العثور على ملف bitcoin. conf؟


يعتمد موقع bitcoin. conf على نظام التشغيل الخاص بك:


Windows XP C: \ Documents and Settings \ & lt؛ username & gt؛ \ Application Data \ Bitcoin \ bitcoin. conf.


Windows Vista ، 7 ، 10 C: \ Users \ & lt؛ username & gt؛ \ AppData \ Roaming \ Bitcoin.


datadir = لا يعمل في ملف conf (Qt GUI) # 3905.


علق darkhais في 19 آذار 2014.


يمكن أن يكون ويندوز فقط. اضطر إلى إضافة - datadir = a: \ bitcoin إلى اختصار bitcoin-qt.


تم تحديده على النحو التالي:


في ملف bitcoin. conf.


علق laanwj 19 مارس 2014.


نعم ، لم يعد هذا ممكنًا مع واجهة المستخدم الرسومية في 0.9.0.


جرب خيار سطر الأوامر - choosedatadir لتعيين دليل البيانات الافتراضي دون الحاجة إلى تغيير الاختصار. سيتم تخزينها في التسجيل.


علق pmc01 في 19 مارس 2014.


يتجاهل Windows Bitcoin-QT bitcoin. conf بالكامل ، وهو أمر غريب. هل هذا مقصود؟


علق laanwj 19 مارس 2014.


هذا ليس عن قصد. أيضا لا تتطابق مع السلوك الذي رأيته.


ما هو الإعداد الذي تقدمه في bitcoin. conf الذي يبدو أنه يتم تجاهله؟


هل قمت بتغيير دليل البيانات؟ هل تقدم أي حجج سطر الأوامر؟ إذا كان الأمر كذلك ، فما هي؟


علق pmc01 في 19 مارس 2014.


خطأي ، كان لدي bitcoin. conf في موقع٪ appdata٪ \ bitcoin القديم بدلاً من datadir الجديد.


وعلق darkhais في 24 مارس 2014.


نعم ، كنت على وشك إضافة هذا التعليق. يتجاهل ملف. conf الخاص بي بالكامل. لا أقوم بتشغيل عميل بيتكوين هنا في كثير من الأحيان (محرك أقراص فلاش ، أو إعادة: datadir ، إلخ) ولكنني لاحظت أيضًا أنه لم يستخدم حتى إعداد par ، أو maxconnections ، أو addnodes ، إلخ.


إد: هم ، نانومتر. لا يوجد دليل لماذا لا يعمل. فشل في reindex في ملف. conf أيضا.


علق laanwj 25 مارس 2014.


يتوقع ملف. conf في دليل البيانات الخاص بك. هذا لم يتغير. إذا قمت بتغيير دليل البيانات الخاص بك فإنه يتوقع ملف. conf هناك ، أيضا.


غير laanwj العنوان من datadir = لا يعمل في ملف conf إلى datadir = لا يعمل في ملف conf (Qt GUI) 25 مارس 2014.


qt: Do proper boost :: path conversion # 3935.


علق laanwj 25 مارس 2014.


انظر # 3935 (الرجاء المساعدة في الاختبار)


علق pmc01 في 25 مارس 2014.


لقد اختبرت # 3935 واستعادة القدرة على تغيير datadir bitcoin-qt في ملف. conf ، ويسمح لملف. conf أن يكون في دليل منفصل عن datadir.


أضافت شركة MathyV التزامًا إلى مشروع reddcoin / reddcoin الذي أشار إلى هذه المشكلة في 27 أكتوبر 2014.


تصدر مشكلة أذونات ملف Datadir خطأ مربكًا على Windows # 11668.


لا يمكنك تنفيذ هذا الإجراء في هذا الوقت.


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


دليل البيانات.


دليل البيانات هو المكان الذي يتم فيه تخزين ملفات بيانات Bitcoin ، بما في ذلك ملف بيانات المحفظة.


الموقع الافتراضي.


انتقل إلى "ابدأ" - & gt؛ تشغيل (أو اضغط على WinKey + R) وتشغيل هذا:


سيتم فتح مجلد البيانات في Bitcoin. بالنسبة إلى معظم المستخدمين ، هذه هي المواقع التالية:


يتم إخفاء "التطبيق" و "بيانات التطبيق" بشكل افتراضي.


يمكنك أيضًا تخزين ملفات بيانات Bitcoin في أي محرك أقراص أو مجلد آخر.


إذا قمت بالفعل بتنزيل البيانات ، فسيكون عليك نقل البيانات إلى المجلد الجديد. إذا كنت ترغب في تخزينها في D: \ BitcoinData ثم انقر فوق "خصائص" من اختصار إلى bitcoin-qt. exe وإضافة - datadir = D: \ BitcoinData في النهاية كمثال:


بدء Bitcoin ، الآن سترى يتم إنشاء كافة الملفات في دليل البيانات الجديد.


افتراضيا ، سوف تضع بيتكوين بياناتها هنا:


تحتاج إلى إجراء "ls - a" لمشاهدة الدلائل التي تبدأ بنقطة.


إذا لم يكن الأمر كذلك ، فيمكنك إجراء بحث مثل هذا:


افتراضيا ، سوف تضع بيتكوين بياناتها هنا:


الملفات.


نظرة عامة على هذه في files. md في وثائق Bitcoin الأساسية.


.قفل Bitcoin ملف دليل بيانات الدليل bitcoin. conf [اختياري] يحتوي على خيارات التكوين. blk xxxx. dat [الإصدارات السابقة لـ v0.8.0] يحتوي على كتل خام متسلسلة. مخزنة كتل Bitcoin الفعلية ، في تنسيق الشبكة ، ملقاة على القرص الخام. blkindex. dat [الإصدارات السابقة لـ v0.8.0] معلومات الفهرسة المستخدمة مع blk xxxx. dat __db. xxx المستخدمة من قبل BDB db. log debug. log ملف السجل المطول Bitcoin. قلص تلقائيا من وقت لآخر. wallet. dat تخزين للمفاتيح والمعاملات والبيانات الوصفية والخيارات. يرجى التأكد من عمل نسخ احتياطية من هذا الملف. أنه يحتوي على المفاتيح اللازمة لإنفاق bitcoins الخاص بك. addr. dat [الإصدارات السابقة لـ v0.7.0] التخزين لعناوين IP لجعل إعادة الاتصال أسهل للنظراء [الإصدارات v0.7.0 والإصدارات الأحدث] تخزين معلومات النظير لتسهيل إعادة الاتصال. يستخدم هذا الملف تنسيق ملف خاص ب bitcoin ، غير متعلق بأي نظام قاعدة بيانات [1]. fee_estimates. dat [الإصدارات v0.10.0 والإصدارات الأحدث] الإحصائيات المستخدمة لتقدير الرسوم والأولويات. المحفوظة فقط قبل إيقاف تشغيل البرنامج ، وقراءة عند بدء التشغيل.


يتم استخدام ملفات البيانات والفهرسة والسجل بواسطة Oracle Berkeley DB ، مخزن البيانات / القيمة المضمنة الذي يستخدمه Bitcoin.


دليل فرعي لقاعدة البيانات.


يحتوي على ملفات يومية BDB.


الفرعي testnet3.


يحتوي على إصدارات testnet من هذه الملفات (إذا كان يعمل مع - testnet)


[v0.8 وما فوق] يحتوي على بيانات blockchain.


blk *.dat المخزنة هي كتل Bitcoin الفعلية ، في تنسيق الشبكة ، ملقاة على القرص الخام. وهي مطلوبة فقط لإعادة فحص المعاملات المفقودة في محفظة ، وإعادة تنظيمها إلى جزء مختلف من السلسلة ، وتقديم بيانات الحظر إلى عقد أخرى تتم مزامنتها. دليل فرعي كتل / فهرسة [v0.8 وما فوق] قاعدة بيانات LevelDB التي تحتوي على بيانات التعريف عن جميع الكتل المعروفة ، ومكان العثور عليها على القرص. بدون هذا ، سيكون العثور على كتلة بطيئة جدًا.


دليل فرعي.


[v0.8 وما فوق] قاعدة بيانات LevelDB مع تمثيل مدمج لكافة نواتج العمليات غير المنفقة حاليًا وبعض البيانات الوصفية حول المعاملات التي يتم الدخول إليها. البيانات هنا ضرورية للتحقق من صحة الكتل الجديدة والمعاملات. يمكن من الناحية النظرية إعادة بنائها من البيانات كتلة (انظر خيار سطر الأوامر - reindex) ، ولكن هذا يستغرق وقتا طويلا إلى حد ما. وبدون ذلك ، لا يزال بإمكانك نظريًا التحقق من الصحة بالفعل ، ولكنه يعني إجراء مسح كامل عبر الكتل (150 غيغابايت اعتبارًا من نوفمبر 2017) مقابل كل ناتج يتم إنفاقه.


[الإصدار 0.8 والإصدارات الأحدث] يحتوي على بيانات "التراجع".


يمكنك رؤية الكتل على أنها "تصحيحات" لحالة السلسلة (تستهلك بعض المخرجات غير المنفقة ، وتنتج مخرجات جديدة) ، وترى بيانات التراجع كرموز عكسية. وهي ضرورية لإعادة التدوير ، وهو أمر ضروري في حالة إعادة التنظيم.


بيانات التعريف الشخصية [v0.8 وما فوق]


قد يكون هذا القسم مفيدًا لك إذا كنت ترغب في إرسال صديق إلى blockchain ، مع تجنب تحميله كميات كبيرة.


wallet. dat يحتوي على عناوين ومعاملات مرتبطة بها. يرجى التأكد من عمل نسخ احتياطية من هذا الملف. أنه يحتوي على المفاتيح اللازمة لإنفاق bitcoins الخاص بك. يجب عدم نقل هذا الملف إلى أي طرف ثالث أو قد يتمكن من الوصول إلى bitcoins الخاص بك. db. log قد يحتوي على معلومات تتعلق بمحفرك. قد يتم حذفه بأمان. debug. log قد تحتوي على عناوين IP ومعاملة المعاملة. قد يتم حذفه بأمان. قاعدة البيانات / المجلد يجب أن يكون هذا موجودًا فقط عند تشغيل bitcoin-qt حاليًا. أنه يحتوي على معلومات (ولاية BDB) المتعلقة محفظتك. peers. dat غير معروف ما إذا كان هذا يحتوي على بيانات تعريف شخصية. قد يتم حذفه بأمان.


قد يتم نقل / حفظ الملفات والمجلدات الأخرى (الكتل والكتل / الفهرس والتأليف) بأمان لأنها تحتوي على معلومات تتعلق فقط بكتلة الجمهور العامة.


ملفات قاعدة البيانات في الدلائل "كتل" و "chainstate" هي عبر النظام الأساسي ثم يمكن نسخها بين عمليات التثبيت المختلفة. تمثل هذه الملفات ، والمعروفة بشكل جماعي باسم "قاعدة بيانات كتلة" العقدة ، جميع المعلومات التي تم تنزيلها بواسطة عقدة أثناء عملية المزامنة. بمعنى آخر ، إذا قمت بنسخ قاعدة بيانات كتلة التثبيت A إلى التثبيت B ، فسيكون التثبيت B عندئذٍ نفس نسبة المزامنة للتثبيت A. وعادةً ما يكون هذا أسرع بكثير من إجراء المزامنة الأولية العادية مرة أخرى. ومع ذلك ، عند نسخ قاعدة بيانات شخص ما بهذه الطريقة ، فأنت تثق بهم بشكل مطلق. يعالج Bitcoin Core ملفات قاعدة البيانات الخاصة به كدقة 100٪ وجدير بالثقة ، في حين أنه خلال المزامنة الأولية العادية ، فإنه يعامل كل كتلة يقدمها النظير على أنها غير صالحة حتى يثبت العكس. إذا كان المهاجم قادرًا على تعديل ملفات قاعدة البيانات الخاصة بك ، فبإمكانه القيام بكافة أنواع الأشياء الشريرة التي قد تتسبب في فقدان بيتكوين. لذلك ، يجب فقط نسخ قواعد بيانات الحظر من تثبيتات Bitcoin تحت التحكم الشخصي ، وفقط عبر اتصال آمن.


كل عقدة لديها قاعدة بيانات كتلة فريدة ، وجميع الملفات متصلة بشكل كبير....لذلك إذا قمت بنسخ بعض الملفات فقط من مجلدات "كتل" التثبيت أو "chainstate" إلى تثبيت آخر ، فإن هذا سيؤدي بالتأكيد إلى تعطل العقدة الثانية في بعض النقاط العشوائية في المستقبل. إذا كنت ترغب في نسخ قاعدة بيانات كتلة من تثبيت واحد إلى آخر ، يجب عليك حذف قاعدة البيانات القديمة ونسخ كافة الملفات دفعة واحدة. يجب إغلاق كلا العقدتين أثناء النسخ.


يتم كتابة الملف الذي يحتوي على أكبر رقم في دليل "الكتل" فقط. الملفات السابقة لن تتغير أبدا. أيضاً ، عند الوصول إلى ملفات blk *.dat هذه ، يتم الوصول إليها عادة بطريقة متسلسلة للغاية. لذلك ، من الممكن ربط دليل "الكتل" أو بعض الأجزاء الفرعية من ملفات blk *.dat بشكل فردي على محرك تخزين مغناطيسي بدون خسارة كبيرة في الأداء (راجع تقسيم دليل البيانات) ، وإذا بدأت التثبيتات باستخدام قواعد بيانات كتلة متطابقة (بسبب النسخ الموضح سابقًا) ، فإن عمليات التنفيذ اللاحقة لـ rsync ستكون فعالة للغاية.


تشغيل بيتكوين.


هناك نوعان مختلفان من برنامج بيتكوين الأصلي المتاح ؛ واحد مع واجهة مستخدم رسومية (يشار إليها عادة باسم "Bitcoin" فقط) ، ونسخة "بدون رأس" (تسمى بتكو). وهي متوافقة تمامًا مع بعضها البعض ، وتتخذ نفس وسائط سطر الأوامر ، وتقرأ نفس ملف التهيئة ، وتقرأ ملفات البيانات نفسها وتكتبها. يمكنك تشغيل نسخة واحدة من Bitcoin أو bitcoind على النظام الخاص بك في كل مرة (إذا حاولت تشغيل آخر بشكل غير مقصود ، فستعلمك النسخة أن Bitcoin أو bitcoind قيد التشغيل بالفعل وسيخرج).


لينكس Quickstart.


إن أبسط طريقة للبدء من الصفر مع عميل سطر الأوامر ، ومزامنة blockchain تلقائيًا وإنشاء محفظة ، هو فقط تشغيل هذا الأمر (بدون وسائط) من الدليل الذي يحتوي على ملفك الثنائي bitcoind:


للتشغيل مع واجهة المستخدم الرسومية القياسية:


وسائط سطر الأوامر.


هذه الأوامر دقيقة من إصدار Bitcoin Core v0.14.0.


خيارات إعلام ZeroMQ:


خيارات اختيار سلسلة:


خيارات ترحيل العقد:


حظر خيارات الإنشاء:


خيارات خادم RPC:


يمكن أيضًا تعيين العديد من الخيارات المنطقية على إيقاف عن طريق تحديدها ببادئة "لا": على سبيل المثال ، - nodnseed.


ملف تكوين Bitcoin. conf.


يمكن تحديد جميع خيارات سطر الأوامر (باستثناء - conf) في ملف التكوين ، كما يمكن أيضًا تحديد جميع خيارات ملفات التهيئة في سطر الأوامر. تتجاوز خيارات سطر الأوامر القيم المحددة في ملف التهيئة.


ملف التهيئة هو قائمة من أزواج الإعداد = value ، واحدة لكل سطر ، مع التعليقات الاختيارية التي تبدأ بالحرف '#'.


لا يتم إنشاء ملف التكوين تلقائيًا ؛ يمكنك إنشاؤه باستخدام محرر النص العادي المفضل لديك. يتوفر مولد ملف التكوين سهل الاستخدام هنا. بشكل افتراضي ، سيبحث Bitcoin (أو bitcoind) عن ملف اسمه 'bitcoin. conf' في دليل بيانات bitcoin ، ولكن قد يتم تغيير كل من دليل البيانات ومسار ملف التهيئة باستخدام وسيط سطر الأوامر - datadir و - conf.


ملاحظة: في حالة تشغيل Bitcoin في وضع testnet ، سيتم إلحاق المجلد الفرعي "testnet" بدليل البيانات تلقائيًا.


المنصات.


ابدأ تلقائيا.


لتكوين عميل Bitcoin ليبدأ تلقائيًا:


يمكنك استخدام ملف التكوين ، أو إعدادات واجهة المستخدم الرسومية:


أمثلة المطور بيتكوين.


اعثر على أمثلة حول كيفية إنشاء برامج باستخدام Bitcoin.


يهدف الدليل التالي إلى تقديم أمثلة لمساعدتك على البدء في إنشاء تطبيقات تعتمد على Bitcoin. لتحقيق الاستفادة المثلى من هذا المستند ، قد تحتاج إلى تثبيت الإصدار الحالي من Bitcoin Core ، إما من المصدر أو من ملف قابل للتنفيذ تم ترجمته مسبقًا.


بعد التثبيت ، ستتمكن من الوصول إلى ثلاثة برامج: bitcoind و bitcoin-qt و bitcoin-cli.


يوفر bitcoin-qt مزيجًا كاملًا من نظراء Bitcoin وأزواج المحفظة. من القائمة تعليمات ، يمكنك الوصول إلى وحدة تحكم حيث يمكنك إدخال أوامر RPC المستخدمة في هذا المستند.


bitcoind هو أكثر فائدة للبرمجة: فهو يوفر النظير الكامل الذي يمكنك التفاعل معه عبر RPCs إلى المنفذ 8332 (أو 18332 لـ testnet).


تسمح لك bitcoin-cli بإرسال أوامر RPC إلى bitcoind من سطر الأوامر. على سبيل المثال ، مساعدة bitcoin-cli.


تحصل جميع البرامج الثلاثة على إعدادات من bitcoin. conf في دليل تطبيق Bitcoin:


OSX: $ HOME / Library / Application Support / Bitcoin /


لاستخدام bitcoind و bitcoin-cli ، ستحتاج إلى إضافة كلمة مرور RPC إلى ملف bitcoin. conf الخاص بك. سيقرأ كلا البرنامجين من نفس الملف إذا كان كلاهما يعملان على نفس النظام مثل نفس المستخدم ، لذا ستعمل أي كلمة مرور عشوائية طويلة:


يجب أيضًا جعل الملف bitcoin. conf قابلاً للقراءة فقط لمالكه. في Linux و Mac OSX والأنظمة الأخرى المشابهة لـ Unix ، يمكن تحقيق ذلك عن طريق تشغيل الأمر التالي في دليل تطبيق Bitcoin:


لأغراض التطوير ، يكون استخدام شبكة اختبار Bitcoin (testnet) أكثر أمانًا وأرخص تكلفةً أو وضع اختبار الانحدار (regtest) الموضح أدناه.


من الأفضل إرسال الأسئلة حول استخدام Bitcoin إلى منتدى BitcoinTalk وقنوات IRC....يمكن تقديم الأخطاء أو الاقتراحات المتعلقة بالوثائق على Bitcoin. org كمشكلة أو نشرها في القائمة البريدية للوثائق التوثيقية.


في الوثائق التالية ، تم تقصير أو التفاف بعض السلاسل: "[…]" تشير إلى أنه تمت إزالة بيانات إضافية ، بينما تستمر الخطوط المنتهية بخط مائل واحد "\" في الأسفل. إذا مررت مؤشر الماوس فوق فقرة ، فسيتم عرض روابط الإسناد الترافقي باللون الأزرق. إذا مررت فوق رابط المرجع التبادلي ، فسيتم عرض تعريف مختصر للمصطلح في تلميح الأدوات.


اختبار التطبيقات.


يوفر Bitcoin Core أدوات اختبار مصممة للسماح للمطورين اختبار تطبيقاتهم مع تقليل المخاطر والقيود.


عند التشغيل بدون أي وسائط ، فإن جميع برامج Bitcoin Core افتراضية للشبكة الرئيسية الخاصة بشركة Bitcoin (mainnet). ومع ذلك ، من أجل التنمية ، فإنه من الأسهل والأرخص استخدام شبكة اختبار Bitcoin (testnet) حيث لا ينفق satosis أي قيمة في العالم الحقيقي. كما تخفف Testnet بعض القيود (مثل فحوصات المعاملات القياسية) حتى تتمكن من اختبار الوظائف التي قد يتم تعطيلها بشكل افتراضي في mainnet.


لاستخدام testnet ، استخدم الوسيطة - testnet مع bitcoin-cli أو bitcoind أو bitcoin-qt أو إضافة testnet = 1 إلى ملف bitcoin. conf كما هو موضح سابقًا. للحصول على satosis مجانية للاختبار ، استخدم صنبور testnet Piotr Piasecki. Testnet هو مورد عام يقدمه أعضاء المجتمع مجانًا ، لذا يُرجى عدم إساءة استخدامه.


في الحالات التي يكون فيها التفاعل مع الأقران العشوائية والكتل العشوائية غير ضروري أو غير مرغوب فيه ، يتيح لك وضع اختبار الانحدار الخاص بـ Bitcoin Core (وضع regtest) إنشاء سلسلة كتلة خاصة جديدة تمامًا بنفس القواعد الأساسية مثل testnet - ولكن هناك اختلاف رئيسي واحد: يمكنك اختيار وقت لإنشاء كتل جديدة ، بحيث يكون لديك السيطرة الكاملة على البيئة.


يعتبر العديد من المطورين وضع regtest الطريقة المفضلة لتطوير تطبيقات جديدة. سيتيح لك المثال التالي إنشاء بيئة regtest بعد أن تقوم أولاً بتكوين bitcoind.


بدء bitcoind في وضع regtest لإنشاء سلسلة كتلة خاصة.


توليد 101 كتل باستخدام RPC الخاصة التي تتوفر فقط في وضع regtest. هذا يأخذ أقل من ثانية على جهاز كمبيوتر عام. ونظرًا لأن هذه السلسلة هي سلسلة فدرة جديدة تستخدم قواعد Bitcoin الافتراضية ، فإن الكتل الأولى تدفع مكافأة كتلة بقيمة 50 بت كوين. بخلاف mainnet ، في وضع regtest فقط يدفع 150 كتل الأول مكافأة 50 بتكوين. ومع ذلك ، يجب أن تحتوي الكتلة على 100 تأكيد قبل أن يتم إنفاق هذه المكافأة ، لذلك فإننا ننتج 101 قالبًا للوصول إلى المعاملة التي تتم عن طريق العملة من الكتلة رقم 1.


تحقق من أن لدينا الآن 50 بت كوين متاحة للإنفاق.


يمكنك الآن استخدام Bitcoin Core RPCs مسبوقة بـ bitcoin-cli - regtest.


يتم حفظ محافظ Regtest وحالة سلسلة كتلة (chainstate) في الدليل الفرعي regtest لدليل تكوين Bitcoin الأساسية. يمكنك حذف الدليل الفرعي regtest بأمان وإعادة تشغيل Bitcoin Core لبدء regtest جديد. (راجع أمثلة المطور مقدمة لمواقع دليل التكوين الافتراضي على أنظمة تشغيل مختلفة. قم دائمًا بعمل نسخة احتياطية من محافظ mainnet قبل إجراء العمليات الخطيرة مثل الحذف.)


دروس المعاملات.


إنشاء المعاملات هو شيء تقوم به معظم تطبيقات Bitcoin. يصف هذا القسم كيفية استخدام واجهة RPC الخاصة بـ Bitcoin Core لإنشاء معاملات ذات سمات متنوعة.


قد تستخدم تطبيقاتك شيئًا إلى جانب Bitcoin Core لإنشاء معاملات ، ولكن في أي نظام ، ستحتاج إلى توفير نفس أنواع البيانات لإنشاء معاملات بنفس السمات كما هو موضح أدناه.


من أجل استخدام هذا البرنامج التعليمي ، سوف تحتاج إلى إعداد Bitcoin Core وإنشاء بيئة وضع اختبار الانحدار مع 50 BTC في محفظة الاختبار.


يوفر Bitcoin Core العديد من RPCs التي تتعامل مع كافة تفاصيل الإنفاق ، بما في ذلك إنشاء مخرجات التغيير ودفع الرسوم المناسبة. حتى المستخدمين المتقدمين يجب عليهم استخدام هذه RPCs كلما أمكن لتقليل فرصة فقدان satosis عن طريق الخطأ.


الحصول على عنوان Bitcoin جديد وحفظه في متغير shell $ NEW_ADDRESS.


يقوم الـ sendtoaddress RPC تلقائيًا باختيار إخراج المعاملة غير المنفقة (UTXO) الذي يتم من خلاله قضاء satoshis. في هذه الحالة ، سحبت satoshis من UTXO المتوفر الوحيد ، عملية coinbase للكتلة رقم 1 التي نضجت مع إنشاء كتلة # 101. لإنفاق UTXO معين ، يمكنك استخدام sendfrom RPC بدلاً من ذلك.


استخدم RPC غير المرخص لعرض UTXOs التي تنتمي إلى هذه المحفظة. القائمة فارغة لأنها افتراضية لعرض فقط UTXOs المؤكدة وأنفقنا فقط UTXO الوحيد المؤكد.


إن إعادة تشغيل الـ RPC غير المرغوب فيه مع الوسيطة "0" لعرض المعاملات غير المؤكدة يظهر أيضًا أن لدينا UTXOs ، كلاهما بنفس الـ txid. أول UTXO المعروض هو تغيير في الإخراج الذي تم إنشاؤه sendtoaddress باستخدام عنوان جديد من تجمع المفاتيح. UTXO الثاني هو عرض الإنفاق على العنوان الذي قدمناه. إذا كنا قد قضينا تلك satoshis لشخص آخر ، لن يتم عرض تلك المعاملة الثانية في قائمة UTXOs لدينا....إنشاء كتلة جديدة لتأكيد المعاملة أعلاه (يستغرق أقل من ثانية) وامسح متغير shell.


صفقة الخام بسيطة.


تسمح RPCs للمعاملات الأولية للمستخدمين بإنشاء معاملات مخصصة وتأخير بث هذه المعاملات. ومع ذلك ، قد لا تكتشف Bitcoin Core الأخطاء التي تم ارتكابها في المعاملات الأولية ، وقد فقد عدد كبير من مستخدمي المعاملات الخام بشكل دائم عددًا كبيرًا من satosis ، لذا يرجى توخي الحذر عند استخدام المعاملات الأولية على mainnet.


يغطي هذا القسم الفرعي واحدًا من أبسط المعاملات الأولية الممكنة.


إعادة تشغيل listunspent. لدينا الآن ثلاثة من UTXOs: المعاملات التي قمنا بإنشائها من قبل بالإضافة إلى المعاملة coinbase من block # 2. نقوم بحفظ رقم مؤشر txid و output (vout) الخاص بـ UTXO الذي يحتوي على العملة المعدنية لمتغيرات shell.


باستخدام وسيطين إلى celsiusawtransaction RPC ، نقوم بإنشاء معاملة تنسيق raw جديد. تشير الوسيطة الأولى (صفيف JSON) إلى txid من المعاملة coinbase من block # 2 ورقم الفهرس (0) للإخراج من تلك المعاملة التي نريد إنفاقها. تقوم الوسيطة الثانية (كائن JSON) بإنشاء الإخراج بالعنوان (تجزئة المفتاح العام) وعدد البتكوينات التي نريد نقلها. نقوم بحفظ معاملات التنسيق الأولية الناتجة إلى متغير shell.


تحذير: createrawtransaction لا يخلق تلقائيا نواتج التغيير ، بحيث يمكنك بسهولة دفع رسوم معاملات كبيرة عن طريق الخطأ. في هذا المثال ، كان لمدخلاتنا 50.0000 bitcoins ، ويتم دفع ناتجنا ($ NEW_ADDRESS) 49.9999 bitcoins ، وبالتالي فإن المعاملة ستشمل رسوم قدرها 0.0001 بيتكوين. إذا كنا قد دفعنا $ NEW_ADDRESS 10 بتكات فقط دون أي تغييرات أخرى في هذه المعاملة ، فإن رسوم المعاملة ستكون 40 بت كوين ضخم. راجع القسم الفرعي معاملات Raw المعقدة أدناه لمعرفة كيفية إنشاء معاملة ذات مخرجات متعددة بحيث يمكنك إرسال التغيير مرة أخرى إلى نفسك.


استخدم RPC decoderawtransaction لترى بالضبط ما تقوم به المعاملة التي أنشأناها للتو.


استخدم RPC signrawtransaction لتوقيع المعاملة التي تم إنشاؤها بواسطة createrawtransaction وحفظ المعاملة الأولية "hex" التي تم إرجاعها المعاملة إلى متغير shell.


على الرغم من اكتمال المعاملة الآن ، فإن عقدة Bitcoin Core التي نتصل بها لا تعرف أي شيء عن المعاملة ، ولا أي جزء آخر من الشبكة. لقد أنشأنا إنفاقًا ، لكننا لم ننفق أي شيء فعليًا لأننا ببساطة يمكننا إلغاء تعيين متغير $ SIGNED_RAW_TX لإلغاء المعاملة.


إرسال المعاملة الموقعة إلى العقدة المتصلة باستخدام RPC sendrawtransaction. بعد قبول المعاملة ، عادةً ما تقوم هذه العقدة ببثها إلى نظراء آخرين ، لكننا لسنا متصلين حاليًا بأقران أخرى لأننا بدأنا في وضع regtest.


توليد كتلة لتأكيد المعاملة ومسح لدينا متغيرات قذيفة.


المعاملة الخام المعقدة.


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


بالنسبة إلى مدخلينا ، فإننا نختار جهازي UTXO من خلال وضع أرقام مؤشر txid و output (vouts) في متغيرات shell. ونقوم أيضًا بحفظ العناوين المقابلة للمفاتيح العامة (مجزأة أو غير مضمنة) المستخدمة في تلك المعاملات. نحن بحاجة إلى العناوين حتى نتمكن من الحصول على المفاتيح الخاصة المقابلة من محفظتنا.


استخدم dumpprivkey RPC للحصول على المفاتيح الخاصة المقابلة للمفاتيح العامة المستخدمة في مدخلي UTXOs من المدخلات التي سننفقها. نحتاج إلى المفاتيح الخاصة حتى نتمكن من تسجيل كل من المدخلات بشكل منفصل.


تحذير: يجب على المستخدمين عدم إدارة المفاتيح الخاصة يدوياً على mainnet. وبقدر خطورة المعاملات الأولية (انظر التحذيرات أعلاه) ، فإن ارتكاب خطأ بمفتاح خاص يمكن أن يكون أسوأ من ذلك بكثير - كما هو الحال في حل تنازلي رئيسي عبر جيل من محفظة HD. هذه الأمثلة هي لمساعدتك على التعلم ، وليس لك لمحاكاة على mainnet.


إنشاء المعاملة الخام باستخدام createrawtransaction بكثير نفس كما كان من قبل ، إلا الآن لدينا اثنين من المدخلات والمخرجات اثنين.


يصبح توقيع المعاملة الأولية مع signrawtransaction أكثر تعقيدًا حيث لدينا الآن ثلاث حجج:


مجموعة فارغة. نحن لا نفعل أي شيء مع هذه الحجة في هذه العملية ، ولكن يجب توفير بعض JSON صالحة للوصول إلى الحجج الموضعية في وقت لاحق.


المفتاح الخاص الذي نرغب في استخدامه للتوقيع على أحد المدخلات.


والنتيجة هي معاملة أولية موقعة واحدة فقط. يشار إلى حقيقة أن المعاملة غير موقعة بشكل كامل بقيمة حقل JSON الكامل. نقوم بحفظ عشريّة المعاملة الخام غير المكتملة والموقعة جزئيًا لمتغير shell.


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


تنظيف متغيرات shell المستخدمة. بخلاف الأقسام الفرعية السابقة ، لن نرسل هذه المعاملة إلى العقدة المتصلة باستخدام sendrawtransaction....سيسمح لنا هذا بالتوضيح في القسم الفرعي "تسجيل الدخول دون اتصال" أدناه كيفية إنفاق معاملة لم يتم بعد في سلسلة الكتل أو تجمع الذاكرة.


سننفق الآن المعاملة التي تم إنشاؤها في القسم الفرعي معاملات Raw المعقدة أعلاه دون إرسالها إلى العقدة المحلية أولاً. هذه هي العملية الأساسية نفسها التي تستخدمها برامج المحفظ للتوقيع بلا اتصال - والتي تعني عمومًا توقيع صفقة دون الوصول إلى مجموعة UTXO الحالية.


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


ضع المعاملة الموقعة مسبقاً (ولكن لم يتم إرسالها) في متغير shell.


فك شفرة المعاملة الخام الموقعة حتى نتمكن من الحصول على سداسي. كذلك ، اختر واحدة محددة من UTXOs الخاصة بها لإنفاق وحفظ رقم فهرس الإخراج الخاص بـ UTXO (vout) و scriptkey hexO (scriptPubKey) في متغيرات shell.


الحصول على عنوان جديد لقضاء satosis ل.


أنشئ المعاملة الأولية بالطريقة نفسها التي أجريناها في الأقسام الفرعية السابقة.


محاولة التوقيع على المعاملة الأولية بدون أي وسيطات خاصة ، الطريقة التي وقعنا بها بنجاح المعاملة الأولية في القسم الفرعي Simple Transaction. إذا كنت قد قرأت مقطع "المعاملة" في الدليل ، فقد تعرف سبب فشل الاتصال وتترك سترة المعاملة الأولية بدون تغيير.


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


في الأقسام الفرعية للمعاملات الأولية الأخرى أعلاه ، كان الناتج السابق جزءًا من مجموعة UTXO المعروفة بالمحفظة ، لذلك كانت المحفظة قادرة على استخدام رقم فهرس txid و output لإيجاد نص pubkey السابق وإدراجه تلقائيًا.


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


بنجاح توقيع المعاملة عن طريق توفير البرنامج النصي pubkey السابق وغيرها من بيانات الإدخال المطلوبة.


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


حاول بث العملية الثانية قبل نشر أول معاملة. ترفض العقدة هذه المحاولة لأن المعاملة الثانية تنفق مخرجات ليست UTXO تعرفها العقدة.


بث أول معاملة ، والتي تنجح ، ثم بث العملية الثانية - والتي تنجح الآن لأن العقدة الآن ترى UTXO.


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


قم بإزالة متغيرات shell القديمة.


في هذا القسم الفرعي ، سنقوم بإنشاء عنوان متعدد الخدمات P2SH ، وقضاء satoshis إليه ، ومن ثم قضاء تلك satoshis منه إلى عنوان آخر.


إنشاء عنوان multisig سهل. تحتوي مخرجات multisig على معلمتين ، الحد الأدنى لعدد التواقيع المطلوبة (m) وعدد المفاتيح العامة المستخدمة للتحقق من صحة هذه التواقيع. يسمى هذا m-of-n ، وفي هذه الحالة ، سنستخدم 2 من 3.


قم بإنشاء ثلاثة عناوين P2PKH جديدة. لا يمكن استخدام عناوين P2PKH مع البرنامج النصي multizig redeem الذي تم إنشاؤه أدناه. (لا يعد استخدام كل مفتاح عمومي ضروريًا على أي حال - يتم حماية جميع المفاتيح العامة من خلال التجزئة عندما يتم تجزئتها.) ومع ذلك ، يستخدم Bitcoin Core العناوين كطريقة للإشارة إلى المفاتيح العامة الكاملة (unhashed) التي يعرف عنها ، لذلك نحصل على العناوين الثلاثة الجديدة أعلاه من أجل استخدام مفاتيحهم العامة.


أذكر من الدليل أن المفاتيح العامة المجزأة المستخدمة في العناوين تعمل على تشويش المفتاح العمومي الكامل ، بحيث لا يمكنك إعطاء عنوان لشخص آخر أو جهاز آخر كجزء من إنشاء إخراج تعددي نموذجي أو P2SH multisig redeem script. يجب أن تمنحهم مفتاحًا عامًا كاملاً.


استخدم RPC صالح validateaddress لعرض المفتاح العمومي الكامل (unhashed) لأحد العناوين. هذه هي المعلومات التي سيتم تضمينها بالفعل في البرنامج النصي استرداد multisig. هذه هي أيضًا المعلومات التي قد تعطيها لشخص آخر أو جهاز آخر كجزء من إنشاء مخرجات multisig أو P2SH multisig redeem.


نحفظ العنوان الذي يتم إرجاعه إلى متغير shell.


استخدم RPC Createmultisig مع وسيطتين ، العدد (n) من التواقيع المطلوبة وقائمة بالعناوين أو المفاتيح العامة. نظرًا لأنه لا يمكن استخدام عناوين P2PKH في النص البرمجي متعدد الاسترداد الذي تم إنشاؤه بواسطة RPC ، فإن العناوين الوحيدة التي يمكن تقديمها هي العناوين التي تنتمي إلى مفتاح عام في المحفظة....في هذه الحالة ، نقدم عنوانين ومفتاحًا عامًا واحدًا - سيتم تحويل كل منهما إلى مفاتيح عامة في برنامج استرداد القيمة.


يتم إرجاع عنوان P2SH مع نص الاسترداد الذي يجب تقديمه عندما ننفق satosis إرسالها إلى عنوان P2SH.


تحذير: يجب ألا تفقد برنامج استرداد القيمة ، خاصة إذا لم يكن لديك سجل بالمفاتيح العامة التي استخدمتها لإنشاء عنوان تعدد الاتصال P2SH. أنت بحاجة إلى برنامج redeem النصي لإنفاق أي bitcoins يتم إرسالها إلى عنوان P2SH. إذا فقدت نص الاسترداد ، يمكنك إعادة إنشائه عن طريق تشغيل نفس الأمر أعلاه ، مع مفاتيح عامة مدرجة في نفس الترتيب. ومع ذلك ، إذا فقدت كلا من برنامج الاسترداد وحتى أحد المفاتيح العامة ، فلن تتمكن مطلقًا من قضاء satoshis المرسل إلى عنوان P2SH هذا.


لا يتم تخزين العنوان ولا نص الاسترداد في المحفظة عند استخدام createmultisig. لتخزينها في المحفظة ، استخدم addmultisigaddress RPC بدلاً من ذلك. إذا قمت بإضافة عنوان إلى المحفظة ، يجب أيضًا عمل نسخة احتياطية جديدة.


إن دفع عنوان PCS متعدد الخدمات مع Bitcoin Core بسيط مثل دفع عنوان P2PKH أكثر شيوعًا. هنا نستخدم نفس الأمر (لكن متغيرًا مختلفًا) استخدمناه في قسم الإنفاق البسيط. كما كان من قبل ، يقوم هذا الأمر تلقائيًا باختيار UTXO ، ويقوم بإنشاء تغيير في الإخراج إلى عنوان جديد من عناوين P2PKH إذا لزم الأمر ، ويدفع رسوم المعاملة إذا لزم الأمر.


نقوم بحفظ ذلك الـ txid إلى متغير shell كما هو txid لـ UTXO الذي نخطط لإنفاقه بعد ذلك.


نحن نستخدم الـ RPC لتجميع البيانات مع الوسيطة الثانية الاختيارية (true) للحصول على المعاملة التي تم فك ترميزها التي أنشأناها للتو باستخدام sendtoaddress. نختار أحد المخرجات ليكون UTXO الخاص بنا والحصول على رقم مؤشر الناتج (vout) ونصي pubkey (scriptPubKey).


نقوم بإنشاء عنوان P2PKH جديد لاستخدامه في الإخراج الذي نحن بصدد إنشاؤه.


نقوم بإنشاء المعاملة الأولية بنفس الطريقة التي قمنا بها في القسم الفرعي Simple Transaction.


نحصل على المفاتيح الخاصة لاثنين من المفاتيح العامة التي استخدمناها لإنشاء المعاملة ، بنفس الطريقة التي حصلنا بها على المفاتيح الخاصة في القسم الفرعي معاملات Raw المعقدة. أذكر أننا أنشأنا 2-من-3 البرنامج النصي pubisk multisig ، لذلك هناك حاجة إلى التوقيعات من اثنين من مفاتيح خاصة.


نجعل التوقيع الأول. تأخذ وسيطة الإدخال (كائن JSON) معلمة البرنامج النصي استرداد إضافية بحيث يمكن إلحاق البرنامج النصي استرداد إلى نص التوقيع بعد التوقيعين.


تتشابه نداء signrawtransaction المستخدم هنا مع الاتصال المستخدم أعلاه. الاختلاف الوحيد هو المفتاح الخاص المستخدم. والآن بعد تقديم التوقيعين المطلوبين ، تم وضع علامة على المعاملة كاملة.


نرسل المعاملة بإنفاق P2SH multisig الإخراج إلى العقدة المحلية ، التي تقبل ذلك.


بروتوكول الدفع.


لطلب الدفع باستخدام بروتوكول الدفع ، يمكنك استخدام bitcoin ممتد (لكن متوافقاً): URI. فمثلا:


المتصفح ، قارئ رمز الاستجابة السريعة ، أو برنامج آخر لمعالجة URI يفتح برنامج المحفظة Bitcoin Spender على URI. إذا كان برنامج المحفظة على علم ببروتوكول الدفع ، فإنه يصل إلى عنوان URL المحدد في معامل r ، والذي يجب أن يوفره مع PaymentRequest المتسلسل الذي يتم تقديمه مع تطبيق نوع MIME / bitcoin-paymentrequest.


PaymentRequest & amp؛ بيانات الدفع.


يتم إنشاء PaymentRequest باستخدام هياكل البيانات المنشأة باستخدام Google Protocol Protocol. تصف BIP70 هياكل البيانات هذه بطريقة غير متسلسلة يتم تعريفها في كود المخزن المؤقت لبروتوكول طلب الدفع ، ولكن النص أدناه سيصفها بترتيب أكثر خطية باستخدام برنامج Python CGI البسيط (ولكنه فعال). (للإيجاز والوضوح ، لا يتم استخدام العديد من أفضل ممارسات CGI العادية في هذا البرنامج.)


يتم توضيح التسلسل الكامل للأحداث أدناه ، بدءا من المنحنى النقر فوق bitcoin: URI أو مسح bitcoin: QR code.


لكي يتمكن البرنامج النصي من استخدام مخزن البروتوكول المؤقت ، ستحتاج إلى نسخة من برنامج Google Protocol Protocol Buffer (protoc) ، والذي يتوفر في معظم مديري حزم Linux الحديثين ومباشرة من Google. تتوفر برامج التحويل البرمجي لبرتوكول بروتوكول Non-Google لمجموعة متنوعة من لغات البرمجة. ستحتاج أيضًا إلى نسخة من وصف Buffer Protocol Buffer من كود مصدر Bitcoin Core.


مع رمز Python الذي تم إنشاؤه بواسطة protoc ، يمكننا بدء برنامج CGI البسيط.


رمز بدء التشغيل أعلاه بسيط للغاية ، لا يتطلب سوى وظيفة التوقيت (تاريخ يونكس) ، واصف الملف الخارجي القياسي ، وبعض الوظائف من مكتبة OpenSSL ، وهياكل البيانات والوظائف التي أنشأتها protoc.


بعد ذلك ، سنعين إعدادات التهيئة التي لن تتغير عادة إلا عندما يريد المتلقي أن يفعل شيئًا مختلفًا. يدفع الرمز بعض الإعدادات في الطلب (PaymentRequest) وتفاصيل الكائنات (PaymentDetails). عندما نقوم بتسلسلها ، سيتم تضمين PaymentDetails في PaymentRequest.


كل سطر موضح أدناه....pki_type: (اختياري) أخبر برنامج محفظة الاستلام بنوع البنية الأساسية العامة (PKI) الذي تستخدمه لتوقيع PaymentRequest الخاص بك بشكل تشفير بحيث لا يمكن تعديله بواسطة هجوم رجل في الوسط.


إذا كنت لا ترغب في التوقيع على PaymentRequest ، فيمكنك اختيار pki_type لا شيء (الافتراضي).


إذا اخترت علامة PaymentRequest ، فلديك حاليًا خياران يحددهما BIP70: x509 + sha1 و x509 + sha256. يستخدم كلا الخيارين نظام شهادة X.509 ، وهو نفس النظام المستخدم لـ HTTP Secure (HTTPS). لاستخدام أي من الخيارين ، ستحتاج إلى شهادة موقعة من قِبل مرجع مصدق أو أحد الوسطاء التابعين لها. (لن تعمل شهادة موقعة ذاتيا).


قد يختار كل برنامج محفظة أيًا من المراجع المصدقة التي تثق بها ، ولكن من المحتمل أن يثقوا في أي من المراجع المصدقة التي يثق بها نظام التشغيل الخاص بهم. إذا لم يكن لدى برنامج المحفظة نظام تشغيل كامل ، كما هو الحال بالنسبة لمحافظ الأجهزة الصغيرة ، يقترح BIP70 استخدام متجر Mozilla Root Certificate Store. بشكل عام ، إذا كانت هناك شهادة تعمل في متصفح الويب الخاص بك عند الاتصال بخادم الويب الخاص بك ، فستعمل هذه الميزة مع PaymentRequests.


الشبكة: (اختياري) ، أخبر برنامج محفظة المنقذ بشبكة Bitcoin التي تستخدمها ؛ يحدد BIP70 "main" لل mainnet (الدفعات الفعلية) و "test" لـ testnet (مثل mainnet ، ولكن satosis وهمية تستخدم). إذا كان برنامج المحفظة لا يعمل على الشبكة التي تشير إليها ، فسيرفض PaymentRequest.


payment_url: (مطلوب) لإخبار برنامج المحفظة الخاص بالنفق إلى أين ترسل رسالة الدفع (الموضحة لاحقًا). يمكن أن يكون هذا عنوان URL ثابت ، كما هو موضح في هذا المثال ، أو عنوان URL متغير مثل https://example. com/pay. py؟invoice=123. يجب أن يكون عنوان HTTPS عادةً لمنع هجمات man-in-the-middle من تعديل الرسالة.


payment_details_version: (اختياري) أخبر برنامج المحفظة الخاص بالنفق ما هو إصدار PaymentDetails الذي تستخدمه. حتى كتابة هذه السطور ، الإصدار الوحيد هو الإصدار 1.


x509certificates: (مطلوب لـ PaymentRequests الموقعة) يجب عليك توفير مفتاح / شهادة SSL العامة المطابقة لمفتاح SSL الخاص الذي ستستخدمه للتوقيع على PaymentRequest. يجب أن تكون الشهادة بتنسيق ASN.1 / DER.


يجب أيضًا تقديم أي شهادات وسيطة لازمة لربط شهادتك بشهادة الجذر لمرجع شهادة موثوق به بواسطة برنامج المنفق ، مثل شهادة من متجر موزيلا الجذري.


يجب تقديم الشهادات بترتيب معين - وهو نفس الطلب الذي يستخدمه توجيه Apache الخاص بـ SSLCertificateFile وبرامج الخادم الأخرى. يعرض الشكل أدناه سلسلة شهادة شهادة www. bitcoin. org X.509 وكيف سيتم تحميل كل شهادة (باستثناء الشهادة الجذر) في رسالة المخزن المؤقت لبروتوكول X509Certificates.


لكي تكون محددًا ، يجب أن تكون الشهادة الأولى المقدمة هي شهادة X.509 المطابقة لمفتاح طبقة المقابس الآمنة الخاصة التي ستجعل التوقيع ، يُسمى شهادة الأوراق. يتم إرفاق أي شهادات وسيطة ضرورية لربط مفتاح SSL العام الموقع بشهادة الجذر (مرجع الشهادة) بشكل منفصل ، مع كل شهادة في تنسيق DER تحمل توقيع الشهادة التي تتبعها على طول الطريق إلى (ولكن بدون تضمين) الجذر شهادة.


(مطلوب لـ PaymentRequests موقع) ستحتاج إلى مفتاح SSL خاص في تنسيق يدعم مكتبة SSL (تنسيق DER غير مطلوب). في هذا البرنامج ، سنقوم بتحميله من ملف PEM. (من الواضح أن تضمين عبارة المرور في شفرة CGI الخاصة بك ، كما فعلت هنا ، فكرة سيئة في الحياة الحقيقية).


لن يتم إرسال مفتاح SSL الخاص مع طلبك. نحن نقوم بتحميله فقط في الذاكرة هنا حتى نتمكن من استخدامه لتوقيع الطلب لاحقًا.


لنلقِ نظرة الآن على المتغيرات التي سيحددها برنامج CGI لكل دفعة.


كل سطر موضح أدناه.


المبلغ: (اختياري) المبلغ الذي تريد أن يدفعه المنفق. من المحتمل أن تحصل على هذه القيمة من تطبيق عربة التسوق أو أداة تحويل سعر الصرف من شركة فيات إلى بي تي سي. إذا تركت المبلغ فارغًا ، سيطالبك برنامج المحفظة بالمدفوع كم تدفع (والذي يمكن أن يكون مفيدًا للتبرعات).


البرنامج النصي: (مطلوب) يجب أن تقوم بتحديد البرنامج النصي للمفتاح الذي تريد دفعه للإنفاق - أي برنامج نصي صحيح. في هذا المثال ، سنطلب الدفع إلى برنامج نصي من نوع P2PKH.


أولا نحصل على تجزئة pubkey. التجزئ أعلاه هو شكل تجزئة العنوان المستخدم في أمثلة URI في هذا القسم ، mjSk1Ny9spzU2fouzYgLqGUD8U41iR35QN.


بعد ذلك ، سنقوم بتوصيل هذا التجزء في برنامج نصي PDP القياسي P2PKH باستخدام عرافة ، كما هو موضح في التعليقات البرمجية.


وأخيرًا ، نقوم بتحويل البرنامج النصي لـ pubkey من ست عشري إلى نسخته المتسلسلة.


النواتج: (مطلوب) إضافة البرنامج النصي pubkey و (اختياري) مقدار الصفيف مخرجات PaymentDetails.


من الممكن تحديد نصوص ومبالغ متعددة كجزء من استراتيجية تجنب الدمج ، الموضحة لاحقًا في القسم الفرعي "تجنب الاندماج"....ومع ذلك ، فإن تجنب الاندماج الفعال غير ممكن بموجب قواعد BIP70 الأساسية التي يقوم فيها المنفق بدفع كل مبلغ محدد بالضبط بالمبلغ المقترن. إذا تم حذف المبالغ من جميع أزواج المبلغ / البرنامج النصي ، فستتم مطالبة المنفق باختيار مبلغ للدفع.


مذكرة: (اختياري) إضافة مذكرة والتي سيتم عرضها على المنبسط كنص عادي UTF-8. لن تتم معالجة HTML المضمّن أو العلامات الأخرى.


merchant_data: (اختياري) إضافة بيانات عشوائية والتي يجب إعادتها إلى المستلم عند دفع الفاتورة. يمكنك استخدام هذا لتتبع فواتيرك ، على الرغم من أنه يمكنك تتبع الدفعات بطريقة أكثر موثوقية عن طريق إنشاء عنوان فريد لكل دفعة ، ثم تتبعها عند تلقي الدفعات.


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


بعد ذلك ، دعنا نلقي نظرة على بعض المعلومات التي يمكن لبرنامج CGI استخلاصها تلقائيًا.


كل سطر موضح أدناه.


time: (required) يجب أن تشير PaymentRequests عندما تم إنشائها بعدد الثواني المنقضية منذ 1970-01-01T00: 00 UTC (تنسيق UNIX وقت الحقبة).


تنتهي صلاحيته: (اختياري) قد يقوم أيضًا PaymentRequest بتعيين وقت انتهاء الصلاحية الذي لم يعد صالحًا بعده. ربما تريد منح المستلمين القدرة على تكوين دلتا وقت انتهاء الصلاحية ؛ هنا استخدمنا الخيار المعقول لمدة 10 دقائق. إذا كان هذا الطلب مرتبطًا بمجموع الطلب استنادًا إلى سعر الصرف من fiat-to-satoshis ، فربما تريد أن تقوم بذلك على دلتا من الوقت الذي حصلت فيه على سعر الصرف.


serialized_payment_details: (مطلوب) قمنا الآن بتعيين كل ما نحتاجه لإنشاء PaymentDetails ، لذا سنستخدم الدالة SerializeToString من رمز مخزن البروتوكول المؤقت لتخزين PaymentDetails في الحقل المناسب من PaymentRequest.


pki_data: (مطلوب لـ PaymentRequests موقع) إجراء تسلسل لبيانات PKI لسلسلة الشهادات وتخزينها في PaymentRequest.


لقد ملأنا كل شيء في PaymentRequest باستثناء التوقيع ، ولكن قبل أن نوقعه ، يتعين علينا تهيئة حقل التوقيع عن طريق تعيينه إلى عنصر نائب صفري البايت.


التوقيع: (مطلوب للتوقيع على PaymentRequests) الآن نقوم بالتوقيع بتوقيع PaymentRequest المكتمل والمتسلسل. سنستخدم المفتاح الخاص المخزن في الذاكرة في قسم التهيئة ونفس صيغة التصنيف التي حددناها في pki_type (sha256 في هذه الحالة)


والآن بعد أن تم ملء كل طلب الدفع ، يمكننا تسلسله وإرساله مع رؤوس HTTP ، كما هو موضح في الكود أدناه.


(مطلوب) يحدد BIP71 أنواع المحتوى لـ PaymentRequests ، والمدفوعات ، و PaymentTracks.


الطلب: (مطلوب) الآن ، للإنتهاء ، نحن فقط نتخلص من PaymentRequest المتسلسل (الذي يحتوي على PaymentDetails المتسلسل). تكون البيانات المتسلسلة ثنائية ، لذلك لا يمكننا استخدام مطبوع Python () لأنه سيضيف سطرًا جديدًا غريبًا.


توضح لقطة الشاشة التالية كيفية ظهور PaymentDetails المصدق بواسطة البرنامج أعلاه في واجهة المستخدم الرسومية من Bitcoin Core 0.9.


خلق مرشح بلوم.


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


نبدأ بتحديد بعض القيم القصوى المحددة في BIP37: الحد الأقصى لعدد البايتات المسموح بها في الفلتر والعدد الأقصى لوظائف التجزئة المستخدمة لتجزئة كل جزء من البيانات. نحن أيضًا نضبط nFlags على الصفر ، مما يشير إلى أننا لا نريد أن تقوم العقدة البعيدة بتحديث الفلتر لنا. (لن نستخدم nFlags مرة أخرى في نموذج البرنامج ، لكن البرامج الحقيقية ستحتاج إلى استخدامه.)


نحدد عدد (n) العناصر التي نخطط لإدخالها في المرشح والمعدل الإيجابي الخاطئ (p) الذي نريده للمساعدة في حماية خصوصيتنا. في هذا المثال ، سنقوم بتعيين n إلى عنصر واحد و p لمعدل 1-in-10،000 لإنتاج مرشح صغير ودقيق لأغراض التوضيح. في الاستخدام الفعلي ، من المحتمل أن تكون الفلاتر أكبر من ذلك بكثير.


باستخدام الصيغة الموضحة في BIP37 ، نقوم بحساب الحجم المثالي للفلتر (بالبايت) والعدد المثالي لوظائف هاش المطلوب استخدامها. يتم اقتطاع كليهما إلى أقرب رقم صحيح وكلاهما مقيدان أيضًا بالقيم القصوى التي حددناها سابقًا. نتائج هذه الحسابات الثابتة المحددة هي 2 مرشح بايت و 11 وظيفة هاش. ثم نستخدم nFilterBytes لإنشاء مجموعة بت صغيرة - endian من الحجم المناسب.


يجب علينا أيضا اختيار قيمة ل nTweak. في هذه الحالة ، سنستخدم الصفر.


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


لإضافة البيانات إلى الفلتر ، نضيف TXID....لاحظ أن TXID في ترتيب البايت الداخلي.


الآن نستخدم قالب دالة هاش لتشغيل وظيفة هاش مختلفة قليلا عن أوقات nHashFuncs. يتم استخدام نتيجة كل وظيفة يتم تشغيلها على المعاملة كرقم فهرسة: يتم تعيين البت في هذا الفهرس إلى 1. يمكننا رؤية ذلك في إخراج تصحيح الأخطاء المطبوع:


لاحظ أنه في التكرار 8 و 9 ، لم يتغير عامل التصفية لأن البتة المقابلة تم ضبطها بالفعل في التكرار السابق (5 و 7 ، على التوالي). هذا هو جزء طبيعي من عملية تصفية bloom.


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


ملاحظة: لتطبيق Python الأكثر استخدامًا مع عدد أقل من التبعيات الخارجية ، راجع وحدة تصفية beathon-bitcoinlib bloom والتي تستند مباشرةً إلى تطبيق C ++ الخاص بـ Bitcoin Core.


باستخدام تنسيق رسالة filterload ، سيكون الفلتر الكامل الذي تم إنشاؤه أعلاه هو النموذج الثنائي لل hexdump المشروح الموضح أدناه:


تقييم مرشح بلوم.


إن استخدام مرشح bloom للعثور على بيانات متطابقة يكاد يكون متماثلاً مع إنشاء عامل تصفية bloom — باستثناء أنه في كل خطوة نقوم بالتحقق لمعرفة ما إذا تم تعيين بتة الفهرس المحسوبة في الفلتر الحالي.


باستخدام مرشح bloom الذي تم إنشاؤه أعلاه ، نستورد معلماته المختلفة. لاحظ ، كما هو موضح في القسم أعلاه ، لن نستخدم nFlags فعليًا لتحديث الفلتر.


نحن نحدد وظيفة لفحص عنصر مقابل الفلتر المقدم. عند التحقق مما إذا كان الفلتر يحتوي على عنصر ، فإننا نختبر لمعرفة ما إذا كانت بتة معينة في الفلتر مضبوطة بالفعل على 1 (إذا لم تكن كذلك ، فستفشل المباراة).


اختبار الفلتر مقابل عنصر البيانات الذي أضفناه من قبل ، لن نحصل على أي إخراج (يشير إلى تطابق محتمل). تذكر أن مرشحات bloom لها معدل سالبة خاطئة صفر - لذلك يجب أن تتطابق دائمًا مع العناصر المدرجة.


اختبار مرشح ضد عنصر التعسفي ، نحصل على إخراج الفشل أدناه. ملاحظة: أنشأنا فلترًا بمعدل موجب كاذب بمعدل 1 لكل 10000 (تم تقريبه إلى حدٍ ما عند اقتطاعه) ، لذلك كان من الممكن أن تتطابق هذه السلسلة التعسفية مع الفلتر على أي حال. ليس من الممكن تعيين مرشح bloom إلى معدل موجب كاذب صفر ، لذلك سوف يكون البرنامج الخاص بك دائماً للتعامل مع ايجابيات كاذبة. يُظهر لنا الناتج أدناه أن إحدى دوال التجزئة قد عرضت رقمًا قياسيًا من 0x06 ، ولكن لم يتم ضبط هذا البت في الفلتر ، مما تسبب في فشل المطابقة:


استرجاع MerkleBlock.


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


للاتصال بشبكة P2P ، تم تطوير وظيفة Python المهمة أعلاه لحساب رؤوس الرسائل وإرسال الحمولات التي تم فك تشفيرها من ست عشري.


لن يقبل الأقران على الشبكة أي طلبات حتى ترسل لهم رسالة إصدار. سترسل العقدة المتلقية برسالة الإصدار الخاصة بها ورسالة verack.


لن نتمكن من التحقق من صحة رسالة الإصدار الخاصة بهم باستخدام هذا النص البرمجي البسيط ، ولكننا سننام لفترة قصيرة ونعيد إرسال رسالة verack الخاصة بنا كما لو كنا قد قبلنا رسالة الإصدار الخاصة بهم.


قمنا بتعيين مرشح bloom مع رسالة filterload. هذا الفلتر موضح في القسمين السابقين.


نطلب إنشاء كتلة للعمليات التي تتوافق مع فلترنا ، مع إكمال النص البرمجي.


لتشغيل البرنامج النصي ، نقوم ببساطة بنقله إلى أمر netcat Unix أو أحد نسخه المتعددة ، أحدها متاح لأي نظام أساسي تقريبًا. على سبيل المثال ، باستخدام netcat الأصلي واستخدام hexdump (hd) لعرض الإخراج:


يظهر جزء من الاستجابة في القسم أدناه.


تحليل MerkleBlock.


في المقطع أعلاه ، استردنا كتلة merkle من الشبكة ؛ الآن سنقوم بتحليلها. تم حذف معظم رأس المجموعة. للحصول على hexdump أكثر اكتمالاً ، راجع المثال في قسم رسالة merkleblock.


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


نبدأ ببناء هيكل الشجرة على أساس عدد المعاملات في الكتلة.


العلامة الأولى هي 1 ، وجذر الدعارة (كما هو الحال دائمًا) هو عقدة غير TXID ، لذلك سنحتاج إلى حساب التجزأة لاحقًا استنادًا إلى أطفال العقدة هذه. وفقًا لذلك ، ننحدر إلى الطفل الأيسر لجذر ميركل وننظر إلى العلامة التالية للحصول على الإرشادات.


العلامة التالية في المثال هي 0 وهذه أيضًا عقدة غير TXID ، لذا نطبق التجزئة الأولى من رسالة merkleblock إلى هذه العقدة. لا نعالج أيضًا أي عقد أطفال - وفقًا للنظير الذي أنشأ رسالة merkleblock ، لن يؤدي أي من تلك العقد إلى TXIDs للمعاملات التي تتوافق مع فلترنا ، لذلك لا نحتاج إليها. نعود إلى الجذر merkle ثم ينحدر إلى الطفل الصحيح والنظر إلى العلم (الثالث) التالي للحصول على تعليمات....العلم الثالث في المثال هو 1 آخر على عقدة non-TXID أخرى ، لذا ننزل إلى الطفل الأيسر.


العلم الرابع هو أيضًا 1 على عقدة أخرى غير TXID ، لذا ننحدر مرة أخرى - سنستمر دائمًا في التنازلي حتى نصل إلى عقدة TXID أو عقدة non-TXID مع علامة 0 (أو ننتهي من ملء الشجرة).


وأخيرًا ، على العلم الخامس في المثال (أ 1) ، نصل إلى عقدة TXID. تشير العلامة 1 إلى أن معاملة TXID تتطابق مع الفلتر الخاص بنا وأننا يجب أن نأخذ التجزئة (الثاني) التالي ونستخدمه كـ TXID الخاص بالعقدة.


تنطبق العلامة السادسة أيضًا على TXID ، ولكنها علامة 0 ، لذلك لا تتطابق معاملة TXID مع الفلتر ؛ مع ذلك ، نأخذ التجزئة (الثالث) التالي ونستخدمه كـ TXID الخاص بالعقدة.


لدينا الآن معلومات كافية لحساب التجزئة للعقدة الرابعة التي واجهناها - إنه تجزئة التجزيئات المتسلسلة في تكرتي TXID اللذين قمنا بتعبئتها.


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


نحن التجزئة حسب الاقتضاء لملء الشجرة. لاحظ أن العلامة الثامنة غير مستخدمة - وهذا مقبول لأنه كان مطلوبًا لبسط بومة العلم.


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


بيتكوين.


13 828 пользователей находятся здесь.


مرحبًا بك في Reddit ،


الصفحة الأولى من الإنترنت.


والاشتراك في واحدة من آلاف المجتمعات.


تريد أن تضيف إلى المناقشة؟


помощь правила сайта центр поддержки вики реддикет mod guidelines связаться с нами.


приложенияи инструменты Reddit for iPhone Reddit for Android mobile website кнопки.


Использование данного сайта означает، что вы принимаете пользовательского соглашения и Политика конфиденциальности. &نسخ؛ 2018 reddit инкорпорейтед. Все права защищены.


REDDIT وشعار ALIEN هي علامات تجارية مسجلة لشركة reddit inc.


وبي. المقدمة بواسطة PID 83564 على التطبيق 597 في 2018-01-10 14: 53: 02.434274 + 00: 00 30f17F رمز البلد: DE.

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.