Amehlo akho esaba futhi izandla zakho ziyaluma!
Ezihlokweni ezedlule, sibhekane nobuchwepheshe okwakhiwa kubo ama-blockchains (
Indwangu ye-Hyperledger - i-blockchain yendawo yonke
Ngokuvamile, isistimu yolwazi jikelele yile:
- Isethi yamaseva kanye nesoftware ewumgogodla owenza umqondo webhizinisi;
- Izixhumi ezibonakalayo zokusebenzelana nesistimu;
- Amathuluzi okubhaliswa, ukuqinisekiswa nokugunyazwa kwamadivayisi/abantu;
- Isizindalwazi sigcina idatha yokusebenza neyengobo yomlando:
Inguqulo esemthethweni yalokho okuyi-Hyperledger Fabric ingafundwa kuyo
I-Hyperledger Fabric Architecture
Umdwebo ubonisa i-Hyperledger Fabric Architecture:
Izinhlangano - izinhlangano ziqukethe ontanga, i.e. i-blockchain ikhona ngenxa yokusekelwa yizinhlangano. Izinhlangano ezehlukene zingaba yingxenye yesiteshi esifanayo.
Isiteshi - isakhiwo esinengqondo esihlanganisa ontanga ngamaqembu, i.e. i-blockchain icacisiwe. I-Hyperledger Fabric ingasebenza kanyekanye ama-blockchain amaningi ngomqondo ohlukile webhizinisi.
Umhlinzeki Wezinsizakalo Zobulungu (MSP) iyi-CA (Isiphathimandla Sesitifiketi) sokukhipha ubuwena nokwabela izindima. Ukwakha i-node, udinga ukuxhumana ne-MSP.
Amanodi nontanga - qinisekisa okwenziwayo, gcina i-blockchain, yenza izinkontileka ezihlakaniphile futhi uxhumane nezinhlelo zokusebenza. Ontanga banomazisi (isitifiketi sedijithali), esikhishwa yi-MSP. Ngokungafani nenethiwekhi ye-Bitcoin noma ye-Etherium, lapho wonke ama-node enamalungelo alinganayo, kuma-Hyperledger Fabric nodes adlala izindima ezihlukene:
- Hlanganyela mhlawumbe ukuvuma ontanga (EP) nokwenza izinkontileka ezihlakaniphile.
- Untanga ozibophezele (CP) - gcina kuphela idatha ku-blockchain futhi ubuyekeze "isimo somhlaba".
- I-Anchor Peer (AP) - uma izinhlangano eziningana zibamba iqhaza ku-blockchain, khona-ke ontanga be-anchor basetshenziselwa ukuxhumana phakathi kwabo. Yonke inhlangano kufanele ibe nozakwabo oyedwa noma ngaphezulu. Ngokusebenzisa i-AP, noma yimuphi untanga enhlanganweni angathola ulwazi mayelana nabo bonke ontanga kwezinye izinhlangano. Isetshenziselwa ukuvumelanisa ulwazi phakathi kwama-AP
inhlebo protocol . - Umholi Ntanga - uma inhlangano inontanga abambalwa, khona-ke umholi wontanga kuphela ozothola amabhulokhi avela kusevisi yoku-oda futhi awanikeze abanye ontanga. Umholi angacaciswa ngokwezibalo noma akhethwe ngontanga enhlanganweni. Iphrothokholi yokuhleba iphinde isetshenziselwe ukuvumelanisa ulwazi ngabaholi.
Amafa - izinhlangano ezinenani futhi ezigcinwe ku-blockchain. Ngokucacile, lena idatha yenani elingukhiye ngefomethi ye-JSON. Yile datha eqoshwe ku-Blockchain. Banomlando, ogcinwe ku-blockchain, kanye nesimo samanje, esigcinwe ku-database "yezwe lomhlaba". Izakhiwo zedatha zigcwaliswa ngokungafanele kuye ngemisebenzi yebhizinisi. Azikho izinkambu ezidingekayo, okuwukuphela kwesincomo ukuthi izimpahla kufanele zibe nomnikazi futhi zibe yigugu.
I-Ledger - iqukethe i-Blockchain kanye nesizindalwazi se-Word state, egcina isimo samanje sempahla. Izwe lomhlaba lisebenzisa i-LevelDB noma i-CouchDB.
Inkontileka ye-Smart - kusetshenziswa izinkontileka ezihlakaniphile, umqondo webhizinisi wohlelo uyasetshenziswa. Ku-Hyperledger Fabric, izinkontileka ezihlakaniphile zibizwa nge-chaincode. Kusetshenziswa chaincode, izimpahla kanye transactions phezu kwabo kucacisiwe. Ngokwemibandela yobuchwepheshe, izinkontileka ezihlakaniphile zingamamojula esofthiwe asetshenziswa ngezilimi zokuhlela ze-JS noma ze-Go.
Inqubomgomo yokugunyaza β ku-chaincode ngayinye, ungasetha inqubomgomo yokuthi zingaki iziqinisekiso zokwenziwe okufanele zilindelwe futhi zivela kubani. Uma inqubomgomo ingasethiwe, okuzenzakalelayo kusho ukuthi: "umsebenzi kufanele uqinisekiswe yinoma yiliphi ilungu lanoma iyiphi inhlangano esiteshini." Izibonelo zezinqubomgomo:
- Ukuthengiselana kufanele kuvunywe yinoma yimuphi umlawuli wenhlangano;
- Kumele kuqinisekiswe yinoma yiliphi ilungu noma iklayenti lenhlangano;
- Kumele kuqinisekiswe yinoma iyiphi inhlangano yontanga.
Isevisi yoku-oda β Ipakisha okwenziwayo kumabhulokhi futhi ikuthumele kontanga esiteshini. Iqinisekisa ukulethwa kwemilayezo kubo bonke ontanga kunethiwekhi. Isetshenziselwa izinhlelo zezimboni
CallFlow
- Uhlelo lokusebenza luxhumana ne-Hyperledger Fabric lisebenzisa i-Go, Node.js noma i-Java SDK;
- Iklayenti lidala umsebenzi we-tx futhi likuthumele kontanga abagunyazayo;
- I-Peer iqinisekisa isiginesha yeklayenti, iqedele okwenziwayo, bese ibuyisela isiginesha yokuvumela kuklayenti. I-Chaincode isetshenziswa kontanga abagunyazayo kuphela, futhi umphumela wokwenziwa kwayo uthunyelwa kubo bonke ontanga. Le algorithm yomsebenzi ibizwa nge-PBFT (Practical Byzantine Fault Tolerant) consensus. Ihlukile ku
I-BFT yakudala iqiniso lokuthi umlayezo uthunyelwe nokuqinisekiswa akulindelekile hhayi kubo bonke abahlanganyeli, kodwa kuphela kusukela kusethi ethile; - Ngemva kokuba iklayenti lithole inombolo yezimpendulo ezihambisana nenqubomgomo yokugunyaza, lithumela ukuthengiselana kusevisi yoku-oda;
- Isevisi yoku-oda idala ibhulokhi futhi iyithumele kubo bonke ontanga abazibophezelayo. Isevisi yoku-oda iqinisekisa ukuqoshwa okulandelanayo kwamabhulokhi, okuqeda lokho okubizwa ngemfoloko ye-ledger (
bona isigaba "Izimfoloko" ); - Ontanga bathola i-block, hlola inqubomgomo yokugunyaza futhi, bhala i-block ku-blockchain futhi ushintshe isimo ku-DB "yezwe lomhlaba".
Labo. Lokhu kubangela ukwehlukana kwezindima phakathi kwamanodi. Lokhu kuqinisekisa ukuthi i-blockchain iyakaleka futhi ivikelekile:
- Izinkontileka ezihlakaniphile (chaincode) zenza ontanga abagunyazayo. Lokhu kuqinisekisa ubumfihlo bezinkontileka ezihlakaniphile, ngoba ayigcinwa yibo bonke ababambiqhaza, kodwa kuphela ngokuvumela ontanga.
- Uku-oda kufanele kusebenze ngokushesha. Lokhu kuqinisekiswa yiqiniso lokuthi Uku-oda kwakha kuphela ibhulokhi futhi kuyithumela kusethi ehleliwe yontanga yabaholi.
- Ontanga abazibophezela bagcina i-blockchain kuphela - ingaba miningi futhi ayidingi amandla amaningi nokusebenza okusheshayo.
Imininingwane eyengeziwe mayelana nezixazululo zezakhiwo ze-Hyperledger Fabric nokuthi kungani isebenza ngale ndlela hhayi ngenye indlela ingatholakala lapha:
Ngakho-ke, i-Hyperledger Fabric iyisistimu yendawo yonke ongakwazi ngayo:
- Sebenzisa umqondo webhizinisi ongekho emthethweni usebenzisa indlela yenkontileka ehlakaniphile;
- Rekhoda futhi uthole idatha evela ku-blockchain database ngefomethi ye-JSON;
- Nikeza futhi uqinisekise ukufinyelela kwe-API usebenzisa Isiphathimandla Sesitifiketi.
Manje njengoba sesiqonda kancane mayelana nemininingwane ye-Hyperledger Fabric, ekugcineni masenze okuthile okuwusizo!
Kusetshenziswa i-blockchain
Ukwakheka kwenkinga
Umsebenzi ukusebenzisa inethiwekhi ye-Citcoin ngemisebenzi elandelayo: dala i-akhawunti, uthole ibhalansi, ugcwalise i-akhawunti yakho, udlulise izinhlamvu zemali kusuka ku-akhawunti eyodwa kuya kwenye. Ake sidwebe imodeli yento, esizobuye siyisebenzise kunkontileka ehlakaniphile. Ngakho-ke, sizoba nama-akhawunti akhonjwe ngamagama futhi aqukethe ibhalansi, nohlu lwama-akhawunti. Ama-akhawunti kanye nohlu lwama-akhawunti, ngokwemibandela yezimpahla ze-Hyperledger Fabric. Ngokuvumelana nalokho, banomlando kanye nesimo samanje. Ngizozama ukudweba lokhu ngokucacile:
Izibalo eziphezulu yisimo samanje, esigcinwe kusizindalwazi se-"World state". Ngezansi kwazo kunezibalo ezikhombisa umlando ogcinwe ku-blockchain. Isimo samanje sezimpahla sishintshwa okwenziwayo. Ifa lishintshwa kuphela lilonke, ngakho-ke, ngenxa yomsebenzi, kwakhiwa into entsha, futhi inani lamanje lempahla lingena emlandweni.
I-IBM Cloud
Sakha i-akhawunti ku-
Dala inethiwekhi ye-blockchain eyisisekelo usebenzisa i-Blockchain Platform Dala futhi wenze inkontileka ehlakaniphile ye-blockchain Khipha imicimbi evela ku-Blockchain Platform
Okulandelayo yizithombe-skrini ze-IBM Blockchain platform. Lona akuwona umyalo wokuthi ungakha kanjani i-blockchain, kodwa umane ukukhombisa ububanzi bomsebenzi. Ngakho-ke, ngezinhloso zethu, senza Inhlangano eyodwa:
Sakha ama-node kuyo: I-Order CA, i-Org1 CA, Intanga Yoku-oda:
Sakha abasebenzisi:
Dala Isiteshi futhi usibize nge-citcoin:
Empeleni isiteshi siyi-blockchain, ngakho siqala ngo-block zero (ibhulokhi likaGenesise):
Ukubhala Inkontileka Ehlakaniphile
/*
* 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;
Ngokwemvelo, konke kufanele kucace lapha:
- Kukhona imisebenzi embalwa (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) uhlelo lwedemo oluzoyibiza kusetshenziswa i-Hyperledger Fabric API.
- Imisebenzi ye-SendFrom ne-RefillBalance ikhiqiza Imicimbi ezotholwa uhlelo lwedemo.
- Umsebenzi osheshayo ubizwa kanye lapho inkontileka ehlakaniphile isungulwa. Eqinisweni, ayibizwa kanye nje kuphela, kodwa njalo uma inguqulo yenkontileka ehlakaniphile ishintsha. Ngakho-ke, ukuqalisa uhlu ngohlelo olungenalutho kuwumbono omubi, ngoba Manje, uma sishintsha inguqulo yenkontileka ehlakaniphile, sizolahlekelwa uhlu lwamanje. Kodwa kulungile, ngiyafunda nje).
- Ama-akhawunti nohlu lwama-akhawunti yizakhiwo zedatha ye-JSON. I-JS isetshenziselwa ukukhohlisa idatha.
- Ungathola inani lamanje lempahla usebenzisa i-getState function call, futhi uyibuyekeze usebenzisa i-putState.
- Lapho udala i-Akhawunti, kubizwa umsebenzi we-AddAccount, lapho kwenziwa ukuqhathanisa ngenani eliphezulu lama-akhawunti ku-blockchain (maxAccounts = 5). Futhi lapha kukhona i-jamb (ubonile?), Okuholela ekwandeni okungapheli kwenani lama-akhawunti. Amaphutha anjalo kufanele agwenywe)
Okulandelayo, silayisha inkontileka ehlakaniphile esiteshini futhi siyayiqinisa:
Ake sibheke okwenziwayo kokufaka Inkontileka Ehlakaniphile:
Ake sibheke imininingwane ngesiteshi sethu:
Ngenxa yalokho, sithola umdwebo olandelayo wenethiwekhi ye-blockchain efwini le-IBM. Umdwebo uphinde ubonise uhlelo lwedemo olusebenza efwini le-Amazon kuseva ebonakalayo (okuningi mayelana nalo esigabeni esilandelayo):
Ukudala i-GUI yamakholi we-Hyperledger Fabric API
I-Hyperledger Fabric ine-API engasetshenziselwa:
- Dala isiteshi;
- Ukuxhumana kontanga esiteshini;
- Ukufakwa nokufakwa kwezinkontileka ezihlakaniphile esiteshini;
- Ukushayela ucingo;
- Cela imininingwane nge-blockchain.
Ukuthuthukiswa kohlelo lokusebenza
Kuhlelo lwethu lwedemo sizosebenzisa i-API kuphela ukubiza ukuthengiselana nokucela ulwazi, ngoba Sesivele siqedile izinyathelo ezisele sisebenzisa iplatifomu ye-IBM blockchain. Sibhala i-GUI sisebenzisa isitaki sobuchwepheshe esijwayelekile: Express.js + Vue.js + Node.js. Ungabhala indatshana ehlukile yokuthi ungaqala kanjani ukudala izinhlelo zokusebenza zewebhu zesimanje. Lapha ngizoshiya isixhumanisi ochungechungeni lwezinkulumo engizithande kakhulu:
- I-HyperledgerDemo/v1/init - qalisa i-blockchain;
- HyperledgerDemo/v1/accounts/list β thola uhlu lwawo wonke ama-akhawunti;
- HyperledgerDemo/v1/account?name=Bob&balance=100 β dala i-akhawunti ka-Bob;
- HyperledgerDemo/v1/info?account=Bob β thola ulwazi mayelana ne-akhawunti ka-Bob;
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - dlulisa izinhlamvu zemali ezimbili zisuka ku-Bob ziye ku-Alice;
- I-HyperledgerDemo/v1/nqamula - vala ukuxhumeka ku-blockchain.
Incazelo ye-API enezibonelo ezifakiwe
Isicelo sedemo kumafu we-Amazon
Ngilayishe uhlelo lokusebenza e-Amazon ngoba... I-IBM ayikakakwazi ukuthuthukisa i-akhawunti yami futhi ingivumele ukuthi ngidale amaseva abonakalayo. Indlela yokwengeza i-cherry esizindeni:
- Qalisa i-blockchain;
- Dala i-Akhawunti (kodwa manje awukwazi ukudala i-Akhawunti entsha, ngoba inombolo enkulu yama-akhawunti ashiwo kunkontileka ehlakaniphile ifinyelelwe ku-blockchain);
- Thola uhlu lwama-Akhawunti;
- Dlulisa izinhlamvu zemali ze-citcoin phakathi kuka-Alice, uBob no-Alex;
- Thola imicimbi (kodwa manje ayikho indlela yokubonisa imicimbi, ngakho-ke ukuze kube lula, i-interface ithi imicimbi ayisekelwe);
- Izenzo zelogi.
Okokuqala siqala i-blockchain:
Okulandelayo, sidala i-akhawunti yethu, ungachithi isikhathi ngebhalansi:
Sithola uhlu lwawo wonke ama-akhawunti atholakalayo:
Sikhetha umthumeli nomamukeli, futhi sithole amabhalansi abo. Uma umthumeli nomamukeli befana, i-akhawunti yakhe izogcwaliswa:
Kulogi siqapha ukwenziwa kwemisebenzi:
Empeleni, lokho kuphela ngohlelo lwedemo. Ngezansi ungabona ukuthengiselana kwethu ku-blockchain:
Futhi uhlu olujwayelekile lwemisebenzi:
Ngalokhu, siqede ngempumelelo ukuqaliswa kwe-PoC ukudala inethiwekhi ye-Citcoin. Yini enye okudingeka yenziwe ukuze i-Citcoin ibe inethiwekhi egcwele yokudlulisa izinhlamvu zemali? Kancane:
- Esigabeni sokudalwa kwe-akhawunti, sebenzisa ukukhiqizwa kokhiye wangasese/womphakathi. Ukhiye oyimfihlo kumele ugcinwe nomsebenzisi we-akhawunti, ukhiye osesidlangalaleni kumele ugcinwe ku-blockchain.
- Yenza uhlamvu lwemali lapho ukhiye osesidlangalaleni, esikhundleni segama, usetshenziswa ukukhomba umsebenzisi.
- Bethela okwenziwayo kusuka kumsebenzisi kuya kuseva ngokhiye wakhe oyimfihlo.
isiphetho
Senze inethiwekhi ye-Citcoin ngemisebenzi elandelayo: engeza i-akhawunti, thola ibhalansi, gcwalisa i-akhawunti yakho, udlulise izinhlamvu zemali zisuka kwenye i-akhawunti ziye kwenye. Ngakho-ke, kusibizeleni ukwakha i-PoC?
- Udinga ukufunda i-blockchain ngokujwayelekile kanye ne-Hyperledger Fabric ikakhulukazi;
- Funda ukusebenzisa i-IBM noma amafu e-Amazon;
- Funda ulimi lokuhlela lwe-JS kanye nohlaka oluthile lwewebhu;
- Uma idatha ethile idinga ukugcinwa hhayi ku-blockchain, kodwa ku-database ehlukile, bese ufunda ukuhlanganisa, isibonelo, nge-PostgreSQL;
- Futhi okokugcina - awukwazi ukuphila emhlabeni wanamuhla ngaphandle kolwazi lwe-Linux!)
Yiqiniso, akuyona isayensi ye-rocket, kodwa kuzodingeka usebenze kanzima!
Imithombo ku-GitHub
Imithombo ifakiwe
Ikhathalogi Β«IsevaΒ» β Iseva ye-Node.js
Ikhathalogi Β«iklayentiΒ» β Iklayenti le-Node.js
Ikhathalogi Β«blockchain"(amanani wepharamitha nokhiye, vele, awasebenzi futhi anikezwa njengesibonelo kuphela):
- contract β ikhodi yomthombo wenkontileka ehlakaniphile
- wallet - okhiye bomsebenzisi bokusebenzisa i-Hyperledger Fabric API.
- *.cds - izinguqulo ezihlanganisiwe zezinkontileka ezihlakaniphile
- *.json amafayela - izibonelo zamafayela okusetha okusebenzisa i-Hyperledger Fabric API
Kuseyisiqalo nje!
Source: www.habr.com