Seti ya ma seva ndi maziko a mapulogalamu omwe amapanga malingaliro abizinesi;
Mawonekedwe okhudzana ndi dongosolo;
Zida zolembera, kutsimikizira ndi kuvomereza zipangizo / anthu;
Kusunga deta yogwira ntchito ndi zakale:
Mtundu wovomerezeka wa Hyperledger Fabric ukhoza kuwerengedwa malo, ndipo mwachidule, Hyperledger Fabric ndi nsanja yotseguka yomwe imakulolani kuti mupange ma blockchains apadera ndikuchita mapangano anzeru olembedwa m'zilankhulo za JS ndi Go. Tiyeni tiwone mwatsatanetsatane kamangidwe ka Hyperledger Fabric ndikuwonetsetsa kuti iyi ndi dongosolo lapadziko lonse lapansi lomwe lili ndi zenizeni zosungira ndi kujambula deta. Chodziwika bwino ndi chakuti deta, monga mu blockchains onse, imasungidwa muzitsulo zomwe zimayikidwa pa blockchain pokhapokha ngati ophunzira afika pa mgwirizano ndipo atatha kujambula deta sangathe kukonzedwa mwakachetechete kapena kuchotsedwa.
Hyperledger Fabric Architecture
Chithunzichi chikuwonetsa kapangidwe ka Hyperledger Fabric:
Mipingo - mabungwe ali ndi anzawo, i.e. blockchain ilipo chifukwa chothandizidwa ndi mabungwe. Mabungwe osiyanasiyana akhoza kukhala mbali ya njira imodzi.
Channel - dongosolo lomveka lomwe limagwirizanitsa anzawo m'magulu, i.e. blockchain yafotokozedwa. Hyperledger Fabric imatha kukonza nthawi imodzi ma blockchain angapo okhala ndi malingaliro osiyanasiyana abizinesi.
Wothandizira Umembala (MSP) ndi CA (Certificate Authority) popereka zidziwitso ndikugawa maudindo. Kuti mupange node, muyenera kulumikizana ndi MSP.
Zolemba za anzawo - Tsimikizani zochitika, sungani blockchain, chitani mapangano anzeru ndikulumikizana ndi mapulogalamu. Anzako ali ndi chizindikiritso (satifiketi ya digito), yomwe imaperekedwa ndi MSP. Mosiyana ndi netiweki ya Bitcoin kapena Etherium, pomwe ma node onse ali ndi ufulu wofanana, mu Hyperledger Fabric node zimagwira ntchito zosiyanasiyana:
Kudzipereka kwa anzawo (CP) - ingosungani deta mu blockchain ndikusintha "dziko lonse lapansi".
Anchor Peer (AP) - ngati mabungwe angapo atenga nawo gawo mu blockchain, ndiye kuti anzawo a nangula amagwiritsidwa ntchito polumikizana pakati pawo. Gulu lirilonse liyenera kukhala ndi mnzako mmodzi kapena angapo. Pogwiritsa ntchito AP, mnzake aliyense m'bungwe atha kudziwa zambiri za anzawo m'mabungwe ena. Amagwiritsidwa ntchito kulumikiza zambiri pakati pa ma AP miseche protocol.
Mtsogoleri Peer - ngati bungwe liri ndi anzawo angapo, ndiye mtsogoleri yekha wa anzawo adzalandira midadada kuchokera ku utumiki wa Kuyitanitsa ndikuwapatsa anzawo ena onse. Mtsogoleriyo atha kufotokozedwa mokhazikika kapena kusankhidwa mokhazikika ndi anzawo m'bungwe. Ndondomeko ya miseche imagwiritsidwanso ntchito kulumikiza zambiri za atsogoleri.
Zosowa - mabungwe omwe ali ndi mtengo ndipo amasungidwa pa blockchain. Makamaka, iyi ndi data yamtengo wapatali mumtundu wa JSON. Ndi deta iyi yomwe imalembedwa mu Blockchain. Iwo ali ndi mbiri yakale, yomwe imasungidwa mu blockchain, ndi dziko lamakono, lomwe limasungidwa mu "World state" database. Ma data amadzazidwa mosasamala kutengera ntchito zamabizinesi. Palibe minda yofunikira, malingaliro okhawo ndikuti katundu ayenera kukhala ndi eni ake ndikukhala ofunikira.
Ledger - ili ndi Blockchain ndi Word state database, yomwe imasunga zomwe zilipo panopa. Dziko lapansi limagwiritsa ntchito LevelDB kapena CouchDB.
Makhalidwe abwino - Pogwiritsa ntchito makontrakitala anzeru, malingaliro abizinesi adongosolo amakwaniritsidwa. Mu Hyperledger Fabric, mapangano anzeru amatchedwa chaincode. Pogwiritsa ntchito chaincode, katundu ndi zochitika pa iwo zimatchulidwa. M'mawu aukadaulo, makontrakitala anzeru ndi ma module apulogalamu omwe amakhazikitsidwa m'zilankhulo za JS kapena Go.
Ndondomeko yotsimikizira - pa chaincode iliyonse, mutha kukhazikitsa ndondomeko ya kuchuluka kwa zitsimikizo zomwe ziyenera kuyembekezera komanso kuchokera kwa ndani. Ngati lamuloli silinakhazikitsidwe, ndiye kuti chokhazikika ndi: "ntchitoyo iyenera kutsimikiziridwa ndi membala aliyense wa bungwe lililonse panjira." Zitsanzo za ndondomeko:
Ntchitoyi iyenera kuvomerezedwa ndi woyang'anira aliyense wa bungwe;
Ayenera kutsimikiziridwa ndi membala aliyense kapena kasitomala wa bungwe;
Iyenera kutsimikiziridwa ndi gulu lililonse la anzawo.
Kuyitanitsa utumiki - amalongedza zochitika mu midadada ndikuzitumiza kwa anzawo panjira. Zimatsimikizira kutumizidwa kwa mauthenga kwa anzanu onse pa intaneti. Amagwiritsidwa ntchito pamakampani Kafka message broker, kwa chitukuko ndi kuyesa payekha.
Wothandizira amapanga malonda a tx ndikutumiza kwa anzawo ovomerezeka;
Peer imatsimikizira siginecha ya kasitomala, kumaliza ntchitoyo, ndikutumiza siginecha yotsimikizira kwa kasitomala. Chaincode imangoperekedwa kwa mnzake wovomerezeka, ndipo zotsatira zake zimatumizidwa kwa anzawo onse. Algorithm iyi ya ntchito imatchedwa PBFT (Practical Byzantine Fault Tolerant) mgwirizano. Zimasiyana ndi BFT yapamwamba mfundo yakuti uthengawo umatumizidwa ndi kutsimikiziridwa sikuyembekezeredwa kuchokera kwa onse otenga nawo mbali, koma kuchokera ku gulu linalake;
Wothandizirayo atalandira chiwerengero cha mayankho omwe akugwirizana ndi ndondomeko yovomerezeka, amatumiza ntchitoyo ku Service Ordering;
Zotsatirazi ndizithunzi za nsanja ya IBM Blockchain. Ili si malangizo amomwe mungapangire blockchain, koma ndikuwonetsa kukula kwa ntchitoyo. Chifukwa chake, pazolinga zathu, timapanga Gulu limodzi:
Timapanga ma node mmenemo: Orderer CA, Org1 CA, Orderer Peer:
Timalenga ogwiritsa ntchito:
Pangani Channel ndikuyitcha citcoin:
Kwenikweni Channel ndi blockchain, kotero imayamba ndi block zero (Genesis block):
Kulemba Mgwirizano Wanzeru
/*
* 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;
Zotsatira zake, timapeza chithunzi chotsatira cha network blockchain mumtambo wa IBM. Chithunzichi chikuwonetsanso pulogalamu yachiwonetsero yomwe ikuyenda mumtambo wa Amazon pa seva yeniyeni (zambiri za izo mu gawo lotsatira):
Kupanga GUI ya Hyperledger Fabric API mafoni
Hyperledger Fabric ili ndi API yomwe ingagwiritsidwe ntchito ku:
Pangani njira;
Kulumikizana kumayang'ana ku njira;
Kukhazikitsa ndi kukhazikitsa mapangano anzeru munjira;
Kuyitana zochitika;
Funsani zambiri za blockchain.
Kupititsa patsogolo ntchito
Mu pulogalamu yathu yowonetsera tidzagwiritsa ntchito API kokha kuyitana zochitika ndikupempha zambiri, chifukwa Tatsiriza kale masitepe otsalawo pogwiritsa ntchito nsanja ya IBM blockchain. Timalemba GUI pogwiritsa ntchito stack yokhazikika yaukadaulo: Express.js + Vue.js + Node.js. Mukhoza kulemba nkhani ina ya momwe mungayambitsire kupanga mapulogalamu amakono a intaneti. Apa ndikusiya ulalo wamaphunziro angapo omwe ndimakonda kwambiri: Full Stack Web App pogwiritsa ntchito Vue.js & Express.js. Zotsatira zake ndi pulogalamu ya seva ya kasitomala yokhala ndi mawonekedwe odziwika bwino a Google Material Design. REST API pakati pa kasitomala ndi seva imakhala ndi mafoni angapo: