Indhahaagu way baqayaan gacmahaaguna way cuncunayaan!
Maqaaladii hore, waxaan la macaamilnay tignoolajiyada lagu dhisayo blockchain (Maxaan dhisi karnaa blockchain?) iyo kiisaska la fulin karo iyadoo la kaashanayo (Waa maxay sababta aan u dhisno kiis?). Waa waqtigii aad gacmahaaga ku shaqayn lahayd! Si loo hirgeliyo duuliyayaasha iyo PoC (Caddaynta Fikradda), waxaan doorbidayaa inaan isticmaalo daruuraha, sababtoo ah ... waxaa laga heli karaa meel kasta oo aduunka ka mid ah, inta badan, looma baahna in waqti lagu lumiyo rakibaadda adag ee deegaanka, sababtoo ah Waxaa jira habayn hore loo diyaariyey. Haddaba, aan samayno wax fudud, tusaale ahaan, shabakad loogu talagalay wareejinta qadaadiicda u dhexeeya ka qaybgalayaasha oo aynu si xishood leh ugu yeedho Seeraar. Taas awgeed waxaan u isticmaali doonaa daruuraha IBM iyo kuwa caalamiga ah ee blockchain Hyperledger Fabric. Marka hore, aan ogaano sababta Hyperledger Fabric loogu yeero xannibaad caalami ah?
Nooca rasmiga ah ee dharka Hyperledger waa laga akhriyi karaa goobta, iyo marka la soo koobo, Hyperledger Fabric waa madal il furan oo kuu ogolaanaysa inaad dhisto blockchain gaar ah oo aad fuliso qandaraasyo caqli gal ah oo ku qoran luqadaha barnaamijyada JS iyo Go. Aynu si faahfaahsan u eegno naqshadda dharka Hyperledger oo aan hubinno in tani ay tahay nidaam caalami ah oo leh oo kaliya gaar ah kaydinta iyo duubista xogta. Waxyaabaha gaarka ah ayaa ah in xogta, sida dhammaan xannibaadaha, lagu keydiyo baloogyada lagu dhejiyo xannibaadda kaliya haddii kaqeybgalayaashu ay gaaraan heshiis iyo ka dib duubista xogta si aamusnaan ah looma sixi karo ama lama tirtiri karo.
Ururada - ururadu waxay ka kooban yihiin facooda, i.e. blockchain waxay u jirtaa taageerada ururada. Ururo kala duwan ayaa qayb ka noqon kara isla kanaalka.
Channel - qaab-dhismeed macquul ah oo mideeya facooda kooxo, i.e. blockchain waa la cayimay. Dharka Hyperledger wuxuu isku mar ka shaqeyn karaa blockchain badan oo leh caqli-gal ganacsi oo kala duwan.
Bixiyaha Adeegyada Xubinnimada (MSP) waa CA (Maamulka Shahaadada) ee soo saarista aqoonsiga iyo ku meelaynta doorarka. Si aad u abuurto noode, waxaad u baahan tahay inaad la falgasho MSP.
qanjidhada asaaga - Xaqiiji macaamil ganacsi, kaydi blockchain, fuliya qandaraasyo caqli gal ah oo la falgalka codsiyada. Asxaabtu waxay leeyihiin aqoonsi (shahaadad dijital ah), oo ay bixiso MSP. Si ka duwan shabakadda Bitcoin ama Etherium, halkaas oo dhammaan qanjidhada ay leeyihiin xuquuq siman, qanjidhada Dharka Hyperledger waxay ciyaaraan door kala duwan:
asaagga u heellan (CP) - kaliya ku keydi xogta blockchain oo cusboonaysii “dawladda adduunka”.
Barroosin Peer (AP) - Haddii ururo dhowr ah ay ka qaybqaataan xannibaadda, markaa asxaabta barroosinka ah ayaa loo isticmaalaa isgaarsiinta dhexdooda. Urur kastaa waa inuu lahaadaa hal ama in ka badan oo asaag ah. Isticmaalka AP, fac kasta oo ka tirsan ururka wuxuu heli karaa macluumaadka ku saabsan dhammaan asxaabta kale ee ururada kale. Loo isticmaalo in xogta APs la mideeyo borotokoolka xanta.
Hogaamiyaha Peer - Haddii ururku leeyahay dhowr asaagood, markaa kaliya hoggaamiyaha asaagga ayaa heli doona xannibaadyo adeegga Dalbashada oo siin doona asxaabta inteeda kale. Hogaamiyaha waxaa loo cayimi karaa si joogto ah ama si firfircooni ah ayey u dooran karaan asxaabta ururka. Hab-maamuuska xanta waxaa sidoo kale loo adeegsadaa in la isku waafajiyo macluumaadka ku saabsan madaxda.
Hantida - hay'ado qiimo leh oo ku kaydsan blockchain. Si gaar ah, tani waa xogta qiimaha muhiimka ah ee qaabka JSON. Waa xogtan waxa lagu duubay Blockchain. Waxay leeyihiin taariikh, kaas oo lagu kaydiyo blockchain, iyo xaalad hadda, kaas oo lagu kaydiyo xogta "Dawladda Adduunka". Qaab dhismeedka xogta waxaa loo buuxiyaa si sabab la'aan ah iyadoo ku xiran hawlaha ganacsiga. Ma jiraan goobo loo baahan yahay, talada kaliya ayaa ah in hantidu ay lahaato milkiile oo ay qiimo leedahay.
Ledger - waxay ka kooban tahay Blockchain iyo xogta gobolka Word, kaas oo kaydiya xaaladda hantida hadda jirta. Dawladdu waxay isticmaashaa LevelDB ama CouchDB.
Qandaraaska casriga ah - iyadoo la adeegsanayo qandaraasyo caqli-gal ah, caqli-galnimada ganacsiga ee nidaamka waa la fuliyay. Dharka Hyperledger, qandaraasyada caqliga leh waxaa loo yaqaan chaincode. Isticmaalka silsilada koodhka, hantida iyo wax kala iibsiga iyaga ayaa la cayimay. Dhanka farsamada, qandaraasyada smart waa qaybo software oo lagu hirgeliyay luqadaha barnaamijyada JS ama Go.
Siyaasadda taageerada - Syncode kasta, waxaad dejin kartaa siyaasad ku saabsan inta xaqiijin ee macaamil ganacsi waa in laga filayaa iyo cidda. Haddii siyaasadda aan la dejin, ka dib default waa: "wax kala iibsiga waa in ay xaqiijisaa xubin kasta oo ka mid ah urur kasta oo ka mid ah kanaalka." Tusaalooyinka siyaasadaha:
Wax kala iibsiga waa in uu oggolaadaa maamule kasta oo ururka;
Waa in uu xaqiijiyaa xubin kasta ama macmiilka ururka;
Asxaabtu waxay helayaan xannibaad, hubi siyaasadda ansixinta mar labaad, ku qor xannibaadda blockchain oo beddel gobolka "Dawladda Adduunka" DB.
Kuwaas. Tani waxay keenaysaa qaybinta doorarka u dhexeeya qanjidhada. Tani waxay hubinaysaa in blockchain uu yahay mid la miisaaman karo oo sugan:
Qandaraasyada smart (chaincode) waxay qabtaan asxaab taageeraya. Tani waxay xaqiijinaysaa sirta qandaraasyada smart, sababtoo ah laguma kaydiyo dhammaan ka qaybgalayaasha, laakiin waa in la taageero facooda.
Dalbashada waa inay si dhakhso leh u shaqeyso. Tan waxaa lagu hubiyaa xaqiiqda ah in Dalbashada kaliya ay sameyso block oo ay u dirto go'an ee asxaabta hoggaamiyeyaasha.
Saaxiibada isku dhafka ah waxay kaydiyaan oo kaliya blockchain - waxaa jiri kara qaar badan oo iyaga ka mid ah uma baahna awood badan iyo hawlgal degdeg ah.
Hirgelinta caqli-gal ganacsi oo aan sabab lahayn adoo isticmaalaya habka qandaraaska ee caqliga leh;
Diiwaangeli oo ka hel xogta kaydka kaydka ee blockchain qaab JSON ah;
Sii oo xaqiiji gelitaanka API adoo isticmaalaya Maamulka Shahaadada.
Hadda oo aan wax yar ka fahanno waxyaabaha gaarka ah ee Fabric Hyperledger, aan ugu dambeyntii sameyno wax faa'iido leh!
Dajinta blockchain
Abuurista dhibaatada
Hawshu waa in la hirgeliyo shabakadda Citcoin oo leh hawlahan soo socda: samee xisaab, hel dheelitir, kor u qaad koontadaada, u wareeji qadaadiicda hal akoon oo kale. Aynu sawirno qaabka shayga, kaas oo aan ku sii hirgelin doono qandaraas caqli-gal ah. Markaa, waxa aanu yeelan doonaa xisaabo magacyo lagu garto oo ay ku jiraan hadhaaga, iyo liiska xisaabaadka. Xisaabaadka iyo liiska xisaabaadka ayaa ah, marka la eego hantida Dharka Sarreysa. Sidaas awgeed, waxay leeyihiin taariikh iyo xaalad hadda jirta. Waxaan isku dayi doonaa inaan si cad u sawiro:
Tirooyinka ugu sarreeya waa xaaladda hadda jirta, taas oo lagu kaydiyo xogta "Dawladda Adduunka". Hoos waxaa ku yaal tirooyinka muujinaya taariikhda lagu kaydiyo blockchain. Xaaladda hantida hadda jirta waxa lagu beddelaa wax kala iibsiga. Hantidu waxay isbedeshaa oo kaliya guud ahaan, sidaas darteed natiijada macaamilka, shay cusub ayaa la abuuray, qiimaha hadda ee hantida ayaa galaya taariikhda.
IBM Cloud
Waxaan ku abuurnaa akoon IBM daruur. Si loo isticmaalo barta blockchain, waa in loo cusboonaysiiyaa Pay-As-You-Go. Habkani ma noqon karo mid degdeg ah, sababtoo ah... IBM waxay codsatay macluumaad dheeri ah oo ay gacanta ku xaqiijisaa. Qoraal wanaagsan, waxaan dhihi karaa IBM waxay leedahay qalab tababar oo wanaagsan oo kuu ogolaanaya inaad geyso Hyperledger Fabric daruurtooda. Waxaan jeclaystay taxanaha maqaallada iyo tusaalooyinka soo socda:
Kuwa soo socda waa shaashadaha IBM Blockchain platform. Tani ma aha tilmaamo ku saabsan sida loo abuuro blockchain, laakiin si fudud muujinta baaxadda hawsha. Markaa, ujeeddooyinkeenna daraaddood, waxaannu u samaynay hal Urur:
Waxaan ku abuurnaa noodhadhka dhexdiisa: Dalabka CA, Org1 CA, Dalbashada Peer:
Waxaan abuurnaa isticmaalayaasha:
Samee kanaal oo wac citcoin:
Asal ahaan kanaalka waa block, marka wuxuu ku bilaabmaa block eber (Block Genesis):
Qoritaanka Qandaraaska Casriga ah
/*
* 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;
Dareen ahaan, wax walba waa inay ku cad yihiin halkan:
Waxaad ku heli kartaa qiimaha hadda ee hantida adiga oo isticmaalaya wicitaanka shaqada ee getState, oo aad cusboonaysiiso addoo isticmaalaya putState.
Marka la abuurayo Koontada, shaqada AddAccount ayaa loo yaqaan, taas oo isbarbardhigga lagu sameeyay tirada ugu badan ee xisaabaadka blockchain (maxAccounts = 5). Oo halkan waxaa jira jamb (ma aragtay?), Taas oo horseedaysa koror aan dhammaad lahayn oo tirada xisaabaadka. Qaladaadkan oo kale waa in laga fogaadaa)
Marka xigta, waxaanu ku dhejineynaa qandaraaska casriga ah ee Channel-ka oo aan ku dhejineyno:
Aynu eegno macaamilka ku rakibida qandaraaska Smart:
Aan eegno faahfaahinta ku saabsan Channelkeena:
Natiijo ahaan, waxaan helnaa jaantuska soo socda ee shabakada blockchain ee daruuraha IBM. Jaantusku wuxuu sidoo kale muujinayaa barnaamijka demo ee ku dhex socda daruurta Amazon ee server-ka farsamada ah (wax badan oo ku saabsan qaybta xigta):
Abuuritaanka GUI ee wicitaanada Fabric API Hyperledger
Dharka Hyperledger wuxuu leeyahay API kaas oo loo isticmaali karo:
Samee kanaalka;
Isku xirka asxaabta kanaalka;
Ku rakibida iyo dejinta qandaraasyada caqliga leh ee kanaalka;
Wicida macaamil ganacsi;
Codso macluumaadka ku saabsan blockchain.
Horumarinta codsiga
Barnaamijkeena demo waxaan u isticmaali doonaa API kaliya si aan u wacno wax kala iibsiga oo aan u codsano macluumaadka, sababtoo ah Waxaan horey u dhameeynay tillaabooyinka haray anagoo adeegsanayna IBM blockchain platform. Waxaan ku qornaa GUI anagoo adeegsanayna xirmo tignoolajiyada caadiga ah: Express.js + Vue.js + Node.js. Waxaad qori kartaa maqaal gaar ah oo ku saabsan sida loo bilaabo abuurista codsiyada shabakadaha casriga ah. Halkan waxaan kaga tagayaa linkiga muxaadarooyinka taxanaha ah ee aan aad u jeclaa: App-ka Shabakadda Buuxa oo la isticmaalayo Vue.js & Express.js. Natiijadu waa arjiga macmiilka-server oo leh is-dhexgal garaafeed la yaqaan oo ku jira qaabka Nakhshadda Qalabka Google. API REST ee u dhexeeya macmiilka iyo server-ka wuxuu ka kooban yahay dhowr wicitaan:
Sharaxaada API-ga oo ay ku jiraan tusaalayaal Mareegta Boostada - barnaamij caan ah oo lagu tijaabiyo HTTP API.
Codsiga demo ee daruuraha Amazon
Waxaan codsiga u soo galiyay Amazon sababtoo ah... IBM wali ma awoodin in ay cusboonaysiiso akoonkayga oo ay ii ogolaato in aan sameeyo server-yada casriga ah. Sida cherry loogu daro goobta: www.citcoin.info. In muddo ah ayaan Server-ka shid doonaa, ka dibna damin doonaa, sababtoo ah... santiyada kirada ah ayaa soo qulqulaya, iyo qadaadiicda citcoin aan weli ku jirin liiska sarrifka saamiyada) Waxaan ku darayaa shaashadda sawirada ee maqaalka si caqli-galnimada shaqadu u caddahay. Codsiga demo wuxuu karaa:
Bilow blockchain;
Abuur Koonto (laakin hadda ma abuuri kartid xisaab cusub, sababtoo ah tirada ugu badan ee xisaabaadka lagu qeexay qandaraaska smart ayaa lagu gaaray blockchain);
Hesho liiska Xisaabaadka;
Ku wareeji qadaadiicda citcoin inta u dhaxaysa Alice, Bob iyo Alex;
Hel dhacdooyinka (laakiin hadda ma jirto hab lagu muujiyo dhacdooyinka, markaa si fudud, interface ayaa sheegaysa in dhacdooyinka aan la taageerin);
Log falalka
Marka hore waxaan bilownay blockchain:
Marka xigta, waxaan abuurnaa akoonkeena, ha ku lumin waqtiga dheelitirka:
Waxaan helnaa liiska dhammaan xisaabaadka la heli karo:
Waxaan dooranaa soo diraha iyo qaataha, waxaana helnaa baaqigooda. Haddii diraha iyo qaataha ay isku mid yihiin, markaas xisaabtiisa ayaa la buuxin doonaa:
Diiwaanka waxaan kula soconaa fulinta wax kala iibsiga:
Tani, waxaan si guul leh u dhamaystirnay hirgelinta PoC si loo abuuro shabakadda Citcoin. Maxaa kale oo loo baahan yahay in loo sameeyo Citcoin si ay u noqoto shabakad dhamaystiran oo loogu talagalay wareejinta qadaadiicda? Aad u yar:
Marxaladda abuurista akoonnada, hirgeli abuurista furaha gaarka ah / dadweynaha. Furaha gaarka ah waa in lagu kaydiyaa isticmaalaha akoontada, furaha dadweynaha waa in lagu kaydiyaa blockchain.
Samee wareejin qadaadiic ah kaas oo furaha guud, halkii magac loo isticmaali lahaa si loo aqoonsado isticmaalaha.
Siri macaamil ganacsi oo ka socda isticmaalaha una socda serverka furihiisa gaarka ah.
gunaanad
Waxaan hirgelinay shabakadda Citcoin oo leh hawlahan soo socda: ku dar koonto, hel dheelitir, kor u qaad koontadaada, u wareejinta qadaadiicda hal akoon oo kale. Haddaba, maxaa nagu kacay inaan dhisno PoC?
Haddii xogta qaar loo baahan yahay in aan lagu kaydin blockchain, laakiin ku jira kayd gaar ah, ka dibna baro sida loo dhexgalo, tusaale ahaan, PostgreSQL;