Блокчейн: қандай PoC құруымыз керек?

Көздеріңіз қорқып, қолдарыңыз қышиды!

Алдыңғы мақалаларда біз блокчейндер құрастырылатын технологияларды қарастырдық (Блокчейнді не құруымыз керек?) және олардың көмегімен жүзеге асырылуы мүмкін жағдайлар (Неліктен біз істі құруымыз керек?). Өз қолыңызбен жұмыс жасайтын кез келді! Ұшқыштар мен PoC (концепция дәлелі) енгізу үшін мен бұлттарды пайдаланғанды ​​қалаймын, өйткені... оларға әлемнің кез келген нүктесінен қол жеткізуге болады және көбінесе қоршаған ортаны жалықтыратын орнатуға уақыт жоғалтудың қажеті жоқ, өйткені Алдын ала орнатылған конфигурациялар бар. Сонымен, қарапайым нәрсе жасайық, мысалы, қатысушылар арасында монеталарды тасымалдауға арналған желі және оны қарапайым Bitcoin деп атаймыз. Ол үшін біз IBM бұлтын және Hyperledger Fabric әмбебап блокчейнін қолданамыз. Алдымен Hyperledger Fabric неліктен әмбебап блокчейн деп аталатынын анықтайық?

Блокчейн: қандай PoC құруымыз керек?

Hyperledger Fabric - әмбебап блокчейн

Жалпы айтқанда, әмбебап ақпараттық жүйе:

  • Іскерлік логиканы орындайтын серверлер жиынтығы және бағдарламалық жасақтама өзегі;
  • Жүйемен өзара әрекеттесу үшін интерфейстер;
  • Құрылғыларды/адамдарды тіркеу, аутентификациялау және авторизациялау құралдары;
  • Операциялық және мұрағаттық мәліметтерді сақтайтын деректер қоры:

Блокчейн: қандай PoC құруымыз керек?

Hyperledger Fabric дегеннің ресми нұсқасын мына жерден оқуға болады сайт, және қысқаша айтқанда, Hyperledger Fabric - бұл жеке блокчейндерді құруға және JS және Go бағдарламалау тілдерінде жазылған ерікті смарт келісімшарттарды орындауға мүмкіндік беретін ашық бастапқы платформа. Hyperledger Fabric архитектурасын егжей-тегжейлі қарастырайық және бұл деректерді сақтауға және жазуға арналған ерекшеліктері бар әмбебап жүйе екеніне көз жеткізіңіз. Ерекшелік мынада: деректер, барлық блокчейндердегі сияқты, қатысушылар консенсусқа келген жағдайда ғана блокчейнге орналастырылатын блоктарда сақталады және деректерді жазғаннан кейін тыныш түзету немесе жою мүмкін емес.

Hyperledger Fabric Architecture

Диаграмма Hyperledger Fabric архитектурасын көрсетеді:

Блокчейн: қандай PoC құруымыз керек?

ұйымдар — ұйымдарда құрдастар бар, яғни. блокчейн ұйымдардың қолдауының арқасында бар. Әр түрлі ұйымдар бір арнаның бөлігі бола алады.

арна — құрдастарды топтарға біріктіретін логикалық құрылым, яғни. блокчейн көрсетілген. Hyperledger Fabric әртүрлі бизнес логикасы бар бірнеше блокчейндерді бір уақытта өңдей алады.

Мүшелік қызметтерін жеткізуші (MSP) жеке куәлікті беруге және рөлдерді тағайындауға арналған CA (Сертификат орталығы) болып табылады. Түйін жасау үшін MSP-мен әрекеттесу керек.

Бірдей түйіндер — транзакцияларды тексеру, блокчейнді сақтау, смарт келісімшарттарды орындау және қолданбалармен әрекеттесу. Құрдастардың жеке басын куәландыратын құжаты (цифрлық сертификат) бар, оны MSP береді. Барлық түйіндердің құқықтары тең болатын Bitcoin немесе Etherium желісінен айырмашылығы, Hyperledger Fabric түйіндері әртүрлі рөлдерді атқарады:

  • Құрдас шығар мақұлдаушы құрдас (EP) және смарт келісімшарттарды орындаңыз.
  • Құрбысы (CP) - тек блокчейндегі деректерді сақтаңыз және «Әлемдік күйді» жаңартыңыз.
  • Anchor Peer (AP) - блокчейнге бірнеше ұйым қатысса, олардың арасындағы байланыс үшін анкерлік әріптестер пайдаланылады. Әрбір ұйымның бір немесе бірнеше анкерлік әріптестері болуы керек. AP пайдалану арқылы ұйымдағы кез келген құрдас басқа ұйымдардағы барлық әріптестер туралы ақпаратты ала алады. AP арасында ақпаратты синхрондау үшін қолданылады өсек протоколы.
  • Көшбасшы құрдасы — егер ұйымның бірнеше құрдастары болса, онда «Тапсырыс беру» қызметінен тек әріптестің көшбасшысы ғана блоктарды алады және оларды басқа әріптестеріне береді. Көшбасшыны ұйымдағы әріптестер статикалық немесе динамикалық түрде таңдауы мүмкін. Өсек протоколы көшбасшылар туралы ақпаратты синхрондау үшін де қолданылады.

мүлік — құндылығы бар және блокчейнде сақталатын нысандар. Нақтырақ айтқанда, бұл JSON пішіміндегі кілт-мән деректері. Дәл осы деректер Blockchain жүйесінде жазылған. Олардың блокчейнде сақталатын тарихы және «Әлемдік күй» дерекқорында сақталатын ағымдағы күйі бар. Деректер құрылымдары бизнес тапсырмаларына байланысты ерікті түрде толтырылады. Міндетті өрістер жоқ, жалғыз ұсыныс - активтердің иесі болуы және құнды болуы керек.

Леджер — активтердің ағымдағы күйін сақтайтын Blockchain және Word мемлекеттік деректер базасынан тұрады. Әлемдік мемлекет LevelDB немесе CouchDB пайдаланады.

Ақылды келісім — смарт келісім-шарттарды пайдалана отырып, жүйенің іскерлік логикасы жүзеге асырылады. Hyperledger Fabric-те смарт келісім-шарттар тізбекті код деп аталады. Тізбек кодының көмегімен активтер мен олар бойынша транзакциялар көрсетіледі. Техникалық тілде смарт келісім-шарттар JS немесе Go бағдарламалау тілдерінде жүзеге асырылатын бағдарламалық модульдер болып табылады.

Қолдау саясаты — әрбір тізбекті код үшін транзакция үшін қанша растау күтілетіні және кімнен болатыны туралы саясатты орнатуға болады. Саясат орнатылмаған болса, әдепкі: «транзакцияны арнадағы кез келген ұйымның кез келген мүшесі растауы керек». Саясат мысалдары:

  • Мәмілені ұйымның кез келген әкімшісі бекітуі керек;
  • Ұйымның кез келген мүшесі немесе клиенті растауы керек;
  • Кез келген серіктес ұйым растауы керек.

Тапсырыс беру қызметі — транзакцияларды блоктарға жинақтайды және оларды арнадағы әріптестерге жібереді. Желідегі барлық әріптестерге хабарламалардың жеткізілуіне кепілдік береді. Өнеркәсіптік жүйелер үшін қолданылады Кафка хабарлама брокері, әзірлеу және тестілеу үшін Solo.

CallFlow

Блокчейн: қандай PoC құруымыз керек?

  • Қолданба Hyperledger Fabric-пен Go, Node.js немесе Java SDK арқылы байланысады;
  • Клиент tx транзакциясын жасайды және оны индоссанттарға жібереді;
  • Тең клиенттің қолтаңбасын тексереді, транзакцияны аяқтайды және растау қолтаңбасын клиентке қайта жібереді. Chaincode тек индоссантта орындалады және оның орындалу нәтижесі барлық әріптестерге жіберіледі. Бұл жұмыс алгоритмі PBFT (Practical Vizantine Fault Tolerant) консенсус деп аталады. Ерекшеленеді классикалық BFT хабардың жіберілгендігі және растау барлық қатысушылардан емес, тек белгілі бір жиынтықтан күтілетіндігі;
  • Клиент индоссамент саясатына сәйкес келетін жауаптар санын алғаннан кейін транзакцияны Тапсырыс беру қызметіне жібереді;
  • Тапсырыс беру қызметі блокты жасайды және оны барлық серіктестерге жібереді. Тапсырыс беру қызметі блоктардың дәйекті жазылуын қамтамасыз етеді, бұл бухгалтерлік шанышқы деп аталатынды болдырмайды («Шанышқылар» бөлімін қараңыз);
  • Құрбылар блок алады, мақұлдау саясатын қайтадан тексереді, блокты блокчейнге жазып, «Әлемдік күй» ДҚ күйін өзгертеді.

Анау. Бұл түйіндер арасындағы рөлдердің бөлінуіне әкеледі. Бұл блокчейннің масштабталатын және қауіпсіз болуын қамтамасыз етеді:

  • Ақылды келісім-шарттар (тізбекті код) әріптестерді растайды. Бұл смарт келісімшарттардың құпиялылығын қамтамасыз етеді, өйткені ол барлық қатысушыларда сақталмайды, тек индоссаторлар арқылы ғана сақталады.
  • Тапсырыс беру жылдам жұмыс істеуі керек. Бұл Тапсырыс берудің тек блокты құрайтындығы және оны көшбасшы теңдестерінің бекітілген жиынтығына жіберуімен қамтамасыз етіледі.
  • Жасалған әріптестер тек блокчейнді сақтайды - олардың көпшілігі болуы мүмкін және олар көп қуат пен жылдам жұмысты қажет етпейді.

Hyperledger Fabric архитектуралық шешімдері және оның неге осылай жұмыс істейтіні және басқаша еместігі туралы қосымша мәліметтерді мына жерден табуға болады: Архитектураның шығу тегі немесе мұнда: Hyperledger Fabric: Рұқсат етілген блокчейндерге арналған таратылған операциялық жүйе.

Сонымен, Hyperledger Fabric шын мәнінде әмбебап жүйе болып табылады, оның көмегімен сіз:

  • Ақылды келісім-шарт механизмін пайдалана отырып, ерікті бизнес логикасын жүзеге асыру;
  • JSON пішімінде блокчейн дерекқорынан деректерді жазу және алу;
  • Сертификаттау орталығы арқылы API рұқсатын беріңіз және растаңыз.

Енді біз Hyperledger Fabric ерекшеліктері туралы аздап түсіндік, соңында пайдалы нәрсе жасайық!

Блокчейнді қолдану

Мәселенің тұжырымы

Тапсырма Citcoin желісін келесі функциялармен жүзеге асыру болып табылады: шот жасау, теңгерім алу, шотыңызды толтыру, бір шоттан екінші шотқа тиындарды аудару. Нысан үлгісін салайық, біз оны әрі қарай смарт келісімшартта жүзеге асырамыз. Сонымен, бізде атаулары бойынша анықталған және балансы мен шоттар тізімі бар шоттар болады. Тіркелгілер мен шоттар тізімі Hyperledger Fabric активтері тұрғысынан. Тиісінше, олардың тарихы мен қазіргі күйі бар. Мен мұны анық салуға тырысамын:

Блокчейн: қандай PoC құруымыз керек?

Жоғарғы сандар «Әлемдік күй» дерекқорында сақталған ағымдағы күй болып табылады. Олардың астында блокчейнде сақталған тарихты көрсететін сандар бар. Активтердің ағымдағы жағдайы операциялармен өзгереді. Актив тек тұтастай өзгереді, сондықтан транзакция нәтижесінде жаңа нысан жасалады және активтің ағымдағы құны тарихқа өтеді.

IBM Cloud

ішінде тіркелгі жасаймыз IBM бұлты. Блокчейн платформасын пайдалану үшін оны «Барған сайын төлеу» нұсқасына жаңарту керек. Бұл процесс жылдам болмауы мүмкін, себебі... IBM қосымша ақпаратты сұрайды және оны қолмен тексереді. Жағымды ескерту ретінде IBM-де Hyperledger Fabric-ті бұлтқа орналастыруға мүмкіндік беретін жақсы оқу материалдары бар деп айта аламын. Маған келесі мақалалар мен мысалдар сериясы ұнады:

Төменде IBM Blockchain платформасының скриншоттары берілген. Бұл блокчейнді құру туралы нұсқаулық емес, жай ғана тапсырманың көлемін көрсету. Сонымен, өз мақсаттарымыз үшін біз бір Ұйымды жасаймыз:

Блокчейн: қандай PoC құруымыз керек?

Біз онда түйіндерді жасаймыз: Тапсырыс беруші CA, Org1 CA, Orderer Peer:

Блокчейн: қандай PoC құруымыз керек?

Біз пайдаланушыларды жасаймыз:

Блокчейн: қандай PoC құруымыз керек?

Арна жасаңыз және оны циткоин деп атаңыз:

Блокчейн: қандай PoC құруымыз керек?

Негізінде арна блокчейн болып табылады, сондықтан ол блок нөлден басталады (Genesis блогы):

Блокчейн: қандай 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;

Интуитивті түрде мұнда бәрі анық болуы керек:

  • Демо-бағдарлама Hyperledger Fabric API арқылы шақыратын бірнеше функциялар (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) бар.
  • SendFrom және RefillBalance функциялары демонстрациялық бағдарлама алатын оқиғаларды жасайды.
  • Инстанция функциясы смарт келісім-шарт жасалған кезде бір рет шақырылады. Шын мәнінде, ол бір рет емес, смарт келісімшарт нұсқасы өзгерген сайын шақырылады. Сондықтан тізімді бос массивпен инициализациялау жаман идея, өйткені Енді біз смарт келісімшарттың нұсқасын өзгерткенде, біз ағымдағы тізімді жоғалтамыз. Бірақ бәрі жақсы, мен жаңа ғана үйреніп жатырмын).
  • Тіркелгілер мен тіркелгілер тізімі JSON деректер құрылымдары болып табылады. JS деректермен манипуляциялау үшін қолданылады.
  • Активтің ағымдағы мәнін getState функциясын шақыру арқылы алуға және оны putState арқылы жаңартуға болады.
  • Тіркелгіні жасау кезінде AddAccount функциясы шақырылады, онда блокчейндегі тіркелгілердің максималды санына салыстыру жүргізіледі (maxAccounts = 5). Ал мұнда шот санының шексіз өсуіне әкелетін кептеліс (байқадыңыз ба?) бар. Мұндай қателіктерден аулақ болу керек)

Әрі қарай, біз смарт келісімшартты арнаға жүктеп, оны іске қосамыз:

Блокчейн: қандай PoC құруымыз керек?

Smart Contract орнату транзакциясын қарастырайық:

Блокчейн: қандай PoC құруымыз керек?

Арнамыздың мәліметтеріне тоқталайық:

Блокчейн: қандай PoC құруымыз керек?

Нәтижесінде біз IBM бұлтындағы блокчейн желісінің келесі диаграммасын аламыз. Диаграмма сонымен қатар виртуалды сервердегі Amazon бұлтында жұмыс істейтін демонстрациялық бағдарламаны көрсетеді (бұл туралы келесі бөлімде толығырақ):

Блокчейн: қандай PoC құруымыз керек?

Hyperledger Fabric API қоңыраулары үшін GUI жасау

Hyperledger Fabric-те келесі әрекеттерді орындауға болатын API бар:

  • Арна құру;
  • Бір арнаға қосылымдар;
  • Арнада смарт келісім-шарттарды орнату және құру;
  • Шақыру операциялары;
  • Блокчейн туралы ақпаратты сұраңыз.

Қолданбаларды әзірлеу

Біздің демо-бағдарламада біз API-ны транзакцияларды шақыру және ақпаратты сұрау үшін ғана қолданамыз, өйткені Біз IBM blockchain платформасын пайдаланып қалған қадамдарды аяқтадық. Біз стандартты технология стегі арқылы GUI жазамыз: Express.js + Vue.js + Node.js. Заманауи веб-қосымшаларды құруды бастау туралы жеке мақала жазуға болады. Мұнда мен өзіме ұнаған дәрістер топтамасының сілтемесін қалдырамын: Vue.js & Express.js көмегімен толық стек веб-бағдарламасы. Нәтиже – Google-дың Материалдық дизайн стиліндегі таныс графикалық интерфейсі бар клиент-сервер қолданбасы. Клиент пен сервер арасындағы REST API бірнеше қоңыраулардан тұрады:

  • HyperledgerDemo/v1/init - блокчейнді инициализациялау;
  • 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 — Бобтан Алисаға екі тиын аудару;
  • HyperledgerDemo/v1/disconnect - блокчейнге қосылымды жабыңыз.

Қосылған мысалдармен API сипаттамасы Пошташы сайты - HTTP API тестілеуге арналған танымал бағдарлама.

Amazon бұлтындағы демо қолданбасы

Мен қолданбаны Amazon-ға жүктеп салдым, себебі... IBM әлі тіркелгімді жаңарта алмады және виртуалды серверлерді жасауға рұқсат бере алмады. Доменге шиені қалай қосуға болады: www.citcoin.info. Мен серверді біраз уақыт қосулы ұстаймын, содан кейін оны өшіремін, себебі... жалға алу үшін цент тамшылап жатыр, ал циткоин монеталары әлі қор биржасында тізімде жоқ) Жұмыстың логикасы түсінікті болуы үшін демонстрацияның скриншоттарын мақалаға қосып отырмын. Демо қолданбасы мүмкін:

  • Блокчейнді инициализациялау;
  • Тіркелгі жасау (бірақ енді сіз жаңа тіркелгі жасай алмайсыз, өйткені блокчейнде смарт келісімде көрсетілген тіркелгілердің ең көп санына жетті);
  • Есептік жазбалар тізімін алу;
  • Алиса, Боб және Алекс арасындағы циткоин монеталарын аударыңыз;
  • Оқиғаларды қабылдау (бірақ қазір оқиғаларды көрсету мүмкіндігі жоқ, сондықтан қарапайымдылық үшін интерфейс оқиғаларға қолдау көрсетілмейтінін айтады);
  • Әрекеттерді тіркеу.

Алдымен біз блокчейнді инициализациялаймыз:

Блокчейн: қандай PoC құруымыз керек?

Содан кейін біз есептік жазбамызды жасаймыз, теңгеріммен уақытты босқа өткізбейміз:

Блокчейн: қандай PoC құруымыз керек?

Біз барлық қолжетімді тіркелгілердің тізімін аламыз:

Блокчейн: қандай PoC құруымыз керек?

Біз жіберуші мен алушыны таңдап, олардың балансын аламыз. Егер жіберуші мен алушы бірдей болса, оның шоты толтырылады:

Блокчейн: қандай PoC құруымыз керек?

Журналда біз транзакциялардың орындалуын бақылаймыз:

Блокчейн: қандай PoC құруымыз керек?

Шын мәнінде, мұның бәрі демо-бағдарламада. Төменде блокчейндегі транзакциямызды көре аласыз:

Блокчейн: қандай PoC құруымыз керек?

Ал транзакциялардың жалпы тізімі:

Блокчейн: қандай PoC құруымыз керек?

Осы арқылы біз Citcoin желісін құру үшін PoC енгізуді сәтті аяқтадық. Citcoin монеталарды тасымалдаудың толыққанды желісіне айналуы үшін тағы не істеу керек? Кішкене ғана:

  • Тіркелгіні жасау кезеңінде жеке/ашық кілтті генерациялауды жүзеге асырыңыз. Жеке кілт тіркелгі пайдаланушысында сақталуы керек, ашық кілт блокчейнде сақталуы керек.
  • Пайдаланушыны сәйкестендіру үшін атау емес, ашық кілт пайдаланылатын монета аударымын жасаңыз.
  • Пайдаланушыдан серверге өтетін транзакцияларды оның жеке кілтімен шифрлаңыз.

қорытынды

Біз Citcoin желісін келесі функциялармен іске асырдық: шот қосу, теңгерім алу, шотыңызды толтыру, бір шоттан екінші шотқа монеталарды аудару. Сонымен, бізге PoC салу қаншаға кетті?

  • Жалпы блокчейнді және атап айтқанда Hyperledger Fabric-ті зерттеу керек;
  • IBM немесе Amazon бұлттарын пайдалануды үйреніңіз;
  • JS бағдарламалау тілін және кейбір веб фреймворкті үйреніңіз;
  • Егер кейбір деректерді блокчейнде емес, бөлек дерекқорда сақтау қажет болса, онда, мысалы, PostgreSQL-пен біріктіруді үйреніңіз;
  • Соңғысы, бірақ кем дегенде - сіз Linux-ті білмей, қазіргі әлемде өмір сүре алмайсыз!)

Әрине, бұл зымыран ғылымы емес, бірақ сізге көп жұмыс істеу керек!

GitHub сайтындағы дереккөздер

Дереккөздер киінді GitHub. Репозиторийдің қысқаша сипаттамасы:
Каталог «сервер» — Node.js сервері
Каталог «клиент» — Node.js клиенті
Каталог «blockchain(параметр мәндері мен кілттері, әрине, жұмыс істемейді және тек мысал ретінде берілген):

  • келісімшарт — смарт келісімшарттың бастапқы коды
  • әмиян — Hyperledger Fabric API пайдалануға арналған пайдаланушы кілттері.
  • *.cds – смарт келісімшарттардың құрастырылған нұсқалары
  • *.json файлдары - Hyperledger Fabric API пайдалану үшін конфигурация файлдарының мысалдары

Бұл тек бастамасы ғана!

Ақпарат көзі: www.habr.com

пікір қалдыру