Blockchain: bir PoC nə qurmalıyıq?

Gözlər qorxur və əllər qaşınır!

Əvvəlki məqalələrdə biz blokçeynlərin qurulduğu texnologiyalardan bəhs etdik (Blockchain nə qurmalıyıq?) və onların köməyi ilə həyata keçirilə bilən hallar (Dava qurmaq bizə nəyə başa gəlir?). Əllərinizlə işləməyin vaxtıdır! Pilotların və PoC (Concept Proof) tətbiqi üçün mən buludlardan istifadə etməyi üstün tuturam, çünki. dünyanın istənilən yerindən çıxışı var və çox vaxt ətraf mühitin yorucu quraşdırılmasına vaxt itirməyə ehtiyac yoxdur, çünki. Əvvəlcədən təyin edilmiş konfiqurasiyalar var. Beləliklə, sadə bir şey edək, məsələn, iştirakçılar arasında sikkələrin ötürülməsi şəbəkəsi və onu təvazökarlıqla Citcoin adlandıraq. Bunun üçün biz IBM buludundan və Hyperledger Fabric universal blokçeynindən istifadə edəcəyik. Əvvəlcə Hyperledger Fabric-in niyə universal blokçeyn adlandırıldığını anlayaq?

Blockchain: bir PoC nə qurmalıyıq?

Hyperledger Fabric - Universal Blockchain

Ümumiyyətlə, universal informasiya sistemi:

  • Biznes məntiqini yerinə yetirən serverlər dəsti və proqram nüvəsi;
  • Sistemlə qarşılıqlı əlaqə üçün interfeyslər;
  • Cihazların / insanların qeydiyyatı, autentifikasiyası və avtorizasiyası üçün vasitələr;
  • Operativ və arxivləşdirilmiş məlumatları saxlayan verilənlər bazası:

Blockchain: bir PoC nə qurmalıyıq?

Hyperledger Fabric-in rəsmi versiyasını buradan oxuya bilərsiniz Online, və qısacası, Hyperledger Fabric, şəxsi blokçeynlər qurmağa və JS və Go proqramlaşdırma dillərində yazılmış ixtiyari ağıllı müqavilələri icra etməyə imkan verən açıq mənbə platformasıdır. Gəlin Hyperledger Fabric arxitekturasına daha yaxından nəzər salaq və əmin olun ki, bu, yalnız məlumatların saxlanması və qeyd edilməsi üçün xüsusiyyətləri olan universal bir sistemdir. Spesifiklik ondan ibarətdir ki, məlumat, bütün blokçeynlərdə olduğu kimi, blokçeyndə yerləşdirilən bloklarda saxlanılır, yalnız iştirakçılar konsensusa çatdıqda və qeyd edildikdən sonra məlumatları sakitcə düzəltmək və ya silmək mümkün deyil.

Hyperledger Fabric Architecture

Diaqram Hyperledger Fabric arxitekturasını göstərir:

Blockchain: bir PoC nə qurmalıyıq?

Təşkilatlar - təşkilatlar həmyaşıdları ehtiva edir, yəni blokçeyn təşkilatların dəstəyi sayəsində mövcuddur. Fərqli təşkilatlar eyni kanalın bir hissəsi ola bilər.

Kanal - həmyaşıdları qruplara birləşdirən məntiqi quruluş, beləliklə. blokçeyn qurulub. Hyperledger Fabric eyni vaxtda müxtəlif biznes məntiqi ilə birdən çox blokçeynləri emal edə bilər.

Üzvlük Xidmətləri Provayderi (MSP) şəxsiyyətin verilməsi və rolların təyin edilməsi üçün CA (Sertifikat Təşkilatı)dır. Bir node yaratmaq üçün MSP ilə qarşılıqlı əlaqə qurmalısınız.

Peer qovşaqları — tranzaksiyaları yoxlayın, blokçeyni saxlayın, ağıllı müqavilələr yerinə yetirin və tətbiqlərlə əlaqə saxlayın. Həmyaşıdların MSP tərəfindən verilmiş şəxsiyyəti (rəqəmsal sertifikat) var. Bütün qovşaqların bərabər olduğu Bitcoin və ya Etherium şəbəkəsindən fərqli olaraq, qovşaqlar Hyperledger Fabric-də fərqli rol oynayır:

  • Həmyaşıd ola bilər dəstəkləyən həmyaşıd (EP) və ağıllı müqavilələr icra edin.
  • Təhlükəli həmyaşıd (CP) - yalnız blokçeynində məlumatları yadda saxlayın və "Dünya vəziyyətini" yeniləyin.
  • Anchor Peer (AP) - əgər bir neçə təşkilat blokçeynində iştirak edirsə, onlar arasında əlaqə yaratmaq üçün anker həmyaşıdlarından istifadə olunur. Hər bir təşkilatın bir və ya bir neçə lövbər həmyaşıdı olmalıdır. AP-nin köməyi ilə bir təşkilatdakı hər bir həmyaşıd digər təşkilatlardakı bütün həmyaşıdlar haqqında məlumat əldə edə bilər. AP-lər arasında məlumatı sinxronlaşdırmaq üçün istifadə olunur. qeybət protokolu.
  • Lider Peer - təşkilatın bir neçə həmyaşıdı varsa, onda yalnız həmyaşıdın lideri Sifariş xidmətindən bloklar alacaq və qalan həmyaşıdlarına verəcəkdir. Lider təşkilatdakı həmyaşıdları tərəfindən statik və ya dinamik olaraq təyin edilə bilər. Qeybət protokolu həm də lider məlumatlarını sinxronlaşdırmaq üçün istifadə olunur.

Aktiv — blokçeynində saxlanılan dəyər obyektləri. Daha dəqiq desək, bu JSON formatında açar-dəyər datasıdır. Məhz bu məlumatlar Blockchain blokçeynində qeyd olunur. Onların blokçeynində saxlanılan tarixçəsi və “Dünya vəziyyəti” verilənlər bazasında saxlanılan cari vəziyyət var. Məlumat strukturları biznes tapşırıqlarından asılı olaraq özbaşına doldurulur. Tələb olunan sahələr yoxdur, yeganə tövsiyə aktivlərin sahibinin olması və dəyərli olmasıdır.

Ledger - aktivlərin cari vəziyyətini saxlayan Blockchain blokçeynindən və Word dövlət məlumat bazasından ibarətdir. Dünya dövləti LevelDB və ya CouchDB istifadə edir.

Ağıllı müqavilə — ağıllı müqavilələrin köməyi ilə sistemin biznes məntiqi həyata keçirilir. Hyperledger Fabric-də ağıllı müqavilələr zəncir kodu adlanır. Zəncir kodunun köməyi ilə aktivlər və onların üzərindəki əməliyyatlar dəqiqləşdirilir. Texniki mənada ağıllı müqavilələr JS və ya Go proqramlaşdırma dillərində həyata keçirilən proqram modullarıdır.

Təsdiqləmə siyasəti - hər bir zəncir kodu üçün, əməliyyat üçün təsdiqləri gözləməli olduğunuz neçə və kimdən lazım olduğuna dair siyasətlər təyin edə bilərsiniz. Siyasət təyin edilməyibsə, defolt olaraq belədir: “sövdələşmə kanaldakı hər hansı təşkilatın hər hansı üzvü tərəfindən təsdiqlənməlidir”. Siyasət nümunələri:

  • Əməliyyat təşkilatın hər hansı bir inzibatçısı tərəfindən təsdiqlənməlidir;
  • Təşkilatın hər hansı üzvü və ya müştərisi tərəfindən təsdiq edilməlidir;
  • Təşkilatın hər hansı həmyaşıdını təsdiqləməlidir.

Sifariş xidməti - əməliyyatları bloklara yığır və kanaldakı həmyaşıdlarına göndərir. Mesajın şəbəkədəki bütün həmyaşıdlarına çatdırılmasını təmin edir. Sənaye sistemləri üçün istifadə olunur Kafka mesaj brokeri, inkişaf və sınaq üçün solo.

zəng axını

Blockchain: bir PoC nə qurmalıyıq?

  • Tətbiq Go, Node.js və ya Java SDK istifadə edərək Hyperledger Fabric ilə qarşılıqlı əlaqə yaradır;
  • Müştəri tx əməliyyatı yaradır və onu təsdiq edən həmyaşıdlarına göndərir;
  • Peer müştərinin imzasını yoxlayır, əməliyyatı tamamlayır və təsdiq imzasını müştəriyə geri göndərir. Chaincode yalnız təsdiqləyici həmyaşıdda icra olunur və onun icrasının nəticəsi bütün həmyaşıdlara göndərilir. Belə bir iş alqoritmi deyilir - PBFT (Praktik Bizans Fault Tolerant) konsensus. -dən fərqlənir klassik BFT mesajın göndərilməsi və təsdiqin bütün iştirakçılardan deyil, yalnız müəyyən dəstdən gözlənilməsi;
  • Müştəri indossament siyasətinə uyğun gələn cavabların sayını aldıqdan sonra əməliyyatı Sifariş xidmətinə göndərir;
  • Sifariş xidməti blok təşkil edir və onu bütün öhdəlik götürən həmyaşıdlarına göndərir. Sifariş xidməti blokların ardıcıl olaraq yazılmasını təmin edir, bu da sözdə kitab çəngəlini aradan qaldırır ("Çəngəllər" bölməsinə baxın);
  • Həmyaşıdlar bloku alır, təsdiqləmə siyasətini yenidən yoxlayır, bloku blokçeynə yazır və “Dünya vəziyyəti” DB-də vəziyyəti dəyişir.

Bunlar. qovşaqlar arasında rolların bölünməsi ortaya çıxır. Bu, blockchain-in miqyasını və təhlükəsizliyini təmin edir:

  • Ağıllı müqavilələr (zəncir kodu) həmyaşıdları təsdiqləyir. Bu, ağıllı müqavilələrin məxfiliyini təmin edir o, bütün iştirakçılar tərəfindən deyil, yalnız həmyaşıdları tərəfindən təsdiqlənir.
  • Sifariş tez işləməlidir. Bu, Sifarişin yalnız bir blok təşkil etməsi və onu sabit lider həmyaşıdlarına göndərməsi ilə təmin edilir.
  • Təhlükəli həmyaşıdlar yalnız blokçeyni saxlayır - onların çoxu ola bilər və onlar çox güc və ani iş tələb etmir.

Hyperledger Fabric-in daha çox memarlıq həlləri və niyə bu şəkildə işləyir və başqa cür deyil, burada tapa bilərsiniz: Memarlığın mənşəyi və ya burada: Hyperledger Fabric: İcazəli Blockchainlər üçün Paylanmış Əməliyyat Sistemi.

Beləliklə, Hyperledger Fabric həqiqətən universal bir sistemdir və onun köməyi ilə:

  • Ağıllı müqavilə mexanizmindən istifadə edərək ixtiyari biznes məntiqini həyata keçirmək;
  • Blockchain verilənlər bazasından JSON formatında məlumat yazmaq və qəbul etmək;
  • Sertifikat Orqanından istifadə edərək API girişini verin və doğrulayın.

İndi Hyperledger Fabric-in bəzi xüsusiyyətlərini əldən verdik, gəlin nəhayət faydalı bir şey edək!

Blockchain-in tətbiqi

Problem problemi

Tapşırıq Citcoin şəbəkəsini aşağıdakı funksiyalarla həyata keçirməkdir: hesab yaratmaq, balans əldə etmək, hesabı artırmaq, bir hesabdan digərinə pul köçürmək. Gəlin daha ağıllı bir müqavilədə həyata keçirəcəyimiz bir obyekt modelini çəkək. Beləliklə, adlar (ad) ilə müəyyən edilmiş və balansı (balans) və hesabların siyahısını ehtiva edən hesablarımız olacaq. Hesablar və hesabların siyahısı Hyperledger Fabric aktivləri baxımındandır. Müvafiq olaraq, onların tarixi və indiki vəziyyəti var. Mən onu vizual şəkildə çəkməyə çalışacağam:

Blockchain: bir PoC nə qurmalıyıq?

Üst rəqəmlər "Dünya vəziyyəti" verilənlər bazasında saxlanılan cari vəziyyətdir. Onların altında blokçeynində saxlanılan tarixi göstərən rəqəmlər var. Aktivlərin cari vəziyyəti əməliyyatlarla dəyişdirilir. Aktiv yalnız bütövlükdə dəyişir, ona görə də əməliyyat nəticəsində yeni obyekt yaradılır və aktivin cari dəyəri tarixə keçir.

IBM Cloud

-də hesab yaradırıq IBM bulud. Blockchain platformasından istifadə etmək üçün o, Pay-As-You-Go-ya yüksəldilməlidir. Bu proses sürətli olmaya bilər, çünki IBM əlavə məlumat tələb edir və onu əl ilə yoxlayır. Müsbət tərəfdən deyə bilərəm ki, IBM-in buludlarında Hyperledger Fabric-i yerləşdirməyə imkan verən yaxşı təlim materialları var. Aşağıdakı məqalələr və nümunələr silsiləsi xoşuma gəldi:

Aşağıdakılar IBM Blockchain platformasının ekran görüntüləridir. Bu, blokçeyn yaratmaq üçün təlimat deyil, sadəcə tapşırığın əhatə dairəsinin nümayişidir. Beləliklə, məqsədlərimiz üçün bir Təşkilat edirik:

Blockchain: bir PoC nə qurmalıyıq?

Biz orada qovşaqlar yaradırıq: Sifarişçi CA, Org1 CA, Sifarişçi Peer:

Blockchain: bir PoC nə qurmalıyıq?

İstifadəçilərə başlayırıq:

Blockchain: bir PoC nə qurmalıyıq?

Kanal yaradın və onu citcoin adlandırın:

Blockchain: bir PoC nə qurmalıyıq?

Əslində Kanal blokçeyndir, ona görə də sıfır blokdan başlayır (Yaradılış bloku):

Blockchain: bir PoC nə qurmalıyıq?

Ağıllı Müqavilənin Yazılması

/*
 * 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;

İntuitiv olaraq burada hər şey aydın olmalıdır:

  • Demo proqramının Hyperledger Fabric API istifadə edərək çağıracağı bir neçə funksiya (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) var.
  • SendFrom və RefillBalance funksiyaları demo proqramının qəbul edəcəyi hadisələri (Hadisə) yaradır.
  • Ağıllı müqavilə qurulduqda instantiate funksiyası bir dəfə çağırılır. Əslində, bir dəfə deyil, hər dəfə ağıllı müqavilənin versiyası dəyişir. Buna görə də, siyahını boş massivlə başlamaq pis fikirdir, çünki indi ağıllı müqavilənin versiyasını dəyişdirərkən, mövcud siyahını itirəcəyik. Amma heç nə, sadəcə öyrənirəm).
  • Hesablar və hesabların siyahısı (hesablar) JSON məlumat strukturlarıdır. JS verilənlərin manipulyasiyası üçün istifadə olunur.
  • Siz getState funksiyasına zəng edərək aktivin cari dəyərini əldə edə və onu putState ilə yeniləyə bilərsiniz.
  • Hesab yaratarkən AddAccount funksiyası çağırılır, burada blokçeyndəki hesabların maksimum sayı (maxAccounts = 5) üçün müqayisə aparılır. Və hesabların sayının sonsuz artmasına səbəb olan bir tıxac var (diqqət etdiniz?). Bu kimi səhvlərdən çəkinmək lazımdır

Sonra, ağıllı müqaviləni Kanala yükləyirik və onu işə salırıq:

Blockchain: bir PoC nə qurmalıyıq?

Ağıllı Müqavilənin quraşdırılması üçün əməliyyata baxırıq:

Blockchain: bir PoC nə qurmalıyıq?

Kanalımız haqqında təfərrüatlara baxın:

Blockchain: bir PoC nə qurmalıyıq?

Nəticədə IBM buludunda blokçeyn şəbəkəsinin aşağıdakı sxemini əldə edirik. Həmçinin diaqramda Amazon buludunda virtual serverdə işləyən demo proqramı var (bu barədə təfərrüatlar növbəti hissədə olacaq):

Blockchain: bir PoC nə qurmalıyıq?

Hyperledger Fabric API Zəngləri üçün GUI yaradılması

Hyperledger Fabric aşağıdakılar üçün istifadə edilə bilən API-yə malikdir:

  • Kanal yaratmaq;
  • Kanalla həmyaşıd əlaqələri;
  • Kanalda smart müqavilələrin quraşdırılması və instantasiyası;
  • Zəng əməliyyatları;
  • Blockchain haqqında məlumat tələb edin.

Tətbiq inkişafı

Demo proqramımızda API-dən yalnız əməliyyatlara zəng etmək və məlumat tələb etmək üçün istifadə edəcəyik, çünki. biz artıq IBM blockchain platformasından istifadə edərək qalan addımları etdik. Biz standart texnologiya yığınından istifadə edərək GUI yazırıq: Express.js + Vue.js + Node.js. Müasir veb proqramların yaradılmasına necə başlamaq barədə ayrıca məqalə yaza bilərsiniz. Burada ən çox bəyəndiyim mühazirələr silsiləsinin linkini buraxacağam: Vue.js və Express.js istifadə edərək Tam Stack Veb Proqramı. Nəticə Google-un Material Design üslubunda tanış qrafik interfeysə malik müştəri-server proqramıdır. Müştəri və server arasında REST API bir neçə zəngdən ibarətdir:

  • HyperledgerDemo/v1/init - blokçeyni işə salın;
  • HyperledgerDemo/v1/accounts/list - bütün hesabların siyahısını əldə edin;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 - Bob hesabı yaradın;
  • HyperledgerDemo/v1/info?account=Bob - Bob hesabı haqqında məlumat almaq;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - Bobdan Aliceyə iki sikkə köçürün;
  • HyperledgerDemo/v1/disconnect - blokçeynlə əlaqəni bağlayın.

Nümunələrlə API təsviri Poçtalyon saytı HTTP API sınamaq üçün tanınmış proqramdır.

Amazon buludunda demo proqram

Tətbiq Amazon-a yükləndi, çünki IBM hələ də hesabımı təkmilləşdirə və virtual serverlər yaratmağa icazə verə bilməyib. Domen albalıya necə bağlandı: www.citcoin.info. Mən serveri bir az açıq saxlayacağam, sonra onu söndürəcəm, çünki kirayə sentlər damcılayır və citcoin sikkələr hələ birjada göstərilməyib) məqalədə demo skrinşotlar qoyuram ki, işin məntiqi aydın olsun. Demo tətbiqi ola bilər:

  • Blockchain-i işə salın;
  • Hesab yaradın (lakin indi yeni Hesab yaratmaq mümkün deyil, çünki blokçeynində smart müqavilədə göstərilən hesabların maksimum sayına çatılıb);
  • Hesabların siyahısını əldə edin;
  • Alice, Bob və Alex arasında citcoin pul köçürmək;
  • Hadisələri qəbul edin (lakin indi hadisələri göstərmək üçün bir yol yoxdur, ona görə də sadəlik üçün interfeysdə hadisələrin dəstəklənmədiyi yazılmışdır);
  • Fəaliyyətləri qeyd edin.

Əvvəlcə blockchain-i işə salırıq:

Blockchain: bir PoC nə qurmalıyıq?

Sonra, hesabımıza başlayırıq, balansla xırdalanmayın:

Blockchain: bir PoC nə qurmalıyıq?

Bütün mövcud hesabların siyahısını alırıq:

Blockchain: bir PoC nə qurmalıyıq?

Göndərəni və alıcını seçirik, onların balansını alırıq. Göndərən və alan eynidirsə, onun hesabı doldurulacaq:

Blockchain: bir PoC nə qurmalıyıq?

Jurnalda əməliyyatların icrasına nəzarət edirik:

Blockchain: bir PoC nə qurmalıyıq?

Əslində, demo proqramı ilə, hamısı budur. Bundan sonra, əməliyyatımızı blockchain-də görə bilərsiniz:

Blockchain: bir PoC nə qurmalıyıq?

Və əməliyyatların ümumi siyahısı:

Blockchain: bir PoC nə qurmalıyıq?

Bununla biz Citcoin şəbəkəsini yaratmaq üçün PoC tətbiqini uğurla başa çatdırdıq. Citcoin-ni tam hüquqlu sikkə köçürmə şəbəkəsinə çevirmək üçün başqa nə etmək lazımdır? Çox balaca:

  • Hesab yaratma mərhələsində şəxsi / açıq açarın yaradılmasını həyata keçirin. Şəxsi açar blokçeynində açıq olan istifadəçi hesabı tərəfindən saxlanmalıdır.
  • Sikkələrin köçürülməsini həyata keçirin, burada istifadəçini müəyyən etmək üçün ad deyil, açıq açar istifadə olunur.
  • İstifadəçidən serverə gedən əməliyyatları şəxsi açarı ilə şifrələyin.

Nəticə

Biz Citcoin şəbəkəsini aşağıdakı funksiyalarla həyata keçirmişik: hesab əlavə etmək, balans əldə etmək, hesabınızı artırmaq, bir hesabdan digərinə pul köçürmək. Beləliklə, bir PoC qurmaq bizə nəyə başa gəldi?

  • Ümumilikdə blokçeyni və xüsusilə Hyperledger Fabric-i öyrənmək lazımdır;
  • IBM və ya Amazon buludlarından necə istifadə edəcəyinizi öyrənin;
  • JS proqramlaşdırma dilini və bəzi veb çərçivəsini öyrənin;
  • Bəzi məlumatların blokçeynində deyil, ayrıca verilənlər bazasında saxlanması lazımdırsa, o zaman, məsələn, PostgreSQL ilə necə inteqrasiya olunacağını öyrənin;
  • Və nəhayət, ən azı - müasir dünyada Linux-u bilmədən, heç yerdə!)

Əlbəttə ki, raket elmi deyil, amma tərləməlisən!

GitHub-dakı mənbələr

Mənbələr qoydu Github. Anbarın qısa təsviri:
Kataloq «server» - Node.js serveri
Kataloq «müştəri» - Node.js müştərisi
Kataloq «blockchain» (parametrlərin və açarların dəyərləri, əlbəttə ki, işləmir və yalnız məsələn verilir):

  • müqavilə — ağıllı müqavilə mənbəyi
  • pul kisəsi - Hyperledger Fabric API-dən istifadə üçün istifadəçi açarları.
  • *.cds - ağıllı müqavilələrin tərtib edilmiş versiyaları
  • *.json faylları - Hyperledger Fabric API-dən istifadə üçün konfiqurasiya fayllarının nümunələri

Bu yalnız başlanğıcdır!

Mənbə: www.habr.com

Добавить комментарий