Blockchain: ما الذي يجب علينا بناء PoC؟

عيون خائفة والأيدي حكة!

في المقالات السابقة ، تناولنا التقنيات التي تُبنى عليها سلاسل الكتل (ماذا يجب أن نبني blockchain؟) والحالات التي يمكن تنفيذها بمساعدتهم (ما هي تكلفة بناء القضية؟). حان الوقت للعمل بيديك! لتنفيذ الطيارين و PoC (إثبات المفهوم) ، أفضل استخدام السحب ، لأن. لديهم إمكانية الوصول من أي مكان في العالم ، وفي كثير من الأحيان ، ليست هناك حاجة لقضاء بعض الوقت في التثبيت الشاق للبيئة ، لأن. هناك تكوينات محددة مسبقًا. لذا ، دعونا نجعل شيئًا بسيطًا ، مثل شبكة لتحويل العملات المعدنية بين المشاركين ونسميها متواضعًا Citcoin. للقيام بذلك ، سوف نستخدم سحابة IBM و blockchain العالمي Hyperledger Fabric. أولاً ، دعنا نتعرف على سبب تسمية Hyperledger Fabric باسم blockchain العالمي؟

Blockchain: ما الذي يجب علينا بناء PoC؟

نسيج هايبرليدجر - بلوكشين عالمي

بشكل عام ، نظام المعلومات العالمي هو:

  • مجموعة من الخوادم ونواة برمجية تؤدي منطق الأعمال ؛
  • واجهات للتفاعل مع النظام ؛
  • وسائل التسجيل والمصادقة والترخيص للأجهزة / الأشخاص ؛
  • قاعدة بيانات تخزن البيانات التشغيلية والمؤرشفة:

Blockchain: ما الذي يجب علينا بناء PoC؟

يمكن قراءة النسخة الرسمية لما هو Hyperledger Fabric على على الانترنتباختصار ، Hyperledger Fabric عبارة عن منصة مفتوحة المصدر تسمح لك ببناء بلوكشين خاص وتنفيذ عقود ذكية تعسفية مكتوبة بلغات برمجة JS و Go. دعنا نلقي نظرة فاحصة على بنية Hyperledger Fabric ونتأكد من أن هذا نظام عالمي يحتوي فقط على مواصفات خاصة لتخزين البيانات وتسجيلها. تكمن الخصوصية في حقيقة أن البيانات ، كما هو الحال في جميع سلاسل الكتل ، يتم تخزينها في كتل يتم وضعها في blockchain فقط إذا توصل المشاركون إلى إجماع وبعد التسجيل ، لا يمكن تصحيح البيانات أو حذفها بهدوء.

معمارية نسيج هايبرليدجر

يوضح الرسم التخطيطي بنية Hyperledger Fabric:

Blockchain: ما الذي يجب علينا بناء PoC؟

المنظمات - المنظمات تحتوي على أقران ، لذلك blockchain موجود بسبب دعم المنظمات. يمكن أن تكون المنظمات المختلفة جزءًا من نفس القناة.

قناة - بنية منطقية توحد الأقران في مجموعات ، وبالتالي. تم تعيين blockchain. يمكن لـ Hyperledger Fabric معالجة العديد من سلاسل الكتل في وقت واحد باستخدام منطق أعمال مختلف.

مزود خدمات العضوية (MSP) هو المرجع المصدق (CA) لإصدار الهوية وتعيين الأدوار. لإنشاء عقدة ، تحتاج إلى التفاعل مع MSP.

العقد النظيرة - التحقق من المعاملات وتخزين blockchain وتنفيذ العقود الذكية والتفاعل مع التطبيقات. الأقران لديهم هوية (شهادة رقمية) صادرة عن MSP. على عكس شبكة Bitcoin أو Etherium ، حيث تتساوى جميع العقد ، تلعب العقد أدوارًا مختلفة في Hyperledger Fabric:

  • يمكن أن يكون الند مصادقة الأقران (EP) وتنفيذ العقود الذكية.
  • الزملاء الملتزمون (CP) - احفظ البيانات فقط في blockchain وقم بتحديث "الحالة العالمية".
  • أنكور بير (AP) - إذا شاركت عدة منظمات في blockchain ، فسيتم استخدام أقرانهم الأساسيين للتواصل فيما بينهم. يجب أن يكون لكل منظمة واحد أو أكثر من الأقران الأساسيين. بمساعدة AP ، يمكن لأي نظير في المنظمة الحصول على معلومات حول جميع الأقران في المنظمات الأخرى. تستخدم لمزامنة المعلومات بين نقاط الوصول. بروتوكول القيل والقال.
  • زعيم الند - إذا كان لدى المنظمة العديد من الأقران ، فعندئذٍ سيتلقى زعيم النظير فقط كتلًا من خدمة الطلب ويمنحها لبقية أقرانه. يمكن تعيين القائد إما بشكل ثابت أو ديناميكي من قبل أقرانه في المنظمة. يستخدم بروتوكول القيل والقال أيضًا لمزامنة معلومات القائد.

ممتلكات - الكيانات ذات القيمة المخزنة في blockchain. وبشكل أكثر تحديدًا ، هذه هي بيانات القيمة الرئيسية بتنسيق JSON. هذه هي البيانات التي يتم تسجيلها في blockchain blockchain. لديهم محفوظات مخزنة على blockchain وحالة حالية مخزنة في قاعدة بيانات "World state". يتم ملء هياكل البيانات بشكل تعسفي اعتمادًا على مهام العمل. لا توجد حقول مطلوبة ، التوصية الوحيدة هي أن الأصول يجب أن يكون لها مالك وأن تكون ذات قيمة.

دفتر الحسابات - يتكون من Blockchain blockchain وقاعدة بيانات Word state ، التي تخزن الحالة الحالية للأصول. تستخدم الدولة العالمية LevelDB أو CouchDB.

عقد الذكية - بمساعدة العقود الذكية ، يتم تنفيذ منطق الأعمال للنظام. في Hyperledger Fabric ، تسمى العقود الذكية بالرمز التسلسلي. بمساعدة من chaincode ، يتم تحديد الأصول والمعاملات عليها. في اللغة الفنية ، العقود الذكية هي وحدات برمجية مطبقة بلغات برمجة JS أو Go.

سياسة المصادقة - لكل رمز سلسلة ، يمكنك تعيين سياسات لعدد ومن تريد أن تتوقع تأكيدات للمعاملة. إذا لم يتم تعيين السياسة ، فسيكون الوضع الافتراضي هو: "يجب تأكيد المعاملة من قبل أي عضو في أي مؤسسة في القناة". أمثلة السياسة:

  • يجب تأكيد المعاملة من قبل أي مسؤول في المؤسسة ؛
  • يجب أن يتم تأكيده من قبل أي عضو أو عميل في المنظمة ؛
  • يجب تأكيد أي نظير في المنظمة.

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

تدفق الدعوة من

Blockchain: ما الذي يجب علينا بناء PoC؟

  • يتفاعل التطبيق مع Hyperledger Fabric باستخدام Go أو Node.js أو Java SDK ؛
  • ينشئ العميل معاملة tx ويرسلها إلى أقرانه المؤيدين ؛
  • يتحقق النظير من توقيع العميل ، ويكمل المعاملة ، ويرسل توقيع المصادقة مرة أخرى إلى العميل. يتم تنفيذ Chaincode فقط على النظير المصدق ، ويتم إرسال نتيجة تنفيذه إلى جميع النظراء. تسمى خوارزمية العمل هذه - إجماع PBFT (الإجماع العملي للخطأ البيزنطي). يختلف عن الكلاسيكية BFT حقيقة أن الرسالة قد تم إرسالها والتأكيد متوقع ليس من جميع المشاركين ، ولكن فقط من مجموعة معينة ؛
  • بعد أن يتلقى العميل عدد الردود المطابقة لسياسة المصادقة ، فإنه يرسل المعاملة إلى خدمة الطلب ؛
  • يشكل طلب الخدمة كتلة ويرسلها إلى جميع الزملاء الملتزمين. تضمن خدمة الطلب كتابة الكتل بالتسلسل ، مما يلغي ما يسمى بدفتر دفتر الأستاذ (انظر قسم "فوركس");
  • يتلقى الأقران الكتلة ، والتحقق من سياسة المصادقة مرة أخرى ، وكتابة الكتلة إلى blockchain ، وتغيير الحالة في قاعدة البيانات "World state".

أولئك. اتضح تقسيم الأدوار بين العقد. هذا يضمن قابلية التوسع والأمان في blockchain:

  • العقود الذكية (chaincode) تؤيد أقرانها. هذا يضمن سرية العقود الذكية ، كما لا يتم تخزينها من قبل جميع المشاركين ، ولكن فقط من خلال المصادقة على الأقران.
  • يجب أن يعمل الطلب بسرعة. يتم ضمان ذلك من خلال حقيقة أن الأمر لا يشكل سوى كتلة ويرسلها إلى مجموعة ثابتة من الأقران القياديين.
  • يقوم الزملاء الملتزمون بتخزين blockchain فقط - يمكن أن يكون هناك الكثير منهم ولا يحتاجون إلى الكثير من القوة والعمل الفوري.

المزيد من الحلول المعمارية من Hyperledger Fabric ولماذا تعمل بهذه الطريقة ولا يمكن العثور عليها هنا: أصول العمارة أو هنا: Hyperledger Fabric: نظام تشغيل مُوزَّع لشبكات البلوك تشين المسموح بها.

لذلك ، يعد Hyperledger Fabric نظامًا عالميًا حقًا يمكنك من خلاله:

  • تنفيذ منطق الأعمال التعسفي باستخدام آلية العقد الذكية ؛
  • كتابة واستقبال البيانات من قاعدة بيانات blockchain بتنسيق JSON ؛
  • منح الوصول إلى API والتحقق منه باستخدام مرجع مصدق.

الآن بعد أن حصلنا على القليل من تفاصيل Hyperledger Fabric بعيدًا عن الطريق ، دعنا أخيرًا نفعل شيئًا مفيدًا!

نشر blockchain

صياغة المشكلة

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

Blockchain: ما الذي يجب علينا بناء PoC؟

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

سحابة IBM

نقوم بإنشاء حساب في سحابة IBM. لاستخدام منصة blockchain ، يجب ترقيتها إلى Pay-As-You-Go. قد لا تكون هذه العملية سريعة ، لأن تطلب شركة IBM معلومات إضافية وتتحقق منها يدويًا. على الجانب الإيجابي ، يمكنني القول أن لدى IBM مواد تدريبية جيدة تسمح لك بنشر Hyperledger Fabric في السحابة الخاصة بهم. أعجبتني سلسلة المقالات والأمثلة التالية:

فيما يلي لقطات شاشة لمنصة IBM Blockchain. هذه ليست تعليمات لإنشاء blockchain ، ولكنها مجرد عرض توضيحي لنطاق المهمة. لذلك ، من أجل أغراضنا ، نجعل منظمة واحدة:

Blockchain: ما الذي يجب علينا بناء PoC؟

نقوم بإنشاء عقد فيه: Orderer CA ، Org1 CA ، Orderer Peer:

Blockchain: ما الذي يجب علينا بناء PoC؟

نبدأ المستخدمين:

Blockchain: ما الذي يجب علينا بناء PoC؟

قم بإنشاء قناة واسمها citcoin:

Blockchain: ما الذي يجب علينا بناء PoC؟

في جوهرها ، القناة عبارة عن blockchain ، لذلك فهي تبدأ من الكتلة الصفرية (Genesis block):

Blockchain: ما الذي يجب علينا بناء PoC؟

كتابة عقد ذكي

/*
 * Citcoin smart-contract v1.5 for Hyperledger Fabric
 * (c) Alexey Sushkov, 2019
 */
 
'use strict';
 
const { Contract } = require('fabric-contract-api');
const maxAccounts = 5;
 
class CitcoinEvents extends Contract {
 
    async instantiate(ctx) {
        console.info('instantiate');
        let emptyList = [];
        await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(emptyList)));
    }
    // Get all accounts
    async GetAccounts(ctx) {
        // Get account list:
        let accounts = '{}'
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            accounts = JSON.parse(accountsData.toString());
        } else {
            throw new Error('accounts not found');
        }
        return accountsData.toString()
    }
     // add a account object to the blockchain state identifited by their name
    async AddAccount(ctx, name, balance) {
        // this is account data:
        let account = {
            name: name,
            balance: Number(balance),       
            type: 'account',
        };
        // create account:
        await ctx.stub.putState(name, Buffer.from(JSON.stringify(account)));
 
        // Add account to list:
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            let accounts = JSON.parse(accountsData.toString());
            if (accounts.length < maxAccounts)
            {
                accounts.push(name);
                await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(accounts)));
            } else {
                throw new Error('Max accounts number reached');
            }
        } else {
            throw new Error('accounts not found');
        }
        // return  object
        return JSON.stringify(account);
    }
    // Sends money from Account to Account
    async SendFrom(ctx, fromAccount, toAccount, value) {
        // get Account from
        let fromData = await ctx.stub.getState(fromAccount);
        let from;
        if (fromData) {
            from = JSON.parse(fromData.toString());
            if (from.type !== 'account') {
                throw new Error('wrong from type');
            }   
        } else {
            throw new Error('Accout from not found');
        }
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balances
        if ((from.balance - Number(value)) >= 0 ) {
            from.balance -= Number(value);
            to.balance += Number(value);
        } else {
            throw new Error('From Account: not enought balance');          
        }
 
        await ctx.stub.putState(from.name, Buffer.from(JSON.stringify(from)));
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "SendFrom",
            from: from.name,
            to: to.name,
            balanceFrom: from.balance,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('SendFrom', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
 
    // get the state from key
    async GetState(ctx, key) {
        let data = await ctx.stub.getState(key);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
    // GetBalance   
    async GetBalance(ctx, accountName) {
        let data = await ctx.stub.getState(accountName);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
     
    // Refill own balance
    async RefillBalance(ctx, toAccount, value) {
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balance
        to.balance += Number(value);
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "RefillBalance",
            to: to.name,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('RefillBalance', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
}
module.exports = CitcoinEvents;

حدسيًا ، يجب أن يكون كل شيء واضحًا هنا:

  • هناك العديد من الوظائف (AddAccount و GetAccounts و SendFrom و GetBalance و RefillBalance) التي سيستدعيها البرنامج التجريبي باستخدام Hyperledger Fabric API.
  • تنشئ وظيفتا SendFrom و RefillBalance أحداثًا (حدثًا) سيتلقاها البرنامج التجريبي.
  • يتم استدعاء وظيفة إنشاء مثيل مرة واحدة عند إنشاء مثيل للعقد الذكي. في الواقع ، لا يتم استدعاؤه مرة واحدة ، ولكن في كل مرة يتغير إصدار العقد الذكي. لذلك ، فإن تهيئة قائمة بمصفوفة فارغة هي فكرة سيئة ، لأن الآن عند تغيير إصدار العقد الذكي ، سنفقد القائمة الحالية. لكن لا شيء ، أنا أتعلم فقط).
  • الحسابات وقائمة الحسابات (الحسابات) هي هياكل بيانات JSON. يستخدم JS لمعالجة البيانات.
  • يمكنك الحصول على القيمة الحالية للأصل عن طريق استدعاء دالة getState وتحديثها باستخدام putState.
  • عند إنشاء حساب ، يتم استدعاء وظيفة AddAccount ، حيث يتم إجراء مقارنة للحد الأقصى لعدد الحسابات في blockchain (maxAccounts = 5). وهناك دعامة (ملحوظة؟) تؤدي إلى زيادة لا نهائية في عدد الحسابات. يجب تجنب مثل هذه الأخطاء

بعد ذلك ، نقوم بتحميل العقد الذكي في القناة ونقوم بإنشائه:

Blockchain: ما الذي يجب علينا بناء PoC؟

ننظر إلى معاملة تثبيت العقد الذكي:

Blockchain: ما الذي يجب علينا بناء PoC؟

انظر التفاصيل حول قناتنا:

Blockchain: ما الذي يجب علينا بناء PoC؟

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

Blockchain: ما الذي يجب علينا بناء PoC؟

إنشاء واجهة مستخدم رسومية لمكالمات Hyperledger Fabric API

يحتوي Hyperledger Fabric على واجهة برمجة تطبيقات يمكن استخدامها من أجل:

  • إنشاء قناة
  • اتصالات الأقران للقناة ؛
  • تثبيت وإنشاء مثيل للعقود الذكية في القناة ؛
  • استدعاء المعاملات
  • طلب معلومات عن blockchain.

تطوير التطبيقات

في برنامجنا التجريبي ، سنستخدم API فقط لاستدعاء المعاملات وطلب المعلومات ، لأن. لقد قمنا بالفعل ببقية الخطوات باستخدام منصة IBM blockchain. نكتب واجهة المستخدم الرسومية باستخدام مكدس التكنولوجيا القياسي: Express.js + Vue.js + Node.js. يمكنك كتابة مقال منفصل حول كيفية البدء في إنشاء تطبيقات الويب الحديثة. سأترك هنا رابطًا لسلسلة المحاضرات التي أحببتها أكثر من غيرها: تطبيق الويب Full Stack باستخدام Vue.js & Express.js. والنتيجة هي تطبيق خادم عميل بواجهة رسومية مألوفة بأسلوب تصميم المواد من Google. تتكون واجهة برمجة تطبيقات REST بين العميل والخادم من عدة استدعاءات:

  • HyperledgerDemo / v1 / init - تهيئة blockchain ؛
  • HyperledgerDemo / v1 / accounts / list - احصل على قائمة بجميع الحسابات ؛
  • HyperledgerDemo / v1 / account؟ name = Bob & Balance = 100 - إنشاء حساب Bob ؛
  • HyperledgerDemo / v1 / info؟ account = Bob - احصل على معلومات حول حساب Bob ؛
  • HyperledgerDemo / v1 / transaction؟ from = Bob & to = Alice & volume = 2 - نقل عملتين من Bob إلى Alice ؛
  • HyperledgerDemo / v1 / disconnect - أغلق الاتصال بـ blockchain.

وصف API مع الأمثلة الموضوعة موقع ساعي البريد هو برنامج معروف لاختبار واجهة برمجة تطبيقات HTTP.

تطبيق تجريبي في Amazon cloud

تم تحميل التطبيق على أمازون لأن لا تزال شركة IBM غير قادرة على ترقية حسابي والسماح لي بإنشاء خوادم افتراضية. كيف تم ربط المجال بالكرز: www.citcoin.info. سأبقي الخادم قيد التشغيل قليلاً ، ثم أوقف تشغيله ، لأن تنخفض سنتات الإيجار ، ولم يتم إدراج عملات citcoin في البورصة بعد) أضع لقطات شاشة تجريبية في المقالة بحيث يكون منطق العمل واضحًا. يمكن للتطبيق التجريبي:

  • تهيئة blockchain ؛
  • قم بإنشاء حساب (ولكن الآن لا يمكن إنشاء حساب جديد ، لأنه تم الوصول إلى الحد الأقصى لعدد الحسابات المحددة في العقد الذكي في blockchain) ؛
  • احصل على قائمة الحسابات.
  • تحويل عملات citcoin بين Alice و Bob و Alex ؛
  • تلقي الأحداث (ولكن الآن لا توجد طريقة لإظهار الأحداث ، لذلك من أجل التبسيط ، يتم كتابتها في الواجهة أن الأحداث غير مدعومة) ؛
  • إجراءات السجل.

أولاً ، نقوم بتهيئة blockchain:

Blockchain: ما الذي يجب علينا بناء PoC؟

بعد ذلك ، نبدأ حسابنا ، لا تتعب مع الرصيد:

Blockchain: ما الذي يجب علينا بناء PoC؟

نحصل على قائمة بجميع الحسابات المتاحة:

Blockchain: ما الذي يجب علينا بناء PoC؟

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

Blockchain: ما الذي يجب علينا بناء PoC؟

في السجل ، نراقب تنفيذ المعاملات:

Blockchain: ما الذي يجب علينا بناء PoC؟

في الواقع ، مع برنامج تجريبي ، هذا كل شيء. بعد ذلك ، يمكنك رؤية معاملتنا في blockchain:

Blockchain: ما الذي يجب علينا بناء PoC؟

والقائمة العامة للمعاملات:

Blockchain: ما الذي يجب علينا بناء PoC؟

بهذا نكون قد أكملنا بنجاح تنفيذ PoC لإنشاء شبكة Citcoin. ما الذي يجب فعله أيضًا لجعل Citcoin شبكة كاملة لتحويل العملات؟ قليل جدا:

  • في مرحلة إنشاء حساب ، قم بتنفيذ إنشاء مفتاح خاص / عام. يجب أن يتم تخزين المفتاح الخاص بواسطة حساب المستخدم ، وهو عام على blockchain.
  • قم بتحويل العملات ، حيث لا يتم استخدام اسم ، ولكن يتم استخدام مفتاح عام لتحديد هوية المستخدم.
  • تشفير المعاملات التي تنتقل من المستخدم إلى الخادم بمفتاحه الخاص.

اختتام

لقد قمنا بتنفيذ شبكة Citcoin بالوظائف التالية: إضافة حساب ، والحصول على رصيد ، وتجديد حسابك ، وتحويل العملات المعدنية من حساب إلى آخر. إذن ما الذي كلفنا بناء PoC؟

  • من الضروري دراسة blockchain بشكل عام و Hyperledger Fabric بشكل خاص ؛
  • تعرف على كيفية استخدام IBM أو Amazon cloud ؛
  • تعلم لغة برمجة JS وبعض أطر عمل الويب ؛
  • إذا كانت هناك حاجة إلى تخزين بعض البيانات ليس في blockchain ، ولكن في قاعدة بيانات منفصلة ، فتعلم كيفية التكامل ، على سبيل المثال ، مع PostgreSQL ؛
  • وأخيرًا وليس آخرًا - بدون معرفة نظام Linux في العالم الحديث ، لا مكان!)

بالطبع ، ليس علم الصواريخ ، لكن عليك أن تتعرق!

مصادر على جيثب

وضعت المصادر GitHub جيثب:. وصف موجز للمستودع:
فهرس "الخادم»- خادم Node.js
فهرس "زبون»- عميل Node.js
فهرس "سلسلة كتلة»(بالطبع ، قيم المعلمات والمفاتيح لا تعمل وتعطى على سبيل المثال فقط):

  • عقد - مصدر عقد ذكي
  • المحفظة - مفاتيح المستخدم لاستخدام Hyperledger Fabric API.
  • * .cds - إصدارات مجمعة من العقود الذكية
  • * ملفات .json - أمثلة لملفات التكوين الخاصة باستخدام Hyperledger Fabric API

إنها البداية فقط!

المصدر: www.habr.com

إضافة تعليق