Blockchain: кандай PoC куруу керек?

Көздөрүң коркуп, колуң кычышып жатат!

Мурунку макалаларда биз блокчейндер курулган технологиялар менен сүйлөштүк (Блокчейнди эмне куруу керек?) жана алардын жардамы менен ишке ашырылышы мүмкүн болгон учурлар (Эмне үчүн биз ишти курушубуз керек?). Колуңуз менен иштөөгө убакыт келди! Учкучтарды жана PoC (Түшүнүктүн далили) ишке ашыруу үчүн мен булуттарды колдонууну туура көрөм, анткени... аларга дүйнөнүн каалаган жеринен кирүүгө болот жана көбүнчө айлана-чөйрөнү тажатма орнотууга убакыт коротуунун кереги жок, анткени Алдын ала коюлган конфигурациялар бар. Ошентип, келгиле, жөнөкөй бир нерсе кылалы, мисалы, катышуучулардын ортосунда монеталарды өткөрүү тармагын жана аны Bitcoin деп атайлы. Бул үчүн биз IBM булутун жана универсалдуу блокчейн Hyperledger Fabric колдонобуз. Биринчиден, Hyperledger Fabric эмне үчүн универсалдуу блокчейн деп аталарын аныктап көрөлү?

Blockchain: кандай PoC куруу керек?

Hyperledger Fabric - универсалдуу блокчейн

Жалпысынан алганда, универсалдуу маалымат системасы болуп төмөнкүлөр саналат:

  • Серверлердин топтому жана бизнес логикасын аткарган программалык өзөк;
  • Система менен өз ара аракеттенүү үчүн интерфейстер;
  • Түзмөктөрдү/адамдарды каттоо, аутентификациялоо жана авторизациялоо үчүн аспаптар;
  • Операциялык жана архивдик маалыматтарды сактоочу маалымат базасы:

Blockchain: кандай PoC куруу керек?

Hyperledger Fabric дегендин расмий версиясын бул жерден окуса болот сайты, жана кыскача айтканда, Hyperledger Fabric бул ачык булак платформасы, ал сизге жеке блокчейндерди курууга жана JS жана Go программалоо тилдеринде жазылган акылдуу келишимдерди аткарууга мүмкүндүк берет. Келгиле, Hyperledger Fabric архитектурасын майда-чүйдөсүнө чейин карап көрөлү жана бул маалыматтарды сактоо жана жазуу үчүн гана өзгөчөлүктөргө ээ болгон универсалдуу система экенине ынаналы. Өзгөчөлүгү, маалыматтар, бардык блокчейндердегидей, катышуучулар консенсуска жеткенде гана блокчейнге жайгаштырылуучу блоктордо сакталат жана маалыматтарды жаздыргандан кийин тынч оңдоо же жок кылуу мүмкүн эмес.

Hyperledger Fabric Architecture

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

Blockchain: кандай PoC куруу керек?

Organizations — уюмдар курдаштарды камтыйт, б.а. blockchain уюмдардын колдоосу менен бар. Ар кандай уюмдар бир эле каналдын бир бөлүгү болушу мүмкүн.

канал — курбуларды топторго бириктирген логикалык структура, б.а. блокчейн көрсөтүлгөн. Hyperledger Fabric бир эле учурда ар кандай бизнес логикасы менен бир нече блокчейндерди иштете алат.

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

Тең түйүндөр — транзакцияларды текшерүү, блокчейнди сактоо, акылдуу келишимдерди аткаруу жана тиркемелер менен иштешүү. Теңдештер MSP тарабынан берилген инсандык (санариптик сертификат) бар. Бардык түйүндөр бирдей укукка ээ болгон Bitcoin же Etherium тармагынан айырмаланып, Hyperledger Fabric түйүндөрүндө ар кандай роль ойнойт:

  • Мүмкүн теңтуш колдогон теңтуш (EP) жана акылдуу келишимдерди аткарыңыз.
  • Колдоочу (CP) - блокчейндеги маалыматтарды гана сактап, "Дүйнөлүк абалды" жаңыртыңыз.
  • Anchor Peer (AP) - эгерде блокчейнге бир нече уюмдар катышса, анда алардын ортосундагы байланыш үчүн анкердик кесиптештер колдонулат. Ар бир уюм бир же бир нече казык курбулары болушу керек. AP колдонуу менен, уюмдагы каалаган тең башка уюмдардагы бардык теңтуштар жөнүндө маалымат ала алат. AP ортосунда маалыматты синхрондоштуруу үчүн колдонулат ушак протоколу.
  • Лидер теңтуш — эгерде уюмдун бир нече теңтуштары болсо, анда теңтуштун лидери гана Заказ берүү кызматынан блокторду алып, калган курбуларына берет. Лидер статикалык түрдө көрсөтүлүшү мүмкүн же уюмдагы теңтуштар тарабынан динамикалык түрдө тандалышы мүмкүн. Ушак протоколу лидерлер тууралуу маалыматты синхрондоштуруу үчүн да колдонулат.

каражаттар — баалуулугу бар жана блокчейнде сакталган объекттер. Тагыраак айтканда, бул JSON форматындагы ачкыч-маани маалыматтары. Бул Блокчейнге жазылган маалыматтар. Алардын тарыхы бар, ал блокчейнде сакталат жана "Дүйнөлүк мамлекет" маалымат базасында сакталган учурдагы абал. Маалымат структуралары бизнес милдеттерине жараша ээнбаштык менен толтурулат. Милдеттүү талаалар жок, бир гана сунуш - активдердин ээси жана баалуу болушу керек.

китеп — активдердин учурдагы абалын сактаган Blockchain жана Word мамлекеттик маалымат базасынан турат. Дүйнөлүк мамлекет LevelDB же CouchDB колдонот.

Акылдуу келишим — акылдуу контракттарды колдонуу менен системанын бизнес логикасы ишке ашырылат. Hyperledger Fabric'те акылдуу келишимдер чынжыр код деп аталат. Chaincode колдонуп, активдер жана алар боюнча бүтүмдөр көрсөтүлөт. Техникалык жактан айтканда, акылдуу келишимдер JS же Go программалоо тилдеринде ишке ашырылган программалык модулдар.

Колдоо саясаты — ар бир чынжыр код үчүн транзакция үчүн канча ырастоону жана кимден күтүү керектиги боюнча саясатты орното аласыз. Эгер саясат коюлбаса, демейки: "транзакцияны каналдагы каалаган уюмдун мүчөсү ырасташы керек." Саясаттардын мисалдары:

  • бүтүм уюмдун каалаган администратору тарабынан бекитилиши керек;
  • Уюмдун каалаган мүчөсү же кардары тарабынан ырасталууга тийиш;
  • Кандайдыр бир кесиптеш уюм тарабынан ырасталууга тийиш.

Заказ берүү кызматы — транзакцияларды блокторго топтоп, аларды каналдагы теңтуштарга жөнөтөт. Тармактагы бардык курбуларына билдирүүлөрдү жеткирүүгө кепилдик берет. өнөр жай системалары үчүн колдонулат Кафка билдирүү брокери, иштеп чыгуу жана сыноо үчүн Solo.

CallFlow

Blockchain: кандай PoC куруу керек?

  • Колдонмо Hyperledger Fabric менен Go, Node.js же Java SDK аркылуу байланышат;
  • кардар tx транзакциясын түзүп, аны индоссациялоочу курдаштарга жөнөтөт;
  • Peer кардардын кол тамгасын текшерет, транзакцияны аяктайт жана индоссамент кол тамгасын кайра кардарга жөнөтөт. Chaincode индоссант боюнча гана аткарылат жана анын аткарылышынын натыйжасы бардык теңдештерге жөнөтүлөт. Иштин бул алгоритми PBFT (Практикалык Византиялык катачылыкка чыдамдуу) консенсус деп аталат. дан айырмаланат классикалык BFT билдирүү жөнөтүлгөн жана ырастоо бардык катышуучулардан эмес, белгилүү бир топтомдон гана күтүлгөнү;
  • Кардар индоссамент саясатына ылайык келген жооптордун санын алгандан кийин, ал транзакцияны Заказ берүү кызматына жөнөтөт;
  • Буйрутма кызматы блокту жаратат жана аны бардык жоопкерчиликтүү кесиптештерине жөнөтөт. Буйрутма берүү кызматы блоктордун ырааттуу жазылышын камсыздайт, бул бухгалтердик айры деп аталган нерсени жок кылат ("Айрылар" бөлүмүн караңыз);
  • Теңдештер блокту алышат, индоссамент саясатын кайра текшерип, блокту блокчейнге жазып, "Дүйнөлүк абал" МБдагы абалын өзгөртүшөт.

Ошол. Бул түйүндөрдүн ортосундагы ролдордун бөлүнүшүнө алып келет. Бул блокчейндин масштабдуу жана коопсуз болушун камсыздайт:

  • Акылдуу келишимдер (чынжыр коду) теңтуштарды жактырышат. Бул акылдуу келишимдердин купуялуулугун камсыз кылат, анткени ал бардык катышуучулар тарабынан сакталган эмес, бирок бир гана индоссанттар тарабынан.
  • Заказ тез иштеши керек. Бул Ordering блокту гана түзүп, аны лидерлердин белгиленген топтомуна жөнөтүшү менен камсыз кылынат.
  • Милдеттүү курбулар блокчейнди гана сакташат - алардын көбү болушу мүмкүн жана алар көп күчтү жана тез иштөөнү талап кылбайт.

Hyperledger Fabric архитектуралык чечимдери жана эмне үчүн мындай иштээри жана башка жол менен иштебей тургандыгы жөнүндө кененирээк маалыматты бул жерден тапса болот: Архитектуранын келип чыгышы же бул жерде: Hyperledger Fabric: Уруксат берилген блокчейндер үчүн бөлүштүрүлгөн операциялык тутум.

Ошентип, Hyperledger Fabric - бул чыныгы универсалдуу система, анын жардамы менен сиз:

  • акылдуу келишим механизмин колдонуу менен ээнбаш бизнес логикасын ишке ашыруу;
  • JSON форматында блокчейн базасынан маалыматтарды жазыңыз жана алыңыз;
  • Сертификат органы аркылуу API мүмкүнчүлүгүн бериңиз жана ырастаңыз.

Эми биз Hyperledger Fabricтин өзгөчөлүктөрү жөнүндө бир аз түшүнгөнүбүздөн кийин, акырында пайдалуу бир нерсе кылалы!

Блокчейнди жайылтуу

Тапшырманын коюлушу

Милдет Citcoin тармагын төмөнкү функциялар менен ишке ашыруу болуп саналат: эсеп түзүү, балансты алуу, эсепти толуктоо, бир эсептен экинчисине тыйындарды которуу. Келгиле, объектинин моделин тарталы, аны биз андан ары акылдуу келишимде ишке ашырабыз. Ошентип, бизде аттары менен аныкталган жана балансты жана эсептердин тизмесин камтыган эсептер болот. Эсептер жана эсептердин тизмеси, Hyperledger Fabric активдери боюнча. Ошого жараша алардын тарыхы жана азыркы абалы бар. Мен муну так тартууга аракет кылам:

Blockchain: кандай PoC куруу керек?

Жогорку көрсөткүчтөр "Дүйнөлүк мамлекет" маалымат базасында сакталган учурдагы абал. Алардын астында блокчейнде сакталган тарыхты көрсөткөн сандар бар. Активдердин учурдагы абалы транзакциялар менен өзгөртүлөт. Актив бүтүндөй гана өзгөрөт, андыктан транзакциянын натыйжасында жаңы объект түзүлүп, активдин учурдагы наркы тарыхка кирет.

IBM Cloud

Биз каттоо эсебин түзөбүз IBM булуту. Блокчейн платформасын колдонуу үчүн аны төлөгөнгө чейин жаңыртуу керек. Бул процесс тез болбошу мүмкүн, анткени... IBM кошумча маалыматты сурайт жана аны кол менен текшерет. Позитивдүү түрдө, мен IBMде Hyperledger Fabricти булутуна жайгаштырууга мүмкүндүк берген жакшы окуу материалдары бар деп айта алам. Мага төмөнкү макалалар жана мисалдар абдан жакты:

Төмөндө IBM Blockchain платформасынын скриншоттору. Бул блокчейнди кантип түзүү боюнча көрсөтмө эмес, жөн гана тапшырманын көлөмүн көрсөтүү. Ошентип, биздин максаттар үчүн биз бир уюмду түзөбүз:

Blockchain: кандай PoC куруу керек?

Биз анда түйүндөр түзөбүз: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: кандай PoC куруу керек?

Биз колдонуучуларды түзөбүз:

Blockchain: кандай PoC куруу керек?

Канал түзүп, аны citcoin деп атаңыз:

Blockchain: кандай PoC куруу керек?

Негизи Канал бул блокчейн, ошондуктан ал блок нөлдөн башталат (Башталыш блогу):

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;

Интуитивдик түрдө, бул жерде баары ачык-айкын болушу керек:

  • Демо программасы Hyperledger Fabric API аркылуу чакыра турган бир нече функциялар (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) бар.
  • SendFrom жана RefillBalance функциялары демо программасы ала турган Окуяларды жаратат.
  • Instantiate функциясы акылдуу келишим түзүлгөндө бир жолу чакырылат. Чынында, ал бир эле жолу эмес, акылдуу келишим версиясы өзгөргөн сайын аталат. Ошондуктан, бош массив менен тизмени инициализациялоо жаман идея, анткени Эми, биз акылдуу келишимдин версиясын өзгөрткөндө, биз учурдагы тизмени жоготобуз. Бирок баары жакшы, мен жаңы эле үйрөнүп жатам).
  • Каттоо эсептери жана эсептердин тизмеси JSON маалымат структуралары. JS маалыматтарды манипуляциялоо үчүн колдонулат.
  • Активдин учурдагы маанисин getState функциясынын чакырыгы аркылуу ала аласыз жана аны putState аркылуу жаңырта аласыз.
  • Каттоо эсебин түзүүдө AddAccount функциясы чакырылат, мында блокчейндеги эсептердин максималдуу санына салыштыруу жүргүзүлөт (maxAccounts = 5). Жана бул жерде бир жамбы бар (сиз байкадыңызбы?), бул эсептердин санынын чексиз көбөйүшүнө алып келет. Мындай каталарды болтурбоо керек)

Андан кийин, биз Каналга акылдуу келишимди жүктөйбүз жана аны түзөбүз:

Blockchain: кандай PoC куруу керек?

Smart Contract орнотуу транзакциясын карап көрөлү:

Blockchain: кандай PoC куруу керек?

Каналыбыз тууралуу толук маалыматты карап көрөлү:

Blockchain: кандай PoC куруу керек?

Натыйжада, биз IBM булутундагы блокчейн тармагынын төмөнкү диаграммасын алабыз. Диаграмма ошондой эле виртуалдык серверде Amazon булутунда иштеген демо программасын көрсөтөт (бул тууралуу кийинки бөлүмдө):

Blockchain: кандай PoC куруу керек?

Hyperledger Fabric API чалуулары үчүн GUI түзүү

Hyperledger Fabric төмөнкү үчүн колдонула турган API'ге ээ:

  • Канал түзүү;
  • Каналга туташуулар;
  • Каналда акылдуу келишимдерди орнотуу жана инстанциялоо;
  • Чалуу транзакциялары;
  • Блокчейн боюнча маалымат сураңыз.

Колдонмо иштеп чыгуу

Биздин демо программада биз API'ди транзакцияларды чакыруу жана маалыматты талап кылуу үчүн гана колдонобуз, анткени Биз калган кадамдарды IBM blockchain платформасын колдонуп бүттүк. Биз стандарттык технология стекинин жардамы менен GUI жазабыз: Express.js + Vue.js + Node.js. Заманбап веб тиркемелерди түзүүнү кантип баштоо керектиги жөнүндө өзүнчө макала жаза аласыз. Бул жерде мен эң жактырган лекциялар сериясына шилтеме калтырам: Vue.js & Express.js аркылуу Full Stack Web App. Натыйжада Google'дун Материалдык Дизайн стилиндеги тааныш графикалык интерфейси бар кардар-сервер колдонмосу. Кардар менен сервердин ортосундагы REST API бир нече чалуулардан турат:

  • HyperledgerDemo/v1/init - блокчейнди инициализациялоо;
  • HyperledgerDemo/v1/accounts/list — бардык эсептердин тизмесин алуу;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 — Боб эсебин түзүү;
  • HyperledgerDemo/v1/info?account=Bob — Боб аккаунту жөнүндө маалымат алуу;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - Бобдон Алисага эки тыйын которуу;
  • HyperledgerDemo/v1/disconnect - блокчейн менен байланышты жабуу.

камтылган мисалдар менен API сүрөттөлүшү Почтачы сайты - HTTP API сыноо үчүн белгилүү программа.

Amazon булутундагы демо колдонмо

Мен тиркемени Amazonга жүктөдүм, анткени... IBM дагы эле менин каттоо эсебимди жаңыртып, виртуалдык серверлерди түзүүгө уруксат бере алган жок. Доменге алчаны кантип кошуу керек: www.citcoin.info. Мен серверди бир азга иштетем, анан өчүрөм, анткени... ижарага цент тамчылап жатат, ал эми циткоин монеталары биржада али сатыла элек) Иштин логикасы түшүнүктүү болушу үчүн мен макалага демонстрациянын скриншотторун кошуп жатам. Демо колдонмо болот:

  • Блокчейнди инициализациялоо;
  • Каттоо эсебин түзүү (бирок азыр сиз жаңы Аккаунт түзө албайсыз, анткени блокчейнде акылдуу келишимде көрсөтүлгөн эсептердин максималдуу санына жетти);
  • Эсептердин тизмесин алуу;
  • Элис, Боб жана Алекстин ортосунда citcoin тыйындарын которуу;
  • Окуяларды кабыл алуу (бирок азыр окуяларды көрсөтүүнүн жолу жок, ошондуктан жөнөкөйлүк үчүн интерфейсте окуялар колдоого алынбайт деп айтылат);
  • Аракеттер журналы.

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

Blockchain: кандай PoC куруу керек?

Андан кийин, биз эсебибизди түзөбүз, баланс менен убакытты текке кетирбеңиз:

Blockchain: кандай PoC куруу керек?

Биз бардык жеткиликтүү эсептердин тизмесин алабыз:

Blockchain: кандай PoC куруу керек?

Биз жөнөтүүчүнү жана алуучуну тандап, алардын балансын алабыз. Эгерде жөнөтүүчү менен алуучу бирдей болсо, анда анын эсеби толукталат:

Blockchain: кандай PoC куруу керек?

Журналда биз транзакциялардын аткарылышын көзөмөлдөйбүз:

Blockchain: кандай PoC куруу керек?

Чынында, мунун баары демо программасы менен. Төмөндө сиз биздин блокчейндеги транзакциябызды көрө аласыз:

Blockchain: кандай PoC куруу керек?

Ал эми бүтүмдөрдүн жалпы тизмеси:

Blockchain: кандай PoC куруу керек?

Муну менен биз Citcoin тармагын түзүү үчүн PoC ишке ашырууну ийгиликтүү аяктадык. Citcoin монеталарды которуунун толук кандуу тармагына айлануусу үчүн дагы эмне кылуу керек? Абдан аз:

  • Эсеп түзүү стадиясында жеке/ачык ачкычтын генерациясын ишке ашырыңыз. Купуя ачкыч аккаунттун колдонуучусунда сакталышы керек, ачык ачкыч блокчейнде сакталышы керек.
  • Колдонуучуну идентификациялоо үчүн аты эмес, ачык ачкыч колдонулган монета которууну жасаңыз.
  • Колдонуучудан серверге өтүүчү транзакцияларды анын купуя ачкычы менен шифрлаңыз.

жыйынтыктоо

Биз Citcoin тармагын төмөнкү функциялар менен ишке ашырдык: эсеп кошуу, балансты алуу, эсебиңизди толуктоо, бир эсептен экинчисине тыйындарды которуу. Ошентип, PoC куруу бизге эмнеге кетти?

  • Сиз жалпысынан blockchain жана өзгөчө Hyperledger Fabric изилдөө керек;
  • IBM же Amazon булуттарын колдонууну үйрөнүңүз;
  • JS программалоо тилин жана кээ бир веб алкактарын үйрөнүңүз;
  • Эгер кээ бир маалыматтар блокчейнде эмес, өзүнчө маалымат базасында сакталышы керек болсо, анда, мисалы, PostgreSQL менен интеграциялоону үйрөнүңүз;
  • Акыркысы, бирок эң аз дегенде - Linux билимсиз заманбап дүйнөдө жашай албайсыз!)

Албетте, бул ракета илими эмес, бирок сиз көп иштешиңиз керек!

GitHubдагы булактар

Булактарды коюшту GitHub. Репозиторийдин кыскача баяндамасы:
Каталог «Server» — Node.js сервери
Каталог «керектөөчү» — Node.js кардары
Каталог «blockchain"(параметр маанилери жана ачкычтар, албетте, иштебейт жана мисал катары гана берилген):

  • келишим — акылдуу келишимдин баштапкы коду
  • капчык — Hyperledger Fabric API колдонуу үчүн колдонуучу ачкычтары.
  • *.cds - акылдуу келишимдердин түзүлгөн версиялары
  • *.json файлдары - Hyperledger Fabric API колдонуу үчүн конфигурация файлдарынын мисалдары

Бул башталышы гана!

Source: www.habr.com

Комментарий кошуу