Meso ako ari kutya uye maoko ako ari kuvava!
Muzvinyorwa zvakapfuura, takabata matekinoroji pakavakirwa blockchains (
Hyperledger Fabric - universal blockchain
Kazhinji kutaura, a universal information system ndeiyi:
- Seti yemaseva uye software musimboti inoita bhizinesi logic;
- Interfaces yekudyidzana nehurongwa;
- Zvishandiso zvekunyoresa, kutendeseka uye mvumo yemidziyo / vanhu;
- Dhatabhesi inochengeta data rekushanda uye rekuchengetedza:
Iyo yepamutemo vhezheni yeiyo Hyperledger Fabric inogona kuverengerwa pa
Hyperledger Fabric Architecture
Dhiagiramu inoratidza iyo Hyperledger Fabric architecture:
Misangano - masangano ane vezera, i.e. blockchain iripo nekuda kwekutsigirwa kwemasangano. Masangano akasiyana anogona kuve chikamu chegwara rimwe chete.
mugero - chimiro chinonzwisisika chinobatanidza vezera mumapoka, i.e. iyo blockchain inotsanangurwa. Hyperledger Fabric inogona panguva imwe chete kugadzirisa akawanda blockchains ane akasiyana bhizinesi logic.
Nhengo dzeSevhisi Vanopa (MSP) iCA (Chiremera Chiremera) chekupa chitupa uye kugovera mabasa. Kuti ugadzire node, unofanirwa kutaurirana neMSP.
Peer nodes - simbisa kutengeserana, chengetedza blockchain, ita zvibvumirano zvakangwara uye pindirana nemaapplication. Vezera ravo vane chitupa (digital certificate), chinopihwa neMSP. Kusiyana neBitcoin kana Etherium network, uko node dzese dzine kodzero dzakaenzana, muHyperledger Fabric node dzinotamba mabasa akasiyana:
- Peer pamwe kutsigira shamwari (EP) uye ita zvibvumirano zvakangwara.
- Kuzvipira vezera (CP) - chengetedza chete data mu blockchain uye gadzirisa iyo "Nyika yenyika".
- Anchor Peer (AP) - kana masangano akati wandei akatora chikamu mu blockchain, ipapo anchor vezera rinoshandiswa kutaurirana pakati pavo. Sangano rega rega rinofanirwa kunge riine mumwe kana anopfuura anchor vezera. Uchishandisa AP, chero vezera musangano vanogona kuwana ruzivo nezve vese vezera mune mamwe masangano. Inoshandiswa kuwiriranisa ruzivo pakati peAPs
makuhwa protocol . - Mutungamiriri Peer - kana sangano riine vezera rakati wandei, saka mutungamiri wezera chete ndiye achagamuchira mabhuroko kubva kuKurongedzera sevhisi uye agovapa kune vamwe vese vezera. Mutungamiri anogona kutsanangurwa zvakamira kana kusarudzwa zvine simba nevezera rake musangano. Iyo gossip protocol inoshandiswawo kuwiriranisa ruzivo nezvevatungamiriri.
midziyo - masangano ane kukosha uye akachengetwa pa blockchain. Kunyanya zvakanyanya, iyi kiyi-yakakosha data muJSON fomati. Ndiyo data iyi yakanyorwa muBlockchain. Vane nhoroondo, iyo inochengetwa mu blockchain, uye ikozvino mamiriro, iyo inochengetwa mu "World state" database. Data zvimiro zvinozadzwa zvisina tsarukano zvichienderana nemabasa ebhizinesi. Iko hakuna minda inodiwa, kurudziro chete ndeyekuti midziyo inofanirwa kuve nemuridzi uye yakakosha.
Ledger -Inosanganisira iyo Blockchain uye iyo Word state dhatabhesi, iyo inochengeta iyo iripo mamiriro ezvinhu. Nyika yenyika inoshandisa LevelDB kana CouchDB.
Chibvumirano chakangwara - Uchishandisa smart zvibvumirano, iyo bhizinesi logic yehurongwa inoitwa. MuHyperledger Fabric, zvibvumirano zvakangwara zvinonzi chaincode. Kushandisa chaincode, zvinhu uye kutengeserana pamusoro pazvo zvinotsanangurwa. Mukutaura kwehunyanzvi, zvibvumirano zvakangwara isoftware modules inoshandiswa muJS kana Go programming mitauro.
Endorsement policy - yechaincode yega yega, unogona kuseta mutemo wekuti mangani ekusimbisa kwekutengeserana kunofanirwa kutarisirwa uye kubva kunaani. Kana mutemo usina kugadzwa, zvino zvazvinoita ndezvekuti: "kutengeserana kunofanirwa kusimbiswa nechero nhengo yechero sangano muchiteshi." Mienzaniso yemitemo:
- Kudyidzana kunofanirwa kubvumidzwa nechero maneja wesangano;
- Inofanirwa kusimbiswa nechero nhengo kana mutengi wesangano;
- Inofanirwa kusimbiswa nechero sangano revezera.
Kuhodha sevhisi - inorongedza kutengeserana mumabhuroko uye inotumira kune vezera muchiteshi. Inovimbisa kutumirwa kwemeseji kune vese vezera pane network. Inoshandiswa kumaindasitiri masisitimu
CallFlow
- Chishandiso chinotaurirana neHyperledger Fabric uchishandisa Go, Node.js kana Java SDK;
- Mutengi anogadzira tx transaction uye anoitumira kune vanobvumira vezera;
- Iyo Peer inosimbisa siginicha yemutengi, inopedza kutengeserana, uye inotumira siginecha yekubvumidza kudzosera kumutengi. Chaincode inourayiwa chete kune vezera rinotsigira, uye mhedzisiro yekuitwa kwayo inotumirwa kune vese vezera. Iyi algorithm yebasa inonzi PBFT (Practical Byzantine Fault Tolerant) kubvumirana. Yakasiyana ne
classic BFT chokwadi chekuti meseji inotumirwa uye kusimbiswa kunotarisirwa kwete kubva kune vese vatori vechikamu, asi chete kubva kune imwe seti; - Mushure mekunge mutengi agamuchira nhamba yemhinduro dzinoenderana nemutemo wekusimbisa, anotumira kutengeserana kuKuraira sevhisi;
- Iyo Kuodha sevhisi inogadzira block uye inotumira kune vese vanoita vezera. Kuodha sevhisi inovimbisa kuteedzana kurekodha kwezvivharo, izvo zvinobvisa iyo inonzi ledger fork (
ona chikamu "Forks" ); - Vezera vanogashira block, tarisa iyo endorsement policy zvakare, nyora iyo block ku blockchain uye shandura iyo nyika mu "World state" DB.
Avo. Izvi zvinoguma nekuparadzaniswa kwemabasa pakati pemanodhi. Izvi zvinoita kuti blockchain iwedzere uye yakachengeteka:
- Zvibvumirano zveSmart (chaincode) zvinoita kutsigira vezera. Izvi zvinovimbisa kuvanzika kwezvibvumirano zvakangwara, nekuti haina kuchengetwa nevose vatori vechikamu, asi chete nekutsigira vezera.
- Kuraira kunofanira kushanda nekukurumidza. Izvi zvinosimbiswa nenyaya yekuti Kurongeka kunongoumba bhuroka uye kunotumira kune yakagadziriswa seti yevatungamiri vezera.
- Kuzvipira vezera kunongochengeta blockchain - panogona kunge paine akawanda acho uye haadi simba rakawanda uye kushanda ipapo.
Mamwe mashoko pamusoro pezvigadziriso zveHyperledger Fabric uye nei ichishanda nenzira iyi uye kwete neimwe nzira inogona kuwanikwa pano:
Saka, Hyperledger Fabric ndeyechokwadi yepasirese system yaunogona nayo:
- Ita zvisina tsarukano bhizinesi logic uchishandisa smart contract mechanism;
- Rekodha uye ugamuchire data kubva kune blockchain database muJSON fomati;
- Ipa uye simbisa kuwanikwa kweAPI uchishandisa Chiremera Chiremera.
Iye zvino zvatiri kunzwisisa zvishoma nezve izvo chaizvo zveHyperledger Fabric, ngatiite chimwe chinhu chinobatsira!
Kutumira blockchain
Kugadzirwa kwedambudziko
Basa nderekushandisa iyo Citcoin network neanotevera mabasa: gadzira account, tora chiyero, wedzera account yako, kuendesa mari kubva kune imwe account kuenda kune imwe. Ngatidhirowei modhi yechinhu, yatichazowedzera kuita muchibvumirano chakangwara. Saka, isu tichava nemaakaundi anozivikanwa nemazita uye ane chiyero, uye rondedzero yemaakaundi. Maakaunti uye rondedzero yeakaunti, maererano neHyperledger Fabric assets. Naizvozvo, vane nhoroondo uye mamiriro azvino. Ndichaedza kudhirowa izvi zvakajeka:
Nhamba dzepamusoro ihurumende iripo, iyo inochengetwa mu "World state" database. Pazasi pavo pane manhamba anoratidza nhoroondo iyo yakachengetwa mu blockchain. Mamiriro ezvinhu aripo iye zvino anochinjwa nekutengeserana. Iyo Asset inoshanduka chete seyakazara, saka semugumisiro wekutengesa, chinhu chitsva chinogadzirwa, uye kukosha kwezvino kweasset kunopinda munhoroondo.
IBM Cloud
Isu tinogadzira account mukati
Gadzira yakakosha blockchain network uchishandisa iyo Blockchain Platform Gadzira uye ita blockchain smart kontrakiti Emit zviitiko kubva kuBlockchain Platform
Izvi zvinotevera zviratidziro zve IBM Blockchain papuratifomu. Uyu hausi murairo wekuti ungagadzira sei blockchain, asi kungoratidza chiyero chebasa racho. Saka, nekuda kwezvinangwa zvedu, tinoita Sangano rimwechete:
Isu tinogadzira node mairi: Orderer CA, Org1 CA, Orderer Peer:
Isu tinogadzira vashandisi:
Gadzira Chiteshi uye woidaidza kuti citcoin:
Chaizvoizvo Channel i blockchain, saka inotanga ne block zero (Genesis block):
Kunyora A Smart Contract
/*
* 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;
Intuitively, zvese zvinofanirwa kujeka pano:
- Kune akati wandei mabasa (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) ayo chirongwa chedemo chichadaidza uchishandisa Hyperledger Fabric API.
- Iyo SendFrom uye RefillBalance mabasa anoburitsa Zviitiko izvo chirongwa chedemo chinogashira.
- Iyo instantiate function inodaidzwa kamwe chete kana kontrakiti yakangwara yaiswa. Muchokwadi, inodanwa kwete kamwe chete, asi nguva dzese iyo smart contract vhezheni inoshanduka. Naizvozvo, kutanga rondedzero ine isina chinhu array ipfungwa yakaipa, nekuti Zvino, kana isu tashandura vhezheni yekontrakiti yakangwara, isu tinorasikirwa nerondedzero iripo. Asi zvakanaka, ndiri kungodzidza).
- Maakaunti uye rondedzero yeakaunti JSON data zvimiro. JS inoshandiswa kugadzirisa data.
- Iwe unogona kuwana kukosha kwazvino kweasset uchishandisa iyo getState function call, uye kuigadzirisa uchishandisa putState.
- Paunenge uchigadzira Akaundi, iyo AddAccount basa inodanwa, umo kuenzanisa kunoitwa kwehuwandu hwehuwandu hweakaundi mu blockchain (maxAccounts = 5). Uye pano pane jamb (wacherechedza here?), iyo inotungamirira kukuwedzera kusingagumi kwenhamba yeakaunti. Kukanganisa kwakadaro kunofanira kudzivirirwa)
Tevere, tinorodha kondirakiti yakangwara muChannel uye toisimbisa:
Ngatitarisei kutengeserana kwekuisa Smart Contract:
Ngatitarisei ruzivo nezve Channel yedu:
Nekuda kweizvozvo, tinowana iyo inotevera dhizaini ye blockchain network mune IBM gore. Iyo dhizaini inoratidzawo chirongwa chedemo chinomhanya muAmazon gore pane chaiyo server (zvimwe nezvayo muchikamu chinotevera):
Kugadzira GUI yeHyperledger Fabric API mafoni
Hyperledger Fabric ine API inogona kushandiswa ku:
- Gadzira chiteshi;
- Zvisungo zvinotarisa kune chiteshi;
- Kuiswa uye kuisirwa kweakangwara zvibvumirano muchiteshi;
- Kufona kutengeserana;
- Kumbira ruzivo nezve blockchain.
Kuvandudza application
Muchirongwa chedu chedemo isu tichashandisa iyo API chete kufonera mabatiro uye kukumbira ruzivo, nekuti Isu takatopedza matanho asara tichishandisa IBM blockchain chikuva. Isu tinonyora GUI tichishandisa yakajairwa tekinoroji stack: Express.js + Vue.js + Node.js. Iwe unogona kunyora chinyorwa chakasiyana chekuti ungatanga sei kugadzira mawebhusaiti emazuva ano. Pano ini ndichasiya chinongedzo kune dzakatevedzana dzehurukuro dzandainyanya kufarira:
- HyperledgerDemo/v1/init - tanga iyo blockchain;
- HyperledgerDemo/v1/accounts/list - tora runyoro rweakaundi ese;
- HyperledgerDemo/v1/account?name=Bob&balance=100 β gadzira account yaBob;
- HyperledgerDemo/v1/info?account=Bob β wana ruzivo nezveakaundi yaBob;
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - kutamisa mari mbiri kubva kuBob kuenda kuna Alice;
- HyperledgerDemo/v1/disconnect - vhara kubatana kune blockchain.
Tsanangudzo yeAPI ine mienzaniso inosanganisirwa mukati
Demo application muAmazon gore
Ndakaisa application kuAmazon nekuti... IBM haisati yakwanisa kukwidziridza account yangu uye kunditendera kugadzira maseva chaiwo. Maitiro ekuwedzera cherry kune domain:
- Kutanga iyo blockchain;
- Gadzira Akaunti (asi ikozvino haugone kugadzira Akaunti nyowani, nekuti iyo yakawanda nhamba yeakaundi yakatsanangurwa muchibvumirano che smart yasvikwa mu blockchain);
- Gamuchira runyoro rweMaakaundi;
- Kuendesa citcoin mari pakati paAlice, Bob naAlex;
- Gamuchira zviitiko (asi ikozvino hapana nzira yekuratidza zviitiko, saka kuti zvive nyore, iyo interface inoti zviitiko hazvitsigirwe);
- Log zviito.
Kutanga isu tinotanga iyo blockchain:
Tevere, isu tinogadzira account yedu, usatambise nguva nechiyero:
Isu tinowana rondedzero yemaakaundi ese aripo:
Isu tinosarudza mutumiri uye mugamuchiri, uye tinotora zviyero zvavo. Kana iye anotumira uye anogamuchira vakafanana, saka account yake inozadzikiswa:
Mune iyo log isu tinotarisisa maitirwo ekutengeserana:
Chaizvoizvo, ndizvo zvese nedemo chirongwa. Pazasi iwe unogona kuona kutengeserana kwedu mu blockchain:
Uye iyo general rondedzero yekutengeserana:
Neizvi, takabudirira kupedza kushandiswa kwePoC kugadzira iyo Citcoin network. Chii chimwe chinofanira kuitwa kuti Citcoin ive network yakazara-yakazara yekufambisa mari? Zvishoma-shoma:
- Padanho rekugadzira account, ita chizvarwa cheyakavanzika / yeruzhinji kiyi. Kiyi yakavanzika inofanirwa kuchengetwa nemushandisi weakaundi, kiyi yeruzhinji inofanirwa kuchengetwa mu blockchain.
- Ita kuendesa mari uko kiyi yeruzhinji, kwete zita, inoshandiswa kuzivisa mushandisi.
- Encrypt transactions kubva kumushandisi kuenda kune server nekiyi yake yakavanzika.
mhedziso
Isu takaita iyo Citcoin network neanotevera mabasa: wedzera account, tora chiyero, wedzera account yako, kuendesa mari kubva kune imwe account kuenda kune imwe. Saka, zvakatidyira chii kuvaka PoC?
- Iwe unofanirwa kudzidza blockchain kazhinji uye Hyperledger Fabric kunyanya;
- Dzidza kushandisa IBM kana Amazon makore;
- Dzidza JS programming mutauro uye imwe web framework;
- Kana imwe data inoda kuchengetwa kwete mu blockchain, asi mune imwe dhatabhesi, zvino dzidza kubatanidza, semuenzaniso, nePostgreSQL;
- Uye chekupedzisira asi chisiri chidiki - haugone kugara munyika yazvino usina ruzivo rweLinux!)
Ehe, haisi rocket sainzi, asi iwe unofanirwa kushanda nesimba!
Zvinyorwa paGitHub
Zvinyorwa zvinoiswa
Catalog Β«ServerΒ»- Node.js server
Catalog Β«munhu anoda kubetserwaΒ»- Node.js mutengi
Catalog Β«blockchain"(parameter tsika nemakiyi, hongu, hazvisi-kushanda uye zvinopihwa semuenzaniso):
- chibvumirano - smart contract source code
- chikwama - mushandisi makiyi ekushandisa iyo Hyperledger Fabric API.
- * .cds - yakaunganidzwa shanduro dzezvibvumirano zvakangwara
- *.json mafaira - mienzaniso yemafaira ekugadzirisa ekushandisa Hyperledger Fabric API
Anongova mavambo!
Source: www.habr.com