Blockchain: anong PoC ang dapat nating itayo?

Ang iyong mga mata ay natatakot at ang iyong mga kamay ay nangangati!

Sa mga nakaraang artikulo, tinalakay namin ang mga teknolohiya kung saan itinayo ang mga blockchain (Ano ang dapat nating bumuo ng isang blockchain?) at mga kaso na maaaring ipatupad sa kanilang tulong (Bakit tayo dapat bumuo ng isang kaso?). Oras na para magtrabaho gamit ang iyong mga kamay! Upang ipatupad ang mga piloto at PoC (Proof of Concept), mas gusto kong gamitin ang mga ulap, dahil... maaari silang ma-access mula sa kahit saan sa mundo at, madalas, hindi na kailangang mag-aksaya ng oras sa nakakapagod na pag-install ng kapaligiran, dahil May mga preset na configuration. Kaya, gumawa tayo ng isang bagay na simple, halimbawa, isang network para sa paglilipat ng mga barya sa pagitan ng mga kalahok at tawagin natin itong Bitcoin. Para dito gagamitin namin ang IBM cloud at ang universal blockchain Hyperledger Fabric. Una, alamin natin kung bakit tinawag na unibersal na blockchain ang Hyperledger Fabric?

Blockchain: anong PoC ang dapat nating itayo?

Hyperledger Fabric - isang unibersal na blockchain

Sa pangkalahatan, ang isang unibersal na sistema ng impormasyon ay:

  • Isang set ng mga server at isang software core na gumaganap ng lohika ng negosyo;
  • Mga interface para sa pakikipag-ugnayan sa system;
  • Mga tool para sa pagpaparehistro, pagpapatunay at awtorisasyon ng mga device/tao;
  • Database na nag-iimbak ng data ng pagpapatakbo at archival:

Blockchain: anong PoC ang dapat nating itayo?

Ang opisyal na bersyon ng kung ano ang Hyperledger Fabric ay mababasa sa Online, at sa madaling salita, ang Hyperledger Fabric ay isang opensource platform na nagbibigay-daan sa iyong bumuo ng mga pribadong blockchain at magsagawa ng mga arbitrary na smart contract na nakasulat sa JS at Go programming language. Tingnan natin nang detalyado ang arkitektura ng Hyperledger Fabric at siguraduhin na ito ay isang unibersal na sistema na mayroon lamang mga detalye para sa pag-iimbak at pagtatala ng data. Ang pagiging tiyak ay ang data, tulad ng sa lahat ng mga blockchain, ay naka-imbak sa mga bloke na inilagay sa blockchain lamang kung ang mga kalahok ay umabot sa isang pinagkasunduan at pagkatapos na i-record ang data ay hindi maaaring tahimik na itama o tanggalin.

Arkitektura ng Tela ng Hyperledger

Ang diagram ay nagpapakita ng Hyperledger Fabric architecture:

Blockchain: anong PoC ang dapat nating itayo?

Mga Organisasyon β€” ang mga organisasyon ay naglalaman ng mga kapantay, i.e. umiiral ang blockchain dahil sa suporta ng mga organisasyon. Maaaring maging bahagi ng iisang channel ang iba't ibang organisasyon.

channel β€” isang lohikal na istraktura na pinag-iisa ang mga kapantay sa mga grupo, i.e. ang blockchain ay tinukoy. Ang Hyperledger Fabric ay maaaring sabay na magproseso ng maramihang mga blockchain na may iba't ibang lohika ng negosyo.

Membership Services Provider (MSP) ay isang CA (Certificate Authority) para sa pagbibigay ng pagkakakilanlan at pagtatalaga ng mga tungkulin. Upang lumikha ng isang node, kailangan mong makipag-ugnayan sa MSP.

Mga peer node β€” i-verify ang mga transaksyon, iimbak ang blockchain, isagawa ang mga matalinong kontrata at makipag-ugnayan sa mga application. Ang mga kapantay ay may pagkakakilanlan (digital certificate), na inisyu ng MSP. Hindi tulad ng Bitcoin o Etherium network, kung saan ang lahat ng node ay may pantay na karapatan, sa Hyperledger Fabric node ay gumaganap ng iba't ibang tungkulin:

  • Peer siguro nag-eendorso ng kasamahan (EP) at magsagawa ng mga matalinong kontrata.
  • Nagsasagawa ng peer (CP) - i-save lamang ang data sa blockchain at i-update ang "World state".
  • Anchor Peer (AP) - kung maraming organisasyon ang lumahok sa blockchain, ang mga anchor peer ay ginagamit para sa komunikasyon sa pagitan nila. Ang bawat organisasyon ay dapat magkaroon ng isa o higit pang anchor peer. Gamit ang AP, maaaring makakuha ng impormasyon ang sinumang peer sa isang organisasyon tungkol sa lahat ng peer sa ibang mga organisasyon. Ginagamit upang i-synchronize ang impormasyon sa pagitan ng mga AP protocol ng tsismis.
  • Leader Peer β€” kung ang isang organisasyon ay may ilang mga kapantay, kung gayon ang pinuno lamang ng kapantay ang makakatanggap ng mga bloke mula sa serbisyo ng Pag-order at ibibigay ang mga ito sa iba pang mga kapantay. Ang pinuno ay maaaring tukuyin nang static o dynamic na mapili ng mga kapantay sa organisasyon. Ginagamit din ang gossip protocol upang i-synchronize ang impormasyon tungkol sa mga pinuno.

Mga ari-arian β€” mga entity na may halaga at nakaimbak sa blockchain. Mas partikular, ito ay data ng key-value sa format na JSON. Ito ang data na ito na naitala sa Blockchain. Mayroon silang kasaysayan, na nakaimbak sa blockchain, at kasalukuyang estado, na nakaimbak sa database ng β€œWorld state”. Ang mga istruktura ng data ay arbitraryong pinupunan depende sa mga gawain sa negosyo. Walang kinakailangang mga field, ang tanging rekomendasyon ay ang mga asset ay dapat may may-ari at mahalaga.

ledger β€” binubuo ng Blockchain at ang Word state database, na nag-iimbak ng kasalukuyang estado ng mga asset. Ang estado ng mundo ay gumagamit ng LevelDB o CouchDB.

Smart na kontrata β€” gamit ang mga matalinong kontrata, ipinatupad ang lohika ng negosyo ng system. Sa Hyperledger Fabric, ang mga matalinong kontrata ay tinatawag na chaincode. Gamit ang chaincode, tinukoy ang mga asset at transaksyon sa ibabaw nito. Sa mga teknikal na termino, ang mga smart contract ay mga software module na ipinapatupad sa JS o Go programming language.

Patakaran sa pag-endorso β€” para sa bawat chaincode, maaari kang magtakda ng patakaran sa kung gaano karaming mga kumpirmasyon para sa isang transaksyon ang dapat asahan at kung kanino. Kung hindi nakatakda ang patakaran, ang default ay: "dapat kumpirmahin ng sinumang miyembro ng anumang organisasyon sa channel ang transaksyon." Mga halimbawa ng mga patakaran:

  • Ang transaksyon ay dapat na aprubahan ng sinumang tagapangasiwa ng organisasyon;
  • Dapat kumpirmahin ng sinumang miyembro o kliyente ng organisasyon;
  • Dapat kumpirmahin ng anumang peer na organisasyon.

Serbisyo ng pag-order β€” nag-pack ng mga transaksyon sa mga bloke at ipinapadala ang mga ito sa mga kapantay sa channel. Ginagarantiyahan ang paghahatid ng mga mensahe sa lahat ng mga kapantay sa network. Ginagamit para sa mga sistemang pang-industriya Kafka message broker, para sa pagpapaunlad at pagsubok Solo.

CallFlow

Blockchain: anong PoC ang dapat nating itayo?

  • Nakikipag-ugnayan ang application sa Hyperledger Fabric gamit ang Go, Node.js o Java SDK;
  • Lumilikha ang kliyente ng tx na transaksyon at ipinapadala ito sa mga nag-eendorso na mga kapantay;
  • Bine-verify ng Peer ang lagda ng kliyente, kinukumpleto ang transaksyon, at ipapadala ang pirma sa pag-endorso pabalik sa kliyente. Ang Chaincode ay isinasagawa lamang sa nag-eendorsong peer, at ang resulta ng pagpapatupad nito ay ipinapadala sa lahat ng peer. Ang algorithm ng trabaho na ito ay tinatawag na PBFT (Practical Byzantine Fault Tolerant) consensus. Naiiba mula sa klasikong BFT ang katotohanan na ang mensahe ay ipinadala at ang kumpirmasyon ay inaasahan hindi mula sa lahat ng mga kalahok, ngunit mula lamang sa isang tiyak na hanay;
  • Matapos matanggap ng kliyente ang bilang ng mga tugon na naaayon sa patakaran sa pag-endorso, ipinapadala niya ang transaksyon sa serbisyo ng Pag-order;
  • Ang serbisyo ng Pag-order ay bumubuo ng isang bloke at ipinapadala ito sa lahat ng committing peer. Tinitiyak ng serbisyo ng pag-order ang sunud-sunod na pagtatala ng mga bloke, na nag-aalis ng tinatawag na ledger fork (tingnan ang seksyong "Mga tinidor");
  • Makakatanggap ang mga kapantay ng block, suriin muli ang patakaran sa pag-endorso, isulat ang block sa blockchain at baguhin ang estado sa "World state" DB.

Yung. Nagreresulta ito sa isang dibisyon ng mga tungkulin sa pagitan ng mga node. Tinitiyak nito na ang blockchain ay scalable at secure:

  • Ang mga matalinong kontrata (chaincode) ay gumaganap ng pag-eendorso ng mga kapantay. Tinitiyak nito ang pagiging kumpidensyal ng mga matalinong kontrata, dahil hindi ito iniimbak ng lahat ng kalahok, ngunit sa pamamagitan lamang ng pag-eendorso ng mga kasamahan.
  • Ang pag-order ay dapat gumana nang mabilis. Ito ay tinitiyak ng katotohanan na ang Pag-order ay bumubuo lamang ng isang bloke at ipinapadala ito sa isang nakapirming hanay ng mga kapantay na pinuno.
  • Ang committing peers ay nag-iimbak lamang ng blockchain - maaaring marami sa kanila at hindi sila nangangailangan ng maraming kapangyarihan at agarang operasyon.

Higit pang mga detalye sa mga solusyon sa arkitektura ng Hyperledger Fabric at kung bakit ito gumagana sa ganitong paraan at hindi kung hindi man ay matatagpuan dito: Pinagmulan ng Arkitektura o dito: Hyperledger Fabric: Isang Distributed Operating System para sa Mga Pinahihintulutang Blockchain.

Kaya, ang Hyperledger Fabric ay isang tunay na unibersal na sistema kung saan maaari mong:

  • Magpatupad ng di-makatwirang lohika ng negosyo gamit ang mekanismo ng matalinong kontrata;
  • Mag-record at tumanggap ng data mula sa database ng blockchain sa format na JSON;
  • Bigyan at i-verify ang API access gamit ang Certificate Authority.

Ngayong nauunawaan na natin ang kaunti tungkol sa mga detalye ng Hyperledger Fabric, sa wakas ay gumawa tayo ng kapaki-pakinabang!

Pag-deploy ng blockchain

Pahayag ng problema

Ang gawain ay upang ipatupad ang Citcoin network na may mga sumusunod na function: lumikha ng isang account, kumuha ng balanse, itaas ang iyong account, maglipat ng mga barya mula sa isang account patungo sa isa pa. Gumuhit tayo ng isang object model, na higit nating ipapatupad sa isang smart contract. Kaya, magkakaroon tayo ng mga account na natukoy sa pamamagitan ng mga pangalan at naglalaman ng balanse, at isang listahan ng mga account. Ang mga account at isang listahan ng mga account ay, sa mga tuntunin ng mga asset ng Hyperledger Fabric. Alinsunod dito, mayroon silang kasaysayan at kasalukuyang estado. Susubukan kong iguhit ito nang malinaw:

Blockchain: anong PoC ang dapat nating itayo?

Ang mga nangungunang numero ay ang kasalukuyang estado, na nakaimbak sa database ng "World state". Sa ibaba ng mga ito ay mga figure na nagpapakita ng kasaysayan na nakaimbak sa blockchain. Ang kasalukuyang estado ng mga asset ay binago ng mga transaksyon. Ang Asset ay nagbabago lamang sa kabuuan, kaya bilang resulta ng transaksyon, isang bagong object ang nalikha, at ang kasalukuyang halaga ng asset ay napupunta sa kasaysayan.

IBM Cloud

Gumawa kami ng account sa IBM cloud. Upang magamit ang blockchain platform, dapat itong i-upgrade sa Pay-As-You-Go. Maaaring hindi mabilis ang prosesong ito, dahil... Humihiling ang IBM ng karagdagang impormasyon at manu-manong i-verify ito. Sa isang positibong tala, maaari kong sabihin na ang IBM ay may mahusay na mga materyales sa pagsasanay na nagbibigay-daan sa iyong i-deploy ang Hyperledger Fabric sa kanilang cloud. Nagustuhan ko ang sumusunod na serye ng mga artikulo at mga halimbawa:

Ang mga sumusunod ay mga screenshot ng platform ng IBM Blockchain. Ito ay hindi isang pagtuturo kung paano lumikha ng isang blockchain, ngunit isang pagpapakita lamang ng saklaw ng gawain. Kaya, para sa aming mga layunin, gumawa kami ng isang Organisasyon:

Blockchain: anong PoC ang dapat nating itayo?

Lumilikha kami ng mga node dito: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: anong PoC ang dapat nating itayo?

Lumilikha kami ng mga user:

Blockchain: anong PoC ang dapat nating itayo?

Gumawa ng Channel at tawagan itong citcoin:

Blockchain: anong PoC ang dapat nating itayo?

Ang Channel ay isang blockchain, kaya nagsisimula ito sa block zero (Genesis block):

Blockchain: anong PoC ang dapat nating itayo?

Pagsusulat ng isang Matalinong Kontrata

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

Sa madaling salita, dapat na malinaw ang lahat dito:

  • Mayroong ilang mga function (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) na tatawagan ng demo program gamit ang Hyperledger Fabric API.
  • Ang SendFrom at RefillBalance function ay bumubuo ng mga Event na matatanggap ng demo program.
  • Ang instantiate function ay tinatawag nang isang beses kapag ang isang smart contract ay na-instantiate. Sa katunayan, ito ay tinatawag na hindi lamang isang beses, ngunit sa bawat oras na ang bersyon ng matalinong kontrata ay nagbabago. Samakatuwid, ang pagsisimula ng isang listahan na may isang walang laman na hanay ay isang masamang ideya, dahil Ngayon, kapag binago namin ang bersyon ng smart contract, mawawala ang kasalukuyang listahan. Pero okay lang, nag-aaral lang ako).
  • Ang mga account at isang listahan ng mga account ay mga istruktura ng data ng JSON. Ginagamit ang JS para sa pagmamanipula ng data.
  • Makukuha mo ang kasalukuyang halaga ng isang asset gamit ang getState function call, at i-update ito gamit ang putState.
  • Kapag lumilikha ng isang Account, ang AddAccount function ay tinatawag, kung saan ang isang paghahambing ay ginawa para sa maximum na bilang ng mga account sa blockchain (maxAccounts = 5). At narito ang isang hamba (napansin mo ba?), na humahantong sa isang walang katapusang pagtaas sa bilang ng mga account. Ang ganitong mga pagkakamali ay dapat iwasan)

Susunod, nilo-load namin ang matalinong kontrata sa Channel at i-instantiate ito:

Blockchain: anong PoC ang dapat nating itayo?

Tingnan natin ang transaksyon para sa pag-install ng Smart Contract:

Blockchain: anong PoC ang dapat nating itayo?

Tingnan natin ang mga detalye tungkol sa ating Channel:

Blockchain: anong PoC ang dapat nating itayo?

Bilang resulta, nakukuha namin ang sumusunod na diagram ng isang blockchain network sa IBM cloud. Ang diagram ay nagpapakita rin ng isang demo program na tumatakbo sa Amazon cloud sa isang virtual server (higit pa tungkol dito sa susunod na seksyon):

Blockchain: anong PoC ang dapat nating itayo?

Paglikha ng GUI para sa mga tawag sa Hyperledger Fabric API

Ang Hyperledger Fabric ay may API na maaaring magamit upang:

  • Lumikha ng channel;
  • Mga koneksyon sa peer to channel;
  • Pag-install at instantiation ng mga matalinong kontrata sa channel;
  • Mga transaksyon sa pagtawag;
  • Humiling ng impormasyon sa blockchain.

Pag-unlad ng aplikasyon

Sa aming demo program gagamitin lang namin ang API para tumawag sa mga transaksyon at humiling ng impormasyon, dahil Nakumpleto na namin ang mga natitirang hakbang gamit ang IBM blockchain platform. Sumulat kami ng GUI gamit ang isang standard na stack ng teknolohiya: Express.js + Vue.js + Node.js. Maaari kang magsulat ng isang hiwalay na artikulo sa kung paano simulan ang paglikha ng mga modernong web application. Dito ako mag-iiwan ng link sa serye ng mga lektura na pinakanagustuhan ko: Full Stack Web App gamit ang Vue.js at Express.js. Ang resulta ay isang client-server na application na may pamilyar na graphical na interface sa istilo ng Material Design ng Google. Ang REST API sa pagitan ng kliyente at server ay binubuo ng ilang mga tawag:

  • HyperledgerDemo/v1/init - simulan ang blockchain;
  • HyperledgerDemo/v1/accounts/list β€” kumuha ng listahan ng lahat ng account;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 β€” lumikha ng Bob account;
  • HyperledgerDemo/v1/info?account=Bob β€” kumuha ng impormasyon tungkol sa Bob account;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 β€” maglipat ng dalawang barya mula kay Bob patungo kay Alice;
  • HyperledgerDemo/v1/disconnect - isara ang koneksyon sa blockchain.

Paglalarawan ng API na may kasamang mga halimbawa sa Website ng postman - isang kilalang programa para sa pagsubok ng HTTP API.

Demo application sa Amazon cloud

In-upload ko ang application sa Amazon dahil... Hindi pa rin na-upgrade ng IBM ang aking account at pinapayagan akong lumikha ng mga virtual server. Paano magdagdag ng cherry sa domain: www.citcoin.info. Pananatilihin kong naka-on ang server saglit, pagkatapos ay i-off ito, dahil... tumutulo ang sentimo sa upa, at ang mga citcoin coins ay hindi pa nakalista sa stock exchange) Sinasama ko sa artikulo ang mga screenshot ng demo para malinaw ang lohika ng trabaho. Ang demo application ay maaaring:

  • Simulan ang blockchain;
  • Gumawa ng Account (ngunit hindi ka na makakagawa ng bagong Account, dahil ang maximum na bilang ng mga account na tinukoy sa smart contract ay naabot na sa blockchain);
  • Tumanggap ng listahan ng mga Account;
  • Maglipat ng mga citcoin coins sa pagitan nina Alice, Bob at Alex;
  • Tumanggap ng mga kaganapan (ngunit ngayon ay walang paraan upang ipakita ang mga kaganapan, kaya para sa pagiging simple, ang interface ay nagsasabi na ang mga kaganapan ay hindi suportado);
  • Mag-log ng mga aksyon.

Una naming sinisimulan ang blockchain:

Blockchain: anong PoC ang dapat nating itayo?

Susunod, lumikha kami ng aming account, huwag mag-aksaya ng oras sa balanse:

Blockchain: anong PoC ang dapat nating itayo?

Kumuha kami ng listahan ng lahat ng available na account:

Blockchain: anong PoC ang dapat nating itayo?

Pinipili namin ang nagpadala at tatanggap, at kunin ang kanilang mga balanse. Kung ang nagpadala at tatanggap ay pareho, ang kanyang account ay mapupunan muli:

Blockchain: anong PoC ang dapat nating itayo?

Sa log, sinusubaybayan namin ang pagpapatupad ng mga transaksyon:

Blockchain: anong PoC ang dapat nating itayo?

Sa totoo lang, iyon lang ang kasama sa demo program. Sa ibaba makikita mo ang aming transaksyon sa blockchain:

Blockchain: anong PoC ang dapat nating itayo?

At ang pangkalahatang listahan ng mga transaksyon:

Blockchain: anong PoC ang dapat nating itayo?

Sa pamamagitan nito, matagumpay naming nakumpleto ang pagpapatupad ng PoC upang lumikha ng network ng Citcoin. Ano pa ang kailangang gawin para maging ganap na network ang Citcoin para sa paglilipat ng mga barya? Napaka konti:

  • Sa yugto ng paggawa ng account, ipatupad ang pagbuo ng pribado / pampublikong key. Ang pribadong susi ay dapat na nakaimbak sa gumagamit ng account, ang pampublikong susi ay dapat na nakaimbak sa blockchain.
  • Gumawa ng coin transfer kung saan ang isang pampublikong key, sa halip na isang pangalan, ay ginagamit upang makilala ang user.
  • I-encrypt ang mga transaksyon mula sa user patungo sa server gamit ang kanyang pribadong key.

Konklusyon

Ipinatupad namin ang network ng Citcoin na may mga sumusunod na function: magdagdag ng account, kumuha ng balanse, itaas ang iyong account, maglipat ng mga barya mula sa isang account patungo sa isa pa. Kaya, ano ang gastos sa amin upang bumuo ng isang PoC?

  • Kailangan mong pag-aralan ang blockchain sa pangkalahatan at Hyperledger Fabric sa partikular;
  • Matutong gumamit ng IBM o Amazon clouds;
  • Alamin ang JS programming language at ilang web framework;
  • Kung ang ilang data ay kailangang itago hindi sa blockchain, ngunit sa isang hiwalay na database, pagkatapos ay matutong isama, halimbawa, sa PostgreSQL;
  • At panghuli ngunit hindi bababa sa - hindi ka mabubuhay sa modernong mundo nang walang kaalaman sa Linux!)

Siyempre, hindi ito rocket science, ngunit kailangan mong magtrabaho nang husto!

Mga mapagkukunan sa GitHub

Inilagay ang mga mapagkukunan GitHub. Maikling paglalarawan ng repositoryo:
Catalog Β«serverΒ» β€” Node.js server
Catalog Β«klienteΒ» β€” Node.js client
Catalog Β«blockchain"(Ang mga halaga ng parameter at mga susi, siyempre, ay hindi gumagana at ibinigay lamang bilang isang halimbawa):

  • kontrata β€” source code ng matalinong kontrata
  • wallet β€” mga susi ng gumagamit para sa paggamit ng Hyperledger Fabric API.
  • *.cds - pinagsama-samang mga bersyon ng mga matalinong kontrata
  • *.json file - mga halimbawa ng configuration file para sa paggamit ng Hyperledger Fabric API

Ito ay simula pa lamang!

Pinagmulan: www.habr.com

Magdagdag ng komento