blockj: مشروع blockchain بسيط يعتمد على Java
يقدم لك محرر Downcodes اليوم مشروعًا بسيطًا لـ blockchain (سلسلة اتحاد) يعتمد على Java - blockj. يتضمن أدوات التشفير والمحافظ ونقل P2P ومزامنة الكتل وتوافق الشبكة وغيرها من التطبيقات الأساسية لـ blockchain وهو مشروع مناسب جدًا للمبتدئين لتعلم تقنية blockchain.
هيكل المشروع
يتم تنفيذ blockj باستخدام إطار عمل الشبكة SpringBoot + Tio. هيكلها الرئيسي هو كما يلي:
1. البرنامج الرئيسي: تم تنفيذه باستخدام إطار عمل SpringBoot.
2. نقل P2P: يتم تنفيذه باستخدام إطار شبكة t-io.
بيئة التشغيل
يتطلب مشروع blockj JDK 1.8 أو أعلى ليعمل بشكل صحيح.
وحدة المشروع
يحتوي مشروع blockj بشكل أساسي على الوحدات الثلاث التالية:
1. blockj-base: مجموعة الأدوات العامة الأساسية، بما في ذلك أدوات التشفير والكتل والرسائل ونماذج البيانات الأخرى، بالإضافة إلى تخزين البيانات والوظائف الأخرى.
2. blockj-miner: برنامج Blockchain الرئيسي، بما في ذلك عمال المناجم ومزامنة الكتل وشبكة P2P وRPC API ووظائف أخرى.
3. blockj-client: أداة سطر أوامر العميل، تُستخدم بشكل أساسي لاستدعاء واجهات برمجة التطبيقات ذات الصلة بـ Miner لتحقيق تفاعل المستخدم مع blockchain.
بداية سريعة
تعلمك الخطوات التالية كيفية إنشاء شبكة blockchain وإجراء العمليات الأساسية:
1. إنشاء عقدة التكوين (إنشاء شبكة)
أولاً، تحتاج إلى استنساخ المشروع وتجميعه وتعبئته:
``باش
استنساخ بوابة https://gitee.com/blackfox/blockj.git
كتلة القرص المضغوط
حزمة mvn النظيفة
`
ثم قم بإنشاء عقدة التكوين:
``باش
./miner Genesis --repo=/data/genesis --enable-mining=true
`
2. ابدأ تشغيل Genesis Miner
``باش
./miner run --repo=/data/genesis
`
3. بدء عقدة جديدة (الانضمام إلى الشبكة)
لكي تنضم العقد الجديدة إلى الشبكة الحالية، تحتاج إلى تهيئة عامل التعدين باستخدام كتلة التكوين ثم بدء تشغيل عامل التعدين:
``باش
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./miner run --repo=/data/miner1
`
استخدام العميل
فيما يلي بعض عمليات سطر أوامر العميل شائعة الاستخدام:
1. عرض قائمة المحفظة
``باش
./قائمة محفظة العميل
`
الإخراج:
`
عنوان الرصيد نونس
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. قم بإنشاء محفظة جديدة
إنشاء محفظة عادية:
``باش
./محفظة العميل الجديدة
`
قم بإنشاء محفظة تحتوي على عبارة تذكيرية (يمكنك تعيين كلمة مرور وإنشاء ملف تخزين المفاتيح):
``باش
./محفظة العميل الجديدة --mnemonic=true 123456
`
3. التحقق من رصيد المحفظة
``باش
./رصيد محفظة العميل 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
الإخراج:
`
رصيد العنوان
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. النقل
``باش
./إرسال سلسلة العميل --from=0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
الإخراج:
`
أرسل رسالة الرقم التعريفي: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. تحقق من ارتفاع السلسلة الحالي
``باش
./رئيس سلسلة العميل
`
6. عرض الرسائل على السلسلة المحددة
``باش
./ سلسلة العميل getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
الإخراج:
`
الرسالة{الإصدار=1، من='0x0d181310331612e107b5e0dfdf971cfb9de780adfds'، إلى='0x2505bf54f3a63848e44a105e8de599ad08ae8c58'، القيمة=123، الطابع الزمني=1672826743640، pub Key='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241 f14 06cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631'، الحالة = إلحاق، nonce = 2، المعلمات = 'فارغة'، الارتفاع = 0، علامة ='30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989477602210082C1C36EAEEC6367C023847F995291873F305B86 7 E9B65A5C68ED8A4293DB890'}
`
7. عرض معلومات الكتلة على ارتفاع محدد
``باش
./سلسلة العميل getBlock 1
`
الإخراج:
`
كتلة {header = BlockHeader {height = 1، الصعوبة = 28269553036454149273332760011886696253239742350009903329945699220681916416، nonce = 703، createTime = 1672813674، hash = '0004c "" [الرسالة {الإصدار=0، من='B099' ، إلى='0xb6258bc70240ee5daa213f671c08db51e50a4cbe'، القيمة=50، الطابع الزمني=1672813674163، pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7 w1pyLg qDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', الحالة = SUCC ESS, nonce=0 , params='مكافأة عامل المنجم.', الارتفاع=1, التوقيع= '304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050225022049D74E4E99E0EA8E56208AD2E4B7B17C2320 DC3E6461A17C94D1820 818559CA9 '}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF98888FDC825FFB0683E8D65494363790E 5173F 3991AF61AB86DEEFEAF15D81'}
`
8. عرض قائمة عقد P2P في الشبكة الحالية
``باش
./أقران صافي العميل
`
9. عرض معلومات اتصال العقدة الحالية P2P
``باش
./client net استمع
`
الإخراج:
`
معلومات اتصال P2P، التي كانت متصلة بواسطة العقد الأخرى
127.0.0.1:2345
`
10. قم بتوصيل العقدة يدويًا
``باش
./client net Connect 192.22.33.11:3456
`
ملخص
مشروع blockj هو مشروع مبتدئ لتعلم تقنية blockchain. من خلاله، يمكنك تعلم المفاهيم الأساسية وطرق تنفيذ blockchain. بالطبع، يقوم حاليًا بتنفيذ خوارزمية إجماع POW فقط. إذا كنت ترغب في استخدامها في مشاريع الإنتاج، فأنت بحاجة إلى تعديلها وتحسينها وفقًا لاحتياجات مشروعك.
نأمل أن تكون هذه المقالة مفيدة لك.