Blockchain: qanday PoC qurishimiz kerak?

Ko'zlaringiz qo'rqib, qo'llaringiz qichiydi!

Oldingi maqolalarda biz blokcheynlar qurilgan texnologiyalar bilan shug'ullangan edik (Blockchainni nima qurishimiz kerak?) va ularning yordami bilan amalga oshirilishi mumkin bo'lgan holatlar (Nega biz ishni qurishimiz kerak?). O'z qo'llaringiz bilan ishlash vaqti keldi! Uchuvchilar va PoC (kontseptsiya isboti) ni amalga oshirish uchun men bulutlardan foydalanishni afzal ko'raman, chunki... ularga dunyoning istalgan nuqtasidan kirish mumkin va ko'pincha atrof-muhitni zerikarli o'rnatishga vaqt sarflashning hojati yo'q, chunki Oldindan o'rnatilgan konfiguratsiyalar mavjud. Shunday qilib, keling, oddiy narsani yarataylik, masalan, ishtirokchilar o'rtasida tangalarni o'tkazish tarmog'i va uni kamtarona Bitcoin deb ataymiz. Buning uchun biz IBM bulutidan va Hyperledger Fabric universal blokcheynidan foydalanamiz. Birinchidan, Hyperledger Fabric nima uchun universal blokcheyn deb ataladiganini aniqlaymiz?

Blockchain: qanday PoC qurishimiz kerak?

Hyperledger Fabric - universal blokcheyn

Umuman olganda, universal axborot tizimi:

  • Biznes mantig'ini bajaradigan serverlar to'plami va dasturiy ta'minot yadrosi;
  • Tizim bilan o'zaro ishlash uchun interfeyslar;
  • Qurilmalarni/odamlarni ro'yxatdan o'tkazish, autentifikatsiya qilish va avtorizatsiya qilish vositalari;
  • Operatsion va arxiv ma'lumotlarini saqlaydigan ma'lumotlar bazasi:

Blockchain: qanday PoC qurishimiz kerak?

Hyperledger Fabric nima ekanligini rasmiy versiyasini o'qish mumkin сайт, va qisqasi, Hyperledger Fabric ochiq kodli platforma bo‘lib, u sizga shaxsiy blokcheynlarni yaratish va JS va Go dasturlash tillarida yozilgan o‘zboshimchalik bilan aqlli shartnomalarni bajarish imkonini beradi. Keling, Hyperledger Fabric arxitekturasini batafsil ko'rib chiqaylik va bu faqat ma'lumotlarni saqlash va yozib olish uchun o'ziga xos xususiyatlarga ega universal tizim ekanligiga ishonch hosil qiling. O'ziga xoslik shundaki, ma'lumotlar, barcha blokcheynlarda bo'lgani kabi, blokcheynga joylashtiriladigan bloklarda saqlanadi, agar ishtirokchilar konsensusga erishsalar va ma'lumotlarni yozib olgandan keyin jimgina tuzatish yoki o'chirish mumkin bo'lmasa.

Hyperledger mato arxitekturasi

Diagrammada Hyperledger Fabric arxitekturasi ko'rsatilgan:

Blockchain: qanday PoC qurishimiz kerak?

tashkilotlar - tashkilotlarda tengdoshlar mavjud, ya'ni. blokcheyn tashkilotlarning qo'llab-quvvatlashi tufayli mavjud. Turli tashkilotlar bitta kanalning bir qismi bo'lishi mumkin.

kanal - tengdoshlarni guruhlarga birlashtiradigan mantiqiy tuzilma, ya'ni. blokcheyn belgilangan. Hyperledger Fabric bir vaqtning o'zida turli biznes mantiqlari bilan bir nechta blokcheynlarni qayta ishlashga qodir.

A'zolik xizmatlari provayderi (MSP) identifikatorni berish va rollarni tayinlash uchun CA (sertifikat organi) hisoblanadi. Tugun yaratish uchun siz MSP bilan o'zaro aloqada bo'lishingiz kerak.

Tengdosh tugunlar — tranzaktsiyalarni tekshirish, blokcheynni saqlash, aqlli shartnomalarni bajarish va ilovalar bilan ishlash. Tengdoshlar MSP tomonidan beriladigan shaxsiy guvohnomaga (raqamli sertifikat) ega. Barcha tugunlar teng huquqlarga ega bo'lgan Bitcoin yoki Etherium tarmog'idan farqli o'laroq, Hyperledger Fabric tugunlari turli rollarni o'ynaydi:

  • Balki tengdosh qo'llab-quvvatlovchi tengdosh (EP) va aqlli shartnomalarni bajaring.
  • Ishtirok etuvchi tengdosh (CP) - faqat ma'lumotlarni blokcheynda saqlang va "Dunyo holati" ni yangilang.
  • Anchor Peer (AP) - agar blokcheynda bir nechta tashkilot ishtirok etsa, ular o'rtasidagi aloqa uchun langar tengdoshlaridan foydalaniladi. Har bir tashkilotda bir yoki bir nechta langar tengdoshlari bo'lishi kerak. AP dan foydalanib, tashkilotdagi har qanday tengdosh boshqa tashkilotlardagi barcha tengdoshlar haqida ma'lumot olishi mumkin. APlar o'rtasida ma'lumotlarni sinxronlashtirish uchun ishlatiladi g'iybat protokoli.
  • Rahbar Tengdosh - agar tashkilotning bir nechta tengdoshlari bo'lsa, unda faqat tengdoshning rahbari Buyurtma xizmatidan bloklarni oladi va ularni qolgan tengdoshlariga beradi. Rahbar statik yoki dinamik ravishda tashkilotdagi tengdoshlar tomonidan tanlanishi mumkin. G'iybat protokoli rahbarlar haqidagi ma'lumotlarni sinxronlashtirish uchun ham qo'llaniladi.

mulk — qiymatga ega bo'lgan va blokcheynda saqlanadigan ob'ektlar. Aniqroq aytganda, bu JSON formatidagi kalit-qiymat ma'lumotlari. Aynan shu ma'lumotlar Blockchain-da qayd etilgan. Ular blokcheynda saqlanadigan tarixga va "Jahon holati" ma'lumotlar bazasida saqlanadigan joriy holatga ega. Ma'lumotlar tuzilmalari biznes vazifalariga qarab o'zboshimchalik bilan to'ldiriladi. Majburiy maydonlar yo'q, yagona tavsiya - aktivlar egasi bo'lishi va qimmatli bo'lishi kerak.

Buxgalteriya — aktivlarning joriy holatini saqlaydigan blokcheyn va Word davlat maʼlumotlar bazasidan iborat. Jahon davlati LevelDB yoki CouchDB dan foydalanadi.

Aqlli shartnoma — aqlli kontraktlardan foydalangan holda, tizimning biznes mantig'i amalga oshiriladi. Hyperledger Fabric-da aqlli shartnomalar zanjirli kod deb ataladi. Chaincode yordamida aktivlar va ular bo'yicha operatsiyalar ko'rsatilgan. Texnik jihatdan aqlli kontraktlar JS yoki Go dasturlash tillarida amalga oshirilgan dasturiy modullardir.

Tasdiqlash siyosati — har bir zanjirli kod uchun siz tranzaktsiya uchun qancha tasdiqlar va kimdan kutilishi kerakligi haqida siyosat o'rnatishingiz mumkin. Agar siyosat o'rnatilmagan bo'lsa, u holda sukut bo'yicha: "tranzaksiyani kanaldagi istalgan tashkilotning istalgan a'zosi tasdiqlashi kerak." Siyosatlarga misollar:

  • Bitim tashkilotning har qanday ma'muri tomonidan tasdiqlanishi kerak;
  • Tashkilotning istalgan a'zosi yoki mijozi tomonidan tasdiqlanishi kerak;
  • Har qanday tengdosh tashkilot tomonidan tasdiqlanishi kerak.

Buyurtma xizmati — tranzaktsiyalarni bloklarga jamlaydi va ularni kanaldagi tengdoshlariga yuboradi. Xabarlarni tarmoqdagi barcha tengdoshlarga yetkazib berishni kafolatlaydi. Sanoat tizimlari uchun ishlatiladi Kafka xabar brokeri, ishlab chiqish va sinov uchun yakkaxon.

CallFlow

Blockchain: qanday PoC qurishimiz kerak?

  • Ilova Hyperledger Fabric bilan Go, Node.js yoki Java SDK yordamida muloqot qiladi;
  • Mijoz tx tranzaksiyasini tuzadi va uni indossing tengdoshlariga yuboradi;
  • Peer mijozning imzosini tekshiradi, tranzaktsiyani yakunlaydi va tasdiq imzosini mijozga qaytarib yuboradi. Chaincode faqat indossing tengdoshida bajariladi va uning bajarilishi natijasi barcha tengdoshlarga yuboriladi. Ushbu ish algoritmi PBFT (Amaliy Vizantiya xatosiga bardoshli) konsensus deb ataladi. dan farq qiladi klassik BFT xabar yuborilganligi va tasdiqlash barcha ishtirokchilardan emas, balki faqat ma'lum bir to'plamdan kutilganligi;
  • Mijoz indossament siyosatiga mos keladigan javoblar sonini olgandan so'ng, u tranzaksiyani Buyurtma xizmatiga yuboradi;
  • Buyurtma xizmati blokni yaratadi va uni barcha o'z tengdoshlariga yuboradi. Buyurtma xizmati bloklarning ketma-ket qayd etilishini ta'minlaydi, bu esa daftar vilkasini yo'q qiladi ("vilkalar" bo'limiga qarang);
  • Tengdoshlar blok oladi, tasdiqlash siyosatini yana tekshiradi, blokni blokcheynga yozadi va “Jahon holati” maʼlumotlar bazasidagi holatni oʻzgartiradi.

Bular. Bu tugunlar orasidagi rollarning taqsimlanishiga olib keladi. Bu blokcheyn kengaytiriladigan va xavfsiz bo'lishini ta'minlaydi:

  • Aqlli kontraktlar (zanjirli kod) tengdoshlarni tasdiqlaydi. Bu aqlli shartnomalar maxfiyligini ta'minlaydi, chunki u barcha ishtirokchilar tomonidan saqlanmaydi, balki faqat tengdoshlarini tasdiqlaydi.
  • Buyurtma tezda ishlashi kerak. Bu Buyurtma faqat blokni tashkil etishi va uni etakchi tengdoshlarning belgilangan to'plamiga yuborishi bilan ta'minlanadi.
  • Majburiy tengdoshlar faqat blokcheynni saqlaydi - ularning ko'pi bo'lishi mumkin va ular juda ko'p kuch va tezkor ishlashni talab qilmaydi.

Hyperledger Fabric arxitektura yechimlari va nima uchun u shunday ishlaydi va boshqacha emasligi haqida batafsil ma'lumotni bu yerda topishingiz mumkin: Arxitekturaning kelib chiqishi yoki bu yerda: Hyperledger Fabric: Ruxsat etilgan blokcheynlar uchun taqsimlangan operatsion tizim.

Shunday qilib, Hyperledger Fabric haqiqiy universal tizim bo'lib, uning yordamida siz:

  • Aqlli kontrakt mexanizmidan foydalangan holda o'zboshimchalik bilan biznes mantig'ini amalga oshirish;
  • JSON formatida blokcheyn ma'lumotlar bazasidan ma'lumotlarni yozib oling va qabul qiling;
  • Sertifikat organi yordamida API ruxsatini bering va tasdiqlang.

Endi Hyperledger Fabric-ning o'ziga xos xususiyatlari haqida bir oz tushunganimizdan so'ng, keling, nihoyat foydali ish qilaylik!

Blokcheynni joriy qilish

Muammoni shakllantirish

Vazifa Citcoin tarmog'ini quyidagi funktsiyalar bilan amalga oshirishdir: hisob yaratish, balansni olish, hisobingizni to'ldirish, tangalarni bir hisobdan boshqasiga o'tkazish. Keling, ob'ekt modelini chizamiz, biz uni yanada aqlli shartnomada amalga oshiramiz. Shunday qilib, bizda nomlar bo'yicha aniqlangan va balansi va hisoblar ro'yxati mavjud bo'ladi. Hisoblar va hisoblar ro'yxati Hyperledger Fabric aktivlari nuqtai nazaridan. Shunga ko'ra, ularning tarixi va hozirgi holati bor. Men buni aniq chizishga harakat qilaman:

Blockchain: qanday PoC qurishimiz kerak?

Yuqori raqamlar "Jahon holati" ma'lumotlar bazasida saqlanadigan joriy holatdir. Ularning ostida blokcheynda saqlangan tarixni ko'rsatadigan raqamlar mavjud. Aktivlarning joriy holati operatsiyalar orqali o'zgaradi. Aktiv faqat bir butun sifatida o'zgaradi, shuning uchun tranzaksiya natijasida yangi ob'ekt yaratiladi va aktivning joriy qiymati tarixga kiradi.

IBM Cloud

Biz hisob qaydnomasini yaratamiz IBM buluti. Blokcheyn-platformadan foydalanish uchun uni Pay-As-You-Go-ga yangilash kerak. Bu jarayon tez kechmasligi mumkin, chunki... IBM qo'shimcha ma'lumot so'raydi va uni qo'lda tekshiradi. Ijobiy eslatma sifatida aytishim mumkinki, IBMda Hyperledger Fabric-ni bulutda joylashtirish imkonini beruvchi yaxshi o'quv materiallari mavjud. Menga quyidagi maqolalar va misollar seriyasi yoqdi:

Quyida IBM Blockchain platformasining skrinshotlari keltirilgan. Bu blokcheyn yaratish bo'yicha ko'rsatma emas, balki oddiygina vazifa ko'lamini namoyish qilishdir. Shunday qilib, maqsadlarimiz uchun biz bitta Tashkilot tuzamiz:

Blockchain: qanday PoC qurishimiz kerak?

Biz unda tugunlarni yaratamiz: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: qanday PoC qurishimiz kerak?

Biz foydalanuvchilarni yaratamiz:

Blockchain: qanday PoC qurishimiz kerak?

Kanal yarating va uni citcoin deb nomlang:

Blockchain: qanday PoC qurishimiz kerak?

Asosan Channel bu blokcheyndir, shuning uchun u blok noldan boshlanadi (Genesis bloki):

Blockchain: qanday PoC qurishimiz kerak?

Aqlli shartnoma yozish

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

Intuitiv ravishda bu erda hamma narsa aniq bo'lishi kerak:

  • Demo dasturi Hyperledger Fabric API yordamida chaqiradigan bir nechta funksiyalar (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) mavjud.
  • SendFrom va RefillBalance funksiyalari demo dasturi qabul qiladigan hodisalarni yaratadi.
  • Instantiate funksiyasi aqlli shartnoma yaratilganda bir marta chaqiriladi. Aslida, u faqat bir marta emas, balki har safar aqlli shartnoma versiyasi o'zgarganda chaqiriladi. Shuning uchun, ro'yxatni bo'sh massiv bilan boshlash yomon fikrdir, chunki Endi biz aqlli shartnoma versiyasini o'zgartirganimizda, biz joriy ro'yxatni yo'qotamiz. Lekin hammasi joyida, men faqat o'rganyapman).
  • Hisoblar va hisoblar roʻyxati JSON maʼlumotlar tuzilmalaridir. JS ma'lumotlarni manipulyatsiya qilish uchun ishlatiladi.
  • Siz getState funksiya chaqiruvi yordamida aktivning joriy qiymatini olishingiz va uni putState yordamida yangilashingiz mumkin.
  • Hisob qaydnomasini yaratishda AddAccount funksiyasi chaqiriladi, unda blokcheyndagi hisoblarning maksimal soni (maxAccounts = 5) uchun taqqoslash amalga oshiriladi. Va bu erda jamb bor (siz payqadingizmi?), Bu hisoblar sonining cheksiz ko'payishiga olib keladi. Bunday xatolardan qochish kerak)

Keyinchalik, biz Smart shartnomani Kanalga yuklaymiz va uni ishga tushiramiz:

Blockchain: qanday PoC qurishimiz kerak?

Smart kontraktni o'rnatish bo'yicha tranzaksiyani ko'rib chiqaylik:

Blockchain: qanday PoC qurishimiz kerak?

Keling, kanalimiz haqidagi ma'lumotlarni ko'rib chiqamiz:

Blockchain: qanday PoC qurishimiz kerak?

Natijada, biz IBM bulutidagi blokcheyn tarmog'ining quyidagi diagrammasini olamiz. Diagrammada virtual serverda Amazon bulutida ishlaydigan demo dasturi ham ko'rsatilgan (bu haqda keyingi bo'limda):

Blockchain: qanday PoC qurishimiz kerak?

Hyperledger Fabric API chaqiruvlari uchun GUI yaratish

Hyperledger Fabric quyidagi maqsadlarda ishlatilishi mumkin bo'lgan APIga ega:

  • Kanal yaratish;
  • Kanalga ulanishlar;
  • Kanalda aqlli shartnomalarni o'rnatish va instantsiyalash;
  • Qo'ng'iroq operatsiyalari;
  • Blockchain haqida ma'lumot so'rang.

Ilovalarni ishlab chiqish

Bizning demo dasturimizda biz API-dan faqat tranzaktsiyalarni chaqirish va ma'lumot so'rash uchun foydalanamiz, chunki Biz IBM blockchain platformasidan foydalangan holda qolgan bosqichlarni allaqachon yakunladik. Biz standart texnologiya stekidan foydalanib GUI yozamiz: Express.js + Vue.js + Node.js. Zamonaviy veb-ilovalarni yaratishni boshlash haqida alohida maqola yozishingiz mumkin. Bu erda men eng yoqqan ma'ruzalar turkumiga havolani qoldiraman: Vue.js & Express.js yordamida toʻliq stack veb-ilovasi. Natijada Google Material Design uslubidagi tanish grafik interfeysga ega mijoz-server ilovasi. Mijoz va server o'rtasidagi REST API bir nechta qo'ng'iroqlardan iborat:

  • HyperledgerDemo/v1/init - blokcheynni ishga tushirish;
  • HyperledgerDemo/v1/accounts/list — barcha hisoblar ro'yxatini oling;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — Bob hisobini yaratish;
  • HyperledgerDemo/v1/info?account=Bob — Bob hisobi haqida ma'lumot olish;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - Bobdan Elisga ikkita tanga o'tkazish;
  • HyperledgerDemo/v1/disconnect - blokcheynga ulanishni yoping.

Misollar bilan API tavsifi Pochtachi sayti - HTTP API-ni sinab ko'rish uchun taniqli dastur.

Amazon bulutidagi demo ilovasi

Men ilovani Amazonga yukladim, chunki... IBM hali ham hisobimni yangilay olmadi va menga virtual serverlar yaratishga ruxsat bermadi. Domenga gilosni qanday qo'shish mumkin: www.citcoin.info. Men serverni bir muddat yoniq tutaman, keyin uni o'chirib qo'yaman, chunki... tsent ijaraga tushmoqda, citcoin tangalari esa birjada hali ro'yxatga olinmagan) Ish mantig'i aniq bo'lishi uchun demoning skrinshotlarini maqolaga kiritaman. Demo ilovasi:

  • Blok zanjirini ishga tushiring;
  • Hisob qaydnomasini yarating (lekin endi siz yangi hisob yarata olmaysiz, chunki blokcheynda aqlli shartnomada ko'rsatilgan hisoblarning maksimal soniga erishildi);
  • Hisoblar ro'yxatini oling;
  • Elis, Bob va Aleks o'rtasida sitcoin tangalarini o'tkazing;
  • Hodisalarni qabul qilish (lekin hozir voqealarni ko'rsatishning imkoni yo'q, shuning uchun interfeys soddaligi uchun voqealar qo'llab-quvvatlanmaydi);
  • Harakatlar jurnali.

Avval biz blokcheynni ishga tushiramiz:

Blockchain: qanday PoC qurishimiz kerak?

Keyinchalik, biz o'z hisobimizni yaratamiz, balans bilan vaqtni behuda sarflamang:

Blockchain: qanday PoC qurishimiz kerak?

Biz barcha mavjud hisoblar ro'yxatini olamiz:

Blockchain: qanday PoC qurishimiz kerak?

Biz jo'natuvchi va oluvchini tanlaymiz va ularning balansini olamiz. Agar jo'natuvchi va qabul qiluvchi bir xil bo'lsa, uning hisobi to'ldiriladi:

Blockchain: qanday PoC qurishimiz kerak?

Jurnalda biz tranzaktsiyalarning bajarilishini kuzatamiz:

Blockchain: qanday PoC qurishimiz kerak?

Aslida, bularning barchasi demo dasturi bilan. Quyida blokcheyndagi tranzaksiyamizni ko'rishingiz mumkin:

Blockchain: qanday PoC qurishimiz kerak?

Va operatsiyalarning umumiy ro'yxati:

Blockchain: qanday PoC qurishimiz kerak?

Bu bilan biz Citcoin tarmog'ini yaratish uchun PoCni amalga oshirishni muvaffaqiyatli yakunladik. Citcoin tangalarni o'tkazish uchun to'liq tarmoqqa aylanishi uchun yana nima qilish kerak? Juda kam:

  • Hisobni yaratish bosqichida shaxsiy / ochiq kalitni yaratishni amalga oshiring. Shaxsiy kalit hisob foydalanuvchisida, ochiq kalit esa blokcheynda saqlanishi kerak.
  • Tanga o'tkazmasini amalga oshiring, unda foydalanuvchini identifikatsiya qilish uchun nom emas, ochiq kalit ishlatiladi.
  • Foydalanuvchidan serverga o'tadigan tranzaktsiyalarni uning shaxsiy kaliti bilan shifrlang.

xulosa

Biz Citcoin tarmog'ini quyidagi funktsiyalar bilan amalga oshirdik: hisob qo'shish, balansni olish, hisobingizni to'ldirish, tangalarni bir hisobdan boshqasiga o'tkazish. Xo'sh, PoC qurish bizga qanchaga tushdi?

  • Siz umuman blokcheynni va xususan Hyperledger Fabric-ni o'rganishingiz kerak;
  • IBM yoki Amazon bulutlaridan foydalanishni o'rganing;
  • JS dasturlash tilini va ba'zi veb-ramkalarni o'rganing;
  • Agar ba'zi ma'lumotlar blokcheynda emas, balki alohida ma'lumotlar bazasida saqlanishi kerak bo'lsa, unda, masalan, PostgreSQL bilan integratsiya qilishni o'rganing;
  • Va nihoyat, lekin eng muhimi - zamonaviy dunyoda Linuxni bilmasdan yashay olmaysiz!)

Albatta, bu raketa fani emas, lekin siz qattiq ishlashingiz kerak bo'ladi!

GitHub-dagi manbalar

Manbalar qo'yilgan GitHub. Repozitariyning qisqacha tavsifi:
Katalog «server» — Node.js serveri
Katalog «mijoz» — Node.js mijozi
Katalog «blockchain"(parametr qiymatlari va kalitlari, albatta, ishlamaydi va faqat misol sifatida keltirilgan):

  • kontrakt — aqlli shartnomaning manba kodi
  • hamyon — Hyperledger Fabric API-dan foydalanish uchun foydalanuvchi kalitlari.
  • *.cds - aqlli shartnomalarning tuzilgan versiyalari
  • *.json fayllari - Hyperledger Fabric API-dan foydalanish uchun konfiguratsiya fayllariga misollar

Bu faqat boshlanishi!

Manba: www.habr.com

a Izoh qo'shish