مقدمةأداة CLI خفيفة الوزن مفتوحة المصدر بالكامل لتوقيع رسائل البيتكوين والتحقق منها. رسالة البيتكوين هي الطريقة الأكثر مباشرة وطبيعية لإثبات الملكية لعنوان معين دون الكشف عن أي معلومات سرية.
تتبع هذه الأداة بشكل وثيق المواصفات الموضحة في BIP137:
"... في حين لم يتم كتابة خطة عمل BIP لكيفية التوقيع الرقمي على الرسائل باستخدام مفاتيح خاصة لبيتكوين بعناوين P2PKH، إلا أنها عملية مفهومة جيدًا إلى حد ما، ومع ذلك، مع تقديم Segwit (سواء في شكل عناوين P2SH أو bech32)، فمن غير الواضح كيفية التمييز بين عناوين P2PKH أو P2SH أو bech32. تقترح خطة العمل BIP هذه تنسيق توقيع قياسي يسمح للعملاء بالتمييز بين تنسيقات العناوين المختلفة."
يرجى ملاحظة أن:
"نظرًا لأن هذا التنسيق يتضمن مفاتيح P2PKH، فهو متوافق مع الإصدارات السابقة، ولكن ضع في اعتبارك أن بعض البرامج لديها عمليات فحص لنطاقات الرؤوس وستقوم بالإبلاغ عن أنواع رؤوس segwit الأحدث على أنها أخطاء."لمزيد من المعلومات:
https://github.com/bitcoin/bips/blob/master/bip-0137.mediawikiالمحافظ التي تدعم بشكل كامل نوع التوقيعات BIP137:
1) تريزور
2) Sparrow Wallet
3) Coldcard؟
4) ...
هذه الأداة هي في الأساس محاولة لتوسيع استخدام هذا المعيار.
التثبيت1) للتثبيت باستخدام pip، قم بتشغيل:
pip install bitcoin-message-tool
يمكنك إنشاء بيئة افتراضية لهذا التطبيق وتشغيله من هناك، على سبيل المثال باستخدام شِعر.
قم بإنشاء مجلد جديد (bmt هو اختصار لـ أداة رسالة البيتكوين أو يمكنك اختيار ما تريده):
poetry new bmt
cd ./bmt
إنشاء بيئة افتراضية جديدة:
poetry install
poetry shell
قم بتنزيل التطبيق من PyPi عبر هذا الأمر:
poetry add bitcoin-message-tool
لتشغيله من المحطة الطرفية استخدم هذا الأمر:
python3 -m bitcoin_message_tool
عند تشغيل التطبيق بدون وسيطات، سترى رسالة مساعدة.
2) بدلاً من ذلك، يمكنك تنزيل الكود المصدر مباشرةً من جيثب عبر هذا الأمر:
git clone https://github.com/shadowy-pycoder/bitcoin_message_tool.git
أو يمكنك تقسيم المستودع ثم استنساخ الإصدار المقسم
قم بتثبيت المتطلبات عبر هذا الأمر:
pip install -r /path/to/requirements.txt
لتشغيل تطبيق من مستودع متشعب أو مستنسخ، يمكنك ببساطة استخدام ما يلي:
python3 /path/to/bmt.py -h
كيفية استخدام أداة رسالة البيتكوينيجب أن يعطي الاختبار التالي صورة واضحة حول كيفية التوقيع والتحقق من الرسائل باستخدام أداة CLI هذه:
الاستخدام الأساسي:
python -m bitcoin_message_tool -h
or
python bmt.py -h
usage: python3 bmt.py [-h] {sign,verify} ...
أداة التوقيع والتحقق من رسائل البيتكوين
الحجج الموضعية:
{لافتة,يؤكد}
options:
-h, --help show this help message and exit
توقيع الرسالة:
python bmt.py sign -h
usage: python3 bmt.py sign [-h] -p -a {p2pkh,p2wpkh-p2sh,p2wpkh} -m [MESSAGE ...] [-d] [-v]
options:
-h, --help show this help message and exit
توقيع الرسالة:
-p, --privkey private key in wallet import format (WIF)
-a {p2pkh,p2wpkh-p2sh,p2wpkh}, --addr_type {p2pkh,p2wpkh-p2sh,p2wpkh}
type of bitcoin address
-m [MESSAGE ...], --message [MESSAGE ...]
Message to sign
-d, --deterministic sign deterministtically (RFC6979)
-v, --verbose print prettified message
مثال: توقيع غير حتمى للمفتاح الخاص المضغوط وعنوان p2pkh
$python bmt.py sign -p -a p2pkh -m ECDSA is the most fun I have ever experienced
PrivateKey(WIF):
يرجى ملاحظة أن المفتاح الخاص لن يظهر على المحطة الطرفية.
الإخراج:
Bitcoin address: 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
Message: ECDSA is the most fun I have ever experienced
Signature: IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
نفس الناتج مع العلم -v/--verbose:
-----BEGIN BITCOIN SIGNED MESSAGE-----
ECDSA is the most fun I have ever experienced
-----BEGIN BITCOIN SIGNATURE-----
175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
IBuc5GXSJCr6m7KevsBAoCiX8ToOjW2CDZMr6PCEbiHwQJ237LZTj/REbDHI1/yelY6uBWEWXiOWoGnajlgvO/A=
-----END BITCOIN SIGNATURE-----
التحقق من الرسالة:
python bmt.py verify -h
usage: python3 bmt.py verify [-h] -a ADDRESS -m [MESSAGE ...] -s SIGNATURE [-v] [-r]
options:
-h, --help show this help message and exit
التحقق من الرسالة:
-a ADDRESS, --address ADDRESS
specify bitcoin address
-m [MESSAGE ...], --message [MESSAGE ...]
Message to verify
-s SIGNATURE, --signature SIGNATURE
bitcoin signature in base64 format
-v, --verbose print full message
-r, --recpub recover public key
مثال: التحقق من الرسائل في الوضع المطول
python bmt.py verify -a 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL \
> -m ECDSA is the most fun I have ever experienced \
> -s HyiLDcQQ1p2bKmyqM0e5oIBQtKSZds4kJQ+VbZWpr0kYA6Qkam2MlUeTr+lm1teUGHuLapfa43JjyrRqdSA0pxs= \
> -v
الإخراج:
True
Message verified to be from 175A5YsPUdM71mnNCC3i8faxxYJgBonjWL
يمكنك العثور على المزيد من الأمثلة ورمز المصدر هنا:
https://github.com/shadowy-pycoder/bitcoin_message_toolالاختبارات مع Sparrow Walletدعونا نتحقق من توقيع SegWit الذي تم إنشاؤه باستخدام محفظة حقيقية:
نتيجة:
دعنا نتحقق من توقيع SegWit الذي تم إنشاؤه بواسطة هذه الأداة:
نتيجة: