Amehlo ayankwantya, nezandla zirhawuzelelwa!
Kumanqaku angaphambili, sijonge itekhnoloji apho i-blockchains yakhiwe khona (
Ilaphu leHyperledger - Universal Blockchain
Ngokubanzi, inkqubo yolwazi jikelele yile:
- Iseti yeeseva kunye nesiseko sesoftware esenza ingqiqo yeshishini;
- Ukusebenzelana nenkqubo;
- Iindlela zokubhaliswa, ukuqinisekiswa kunye nokugunyaziswa kwezixhobo / abantu;
- Uvimba wedatha osebenzayo kunye noovimba:
Inguqulelo esemthethweni ye-Hyperledger Fabric inokufundwa kuyo
Hyperledger Fabric Architecture
Umzobo ubonisa i-Hyperledger Fabric architecture:
Imibutho - imibutho iqulethe oontanga, ngoko i-blockchain ikhona ngenxa yenkxaso yemibutho. Imibutho eyahlukeneyo inokuba yinxalenye yejelo elinye.
ijelo - isakhiwo esinengqiqo esidibanisa oontanga kumaqela, ngoko. i-blockchain iseti. I-Hyperledger Fabric inokusebenza ngaxeshanye iibhloko ezininzi ezinengqiqo yezoshishino ezahlukeneyo.
Umboneleli weeNkonzo zobulungu (MSP) yi-CA (uGunyaziwe weSatifikethi) sokukhupha isazisi kunye nokwabela iindima. Ukwenza i-node, kufuneka udibane ne-MSP.
Iinodi zoontanga - qinisekisa ukuthengiselana, gcina i-blockchain, yenza izivumelwano ezihlakaniphile kunye nokusebenzisana nezicelo. Oontanga banesazisi (isiqinisekiso sedijithali) esikhutshwe yi-MSP. Ngokungafaniyo nenethiwekhi ye-Bitcoin okanye ye-Etherium, apho zonke iindawo zilingana, ii-node zidlala indima eyahlukileyo kwi-Hyperledger Fabric:
- Oontanga banokuba njalo ukuxhasa intanga (EP) kunye nokwenza izivumelwano ezihlakaniphile.
- Oontanga abazinikeleyo (CP) - kuphela gcina idatha kwi-blockchain kwaye uhlaziye "ilizwe lehlabathi".
- Ankile Ntanga (AP) - ukuba imibutho emininzi ithatha inxaxheba kwi-blockchain, ke oontanga be-anchor basetyenziselwa ukunxibelelana phakathi kwabo. Umbutho ngamnye kufuneka ube nentanga enye okanye ngaphezulu. Ngoncedo lwe-AP, nayiphi na intanga kwintlangano inokufumana ulwazi malunga nabo bonke oontanga kweminye imibutho. Isetyenziselwa ukulungelelanisa ulwazi phakathi kwe-APs.
iprotocol yokuhleba . - INkokheli yoNtanga - ukuba umbutho unabalingane abaninzi, ngoko kuphela inkokeli yontanga iya kufumana iibhloko kwinkonzo yokuLawula kwaye ibanike abanye oontanga. Inkokeli inokumiselwa ngokwesigxina okanye ngokuguquguqukayo okhethwe ngoontanga kumbutho. I-protocol yokuhleba ikwasetyenziselwa ukuvumelanisa ulwazi lwenkokeli.
impahla - amaziko exabiso agcinwe kwi-blockchain. Ngokukodwa ngakumbi, le yidatha yexabiso elingundoqo kwifomathi ye-JSON. Yile datha ebhalwe kwi-blockchain blockchain. Banembali egcinwe kwi-blockchain kunye nemeko yangoku egcinwe kwi-database "yelizwe lehlabathi". Ulwakhiwo lwedatha luzaliswa ngaphandle kwesizathu ngokuxhomekeke kwimisebenzi yeshishini. Akukho mimandla ifunekayo, ekuphela kwengcebiso kukuba ii-asethi kufuneka zibe nomnini kwaye zibe nexabiso.
Ledger - iquka iBlockchain blockchain kunye ne-Word state database, egcina imeko yangoku ye-asethi. Urhulumente wehlabathi usebenzisa i-LevelDB okanye iCouchDB.
Isivumelwano esifanelekileyo - ngoncedo lweekontraki ezihlakaniphile, ingqiqo yezoshishino yenkqubo iphunyeziwe. Kwi-Hyperledger Fabric, izivumelwano ezihlakaniphile zibizwa ngokuba yi-chaincode. Ngoncedo lwe-chaincode, ii-asethi kunye neentengiselwano phezu kwazo zichaziwe. Ngokwemigaqo yobugcisa, iikhontrakthi ezihlakaniphile ziimodyuli zesoftware eziphunyezwe kwi-JS okanye kwiilwimi zokuprograma zeGo.
Umgaqo-nkqubo wokuqinisekisa - kwi-chaincode nganye, unokuseta imigaqo-nkqubo malunga nokuba bangaphi kwaye ngubani omele ulindele ukuqinisekiswa kwentengiselwano. Ukuba umgaqo-nkqubo awumiselwanga, ngoko ukungagqibeki kukuba: "intengiselwano kufuneka iqinisekiswe lilo naliphi na ilungu lalo naluphi na umbutho kwitshaneli". Imizekelo yepolisi:
- Intengiselwano kufuneka iqinisekiswe nguye nawuphi na umlawuli wombutho;
- Kufuneka kuqinisekiswe naliphi na ilungu okanye umxhasi wombutho;
- Kufuneka uqinisekise nayiphi na intanga yombutho.
Inkonzo yokuodola - upakisha utshintshiselwano kwiibhloko kwaye uzithumele kubalingane kwitshaneli. Iqinisekisa ukuhanjiswa komyalezo kubo bonke abalingane kwinethiwekhi. Isetyenziselwa iinkqubo zoshishino
ukufowuna
- Isicelo sisebenzisana ne-Hyperledger Fabric usebenzisa i-Go, i-Node.js okanye i-Java SDK;
- Umxhasi wenza i-tx yentengiselwano kwaye uyithumele kubalingane abavumayo;
- Umlingane uqinisekisa utyikityo lomxhasi, ugqibezela intengiselwano, kwaye uthumela utyikityo lokuvuma kumthengi. I-Chaincode iqhutyelwa kuphela kwintanga evumayo, kwaye umphumo wokuphunyezwa kwayo uthunyelwa kubo bonke oontanga. I-algorithm enjalo yomsebenzi ibizwa ngokuba yi-PBFT (Practical Byzantine Fault Tolerant) imvumelwano. Iyahluka kwi
BFT yakudala into yokuba umyalezo uthunyelwe kwaye ukuqinisekiswa akulindelwe kubo bonke abathathi-nxaxheba, kodwa kuphela kwisethi ethile; - Emva kokuba umxhasi efumene inani leempendulo ezihambelana nomgaqo-nkqubo wokuqinisekisa, ithumela ukuthengiselana kwinkonzo yokuLawula;
- Inkonzo yokuodola yenza ibhloko kwaye iyithumele kubo bonke oontanga abazibophelelayo. Inkonzo yoku-odola iqinisekisa ukuba iibhloko zibhalwa ngokulandelelanayo, nto leyo ephelisa into ebizwa ngokuba yi-ledger fork (
bona icandelo "Iifolokhwe" ); - Oontanga bafumana ibhloko, khangela umgaqo-nkqubo wokuqinisekisa kwakhona, bhala ibhloko kwi-blockchain, kwaye utshintshe urhulumente "kwilizwe lehlabathi" DB.
Ezo. kuvela ulwahlulo lweendima phakathi kweendawo zokuhlala. Oku kuqinisekisa ubungakanani kunye nokhuseleko lwe-blockchain:
- Iikhontrakthi ze-Smart (chaincode) zenza abalingane abavumayo. Oku kuqinisekisa ubumfihlo beekontraki ezihlakaniphile, njengoko ayigcinwanga ngabo bonke abathathi-nxaxheba, kodwa ngokuvuma oontangandini.
- Ukuodola kufuneka kusebenze ngokukhawuleza. Oku kuqinisekiswa yinto yokuba i-Ordering ifom kuphela ibhloko kwaye iyithumele kwisethi esisigxina yabalingane abakhokelayo.
- Oontanga abazibophelelayo bagcina kuphela i-blockchain-inokuba zininzi kwaye ayifuni amandla amaninzi kunye nomsebenzi okhawulezileyo.
Izisombululo ezongezelelekileyo ze-Hyperledger Fabric kwaye kutheni zisebenza ngale ndlela kwaye azinakufumaneka apha:
Ke, i-Hyperledger Fabric yinkqubo yendalo yonke onokuthi ngayo:
- Ukuphumeza ingqiqo yoshishino ngokusetyenziswa kobuchule bekhontrakthi;
- Bhala kwaye ufumane idatha kwi-database ye-blockchain kwifomathi ye-JSON;
- Nika kwaye uqinisekise ukufikelela kwe-API usebenzisa iSiqinisekiso seSiqinisekiso.
Ngoku ekubeni sinento encinci ye-Hyperledger Fabric ecacileyo ngaphandle kwendlela, masenze into eluncedo ekugqibeleni!
Ukusasaza i-blockchain
ΠΡ ΡΠ Β° Β°
Umsebenzi kukuphumeza inethiwekhi yeCitcoin kunye nale misebenzi ilandelayo: yenza i-akhawunti, ufumane ibhalansi, uzalise i-akhawunti, udlulise iingqekembe zemali ukusuka kwelinye ukuya kwelinye. Masizobe imodeli yento, esiya kuthi siyiphumeze ngakumbi kwikhontrakthi ehlakaniphile. Ngoko, siya kuba neeakhawunti ezichongiweyo ngamagama (igama) kwaye ziqulethe ibhalansi (ibhalansi), kunye noluhlu lwee-akhawunti. Iiakhawunti kunye noluhlu lwee-akhawunti zihambelana nempahla ye-Hyperledger Fabric. Ngokufanelekileyo, banembali kunye nemeko yangoku. Ndiza kuzama ukuyizoba ngokubonakalayo:
Amanani aphezulu yimeko yangoku, egcinwe kwi-database "yelizwe lehlabathi". Ngezantsi kwabo kukho amanani abonisa imbali egcinwe kwi-blockchain. Imeko yangoku ye-asethi iguqulwa yintengiselwano. I-asethi itshintsha kuphela ngokupheleleyo, ngoko ngenxa yentengiselwano, into entsha yenziwe, kwaye ixabiso langoku le-asethi liya kwimbali.
I-IBM Cloud
Senza iakhawunti kwi
Yenza inethiwekhi ye-blockchain esisiseko usebenzisa iPlatform yeBlockchain Yenza kwaye wenze isivumelwano se-blockchain smart Iminyhadala evela kwiBlockchain Platform
Ezi zilandelayo zi-screenshots zeqonga le-IBM Blockchain. Lo ayisiwo umyalelo wokudala ibhloko, kodwa kukubonisa nje ububanzi bomsebenzi. Ke, ngeenjongo zethu, senza uMbutho omnye:
Senza ii-node kuyo: I-Order CA, i-Org1 CA, iNtanga ye-Order:
Siqala abasebenzisi:
Yenza iChannel kwaye uyibize i-citcoin:
Ngokwenyani, iChaneli yibhloko, ke iqala kwibhloko engu-zero (ibhloko yeGenesis):
Ukubhala ikhontrakthi 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, yonke into kufuneka icace apha:
- Kukho imisebenzi emininzi (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) ukuba inkqubo yedemo iya kubiza usebenzisa i-Hyperledger Fabric API.
- Imisebenzi ye-SendFrom kunye ne-RefillBalance ivelisa imisitho (Isigigaba) eya kufunyanwa yinkqubo yedemo.
- Umsebenzi we-instantiate ubizwa kanye xa ikhontrakthi ye-smart iqalisiwe. Enyanisweni, kubizwa ngokuba kungekhona kanye, kodwa rhoqo xa utshintsho lwekhontrakthi ehlakaniphile. Ke ngoko, ukuqalisa uluhlu ngoluhlu olungenanto luluvo olubi, kuba ngoku xa utshintsha uguqulelo lwekhontrakthi ehlakaniphile, siya kuphulukana noluhlu lwangoku. Kodwa akukho nto, ndifunda nje).
- Iiakhawunti kunye noluhlu lwee-akhawunti (ii-akhawunti) zizakhiwo zedatha ye-JSON. I-JS isetyenziselwa ukukhohlisa idatha.
- Ungafumana ixabiso langoku le-asethi ngokufowunela umsebenzi we-getState, kwaye uyihlaziye nge-putState.
- Xa udala i-Akhawunti, umsebenzi we-AddAccount ubizwa, apho uthelekiso lwenziwa kwinani eliphezulu le-akhawunti kwi-blockchain (maxAccounts = 5). Kwaye kukho i-jamb (iphawulwe?), Okukhokelela ekunyukeni okungapheliyo kwinani le-akhawunti. Iimpazamo ezinje maziphetshwe
Okulandelayo, silayisha ikhontrakthi ehlakaniphile kwiSiteshi kwaye siyifake:
Sijonge kwintengiselwano yokufaka iSivumelwano se-Smart:
Bona iinkcukacha malunga nejelo lethu:
Ngenxa yoko, sifumana isikimu esilandelayo senethiwekhi ye-blockchain kwifu le-IBM. Kwakhona kumzobo kukho inkqubo yedemo esebenza kwifu laseAmazon kwiseva ebonakalayo (iinkcukacha malunga nayo ziya kuba kwicandelo elilandelayo):
Ukudala i-GUI yeeFowuni ze-Hyperledger Fabric API
I-Hyperledger Fabric ine-API enokusetyenziswa uku:
- Yenza isitishi;
- Ukudityaniswa koontanga kumjelo;
- Ukufakwa kunye nokufakwa kwezivumelwano ezihlakaniphile kwijelo;
- Ukubiza iitransekshini;
- Cela ulwazi kwi-blockchain.
Uphuhliso lwesicelo
Kwinkqubo yethu yedemo, siya kusebenzisa i-API kuphela ukubiza ukuthengiselana kunye nokucela ulwazi, kuba. sele senze amanye amanyathelo usebenzisa i-IBM blockchain platform. Sibhala i-GUI sisebenzisa istaki sobuchwepheshe esiqhelekileyo: Express.js + Vue.js + Node.js. Ungabhala inqaku elahlukileyo malunga nendlela yokuqalisa ukwenza usetyenziso lwewebhu lwangoku. Apha ndiza kushiya ikhonkco kuthotho lweentetho endizithande kakhulu:
- I-HyperledgerDemo/v1/init - qalisa i-blockchain;
- I-HyperledgerDemo/v1/iakhawunti/uluhlu - fumana uluhlu lwazo zonke iiakhawunti;
- HyperledgerDemo/v1/account?name=Bob&balance=100 - yenza iakhawunti kaBob;
- HyperledgerDemo/v1/info?account=Bob - fumana ulwazi malunga ne-akhawunti kaBob;
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - tshintshela iinkozo ezimbini ukusuka kuBob ukuya kuAlice;
- I-HyperledgerDemo/v1/disconnect - vala uxhulumaniso kwi-blockchain.
Inkcazo ye-API enemizekelo ebekiweyo
Isicelo sedemo kwilifu leAmazon
Isicelo silayishwe kwi-Amazon, kuba I-IBM ayikakwazi ukuphucula iakhawunti yam kwaye indivumele ukuba ndenze iiseva zenyani. Indlela idomeyini encanyathiselwe ngayo kwicheri:
- Ukuqalisa i-blockchain;
- Yenza i-Akhawunti (kodwa ngoku i-Akhawunti entsha ayinakwenziwa, kuba inani eliphezulu lee-akhawunti ezichazwe kwikhontrakthi ehlakaniphile ifikeleleke kwi-blockchain);
- Fumana uluhlu lweeAkhawunti;
- Ukutshintshela imali ye-citcoin phakathi kuka-Alice, uBob no-Alex;
- Fumana iziganeko (kodwa ngoku akukho ndlela yokubonisa iziganeko, ukuze kube lula kubhaliwe kwi-interface ukuba iziganeko azixhaswanga);
- Iintshukumo zelogi.
Okokuqala, siqala i-blockchain:
Okulandelayo, siqala iakhawunti yethu, musa ukuhlekisa ngebhalansi:
Sifumana uluhlu lwazo zonke iiakhawunti ezikhoyo:
Sikhetha umthumeli kunye nommkeli, sifumana ibhalansi yabo. Ukuba umthumeli kunye nomamkeli bayafana, iakhawunti yakhe iya kuzaliswa:
Kwilog, sibeka iliso ekuqhutyweni kwentengiselwano:
Ngokwenyani, ngenkqubo yedemo, kuphelele apho. Okulandelayo, unokuyibona intengiselwano yethu kwi-blockchain:
Kwaye uluhlu ngokubanzi lwentengiselwano:
Ngale nto, sigqibe ngempumelelo ukuphunyezwa kwePoC ukudala inethiwekhi yeCitcoin. Yintoni enye ekufuneka yenziwe ukwenza i-Citcoin ibe yinethiwekhi epheleleyo yokudlulisela ingqekembe? Ncnci kakhulu:
- Kwinqanaba lokudala iakhawunti, phumeza ukuveliswa kwesitshixo sabucala / sikawonke-wonke. Isitshixo sabucala kufuneka sigcinwe yiakhawunti yomsebenzisi, eluluntu kwi-blockchain.
- Yenza ukutshintshwa kweengqekembe, apho ingekho igama, kodwa isitshixo sikawonke-wonke sisetyenziselwa ukuchonga umsebenzisi.
- Uguqulelo oluntsonkothileyo olusuka kumsebenzisi lusiya kumncedisi ngeqhosha lakhe labucala.
isiphelo
Siphumeze inethiwekhi yeCitcoin kunye nale misebenzi ilandelayo: yongeza i-akhawunti, fumana ibhalansi, uzalise i-akhawunti yakho, udlulise iingqekembe zemali ukusuka kwelinye ukuya kwelinye. Ke kwasixabisa ntoni ukwakha iPoC?
- Kuyimfuneko ukufunda i-blockchain ngokubanzi kunye ne-Hyperledger Fabric ngokukodwa;
- Funda indlela yokusebenzisa i-IBM okanye amafu e-Amazon;
- Funda ulwimi lweprogram ye-JS kunye nesakhelo sewebhu;
- Ukuba idatha ethile idinga ukugcinwa kungekhona kwi-blockchain, kodwa kwi-database eyahlukileyo, ngoko ufunde indlela yokudibanisa, umzekelo, kunye ne-PostgreSQL;
- Kwaye okokugqibela kodwa okungancinci - ngaphandle kolwazi lweLinux kwihlabathi lanamhlanje, akukho ndawo!)
Ewe, hayi isayensi yerokhethi, kodwa kufuneka ubile!
Imithombo kwiGitHub
Imithombo ibekwe
Ikhathalogu Β«MncedisiΒ»- iseva yeNode.js
Ikhathalogu Β«UmxhasiΒ»- umxhasi weNode.js
Ikhathalogu Β«blockchainΒ» (amaxabiso eparameters kunye nezitshixo, ewe, ayisebenzi kwaye inikwa umzekelo kuphela):
- isivumelwano - umthombo wekhontrakthi ehlakaniphile
- isipaji - izitshixo umsebenzisi ngokusebenzisa Hyperledger Fabric API.
- * .cds - iinguqulelo eziqokelelweyo zeekontraki ezihlakaniphile
- * .json iifayile - imizekelo yeefayile zokucwangcisa ukusetyenziswa kwe-Hyperledger Fabric API
Sisiqalo nje!
umthombo: www.habr.com