Чашмонат метарсанду дастонат хориш мекунад!
Дар мақолаҳои қаблӣ, мо бо технологияҳое сару кор доштем, ки дар онҳо блокчейнҳо сохта мешаванд (
Hyperledger Fabric - як blockchain универсалӣ
Умуман, системаи иттилоотии универсалӣ инҳоянд:
- Маҷмӯи серверҳо ва ядрои нармафзор, ки мантиқи тиҷоратро иҷро мекунад;
- Интерфейсҳо барои ҳамкорӣ бо система;
- Асбобҳо барои бақайдгирӣ, аутентификатсия ва иҷозати дастгоҳҳо/одамҳо;
- Пойгоҳи додаҳо, ки маълумоти оперативӣ ва архивиро нигоҳ медорад:
Варианти расмии Hyperledger Fabric -ро дар он хондан мумкин аст
Архитектураи матоъҳои Hyperledger
Диаграмма меъмории Hyperledger Fabric-ро нишон медиҳад:
Ташкилотҳо — ташкилотҳо ҳамсолон доранд, яъне. blockchain аз ҳисоби дастгирии созмонҳо вуҷуд дорад. Ташкилотҳои гуногун метавонанд қисми як канал бошанд.
канал — сохтори мантиқӣ, ки ҳамсолонро ба гурӯҳҳо муттаҳид мекунад, яъне. blockchain муайян карда шудааст. Hyperledger Fabric метавонад ҳамзамон блокчейнҳои сершуморро бо мантиқи гуногуни тиҷорат коркард кунад.
Провайдери хидматрасонии аъзогӣ (MSP) як CA (Мақоми сертификатсия) барои додани шахсият ва таъини нақшҳо мебошад. Барои сохтани гиреҳ, шумо бояд бо MSP ҳамкорӣ кунед.
Гиреҳҳои ҳамсол — транзаксияҳоро тафтиш кунед, блокчейнро нигоҳ доред, шартномаҳои оқилона иҷро кунед ва бо барномаҳо муошират кунед. Ҳамсолон шахсияти (шаҳодатномаи рақамӣ) доранд, ки аз ҷониби MSP дода мешавад. Баръакси шабакаи Bitcoin ё Etherium, ки дар он ҳама гиреҳҳо ҳуқуқи баробар доранд, дар Hyperledger Fabric гиреҳҳо нақшҳои гуногун мебозанд:
- Ҳамсол шояд тарафдори ҳамсол (EP) ва шартномаҳои оқилона иҷро кунед.
- Ҳамсолон (CP) - танҳо маълумотро дар blockchain захира кунед ва "Ҳолати ҷаҳонӣ" -ро навсозӣ кунед.
- Anchor Peer (AP) - агар якчанд ташкилотҳо дар blockchain иштирок кунанд, пас барои муоширати байни онҳо ҳамсолони лангар истифода мешаванд. Ҳар як ташкилот бояд як ё якчанд ҳамтоёни лангар дошта бошад. Бо истифода аз AP, ҳар як ҳамсол дар созмон метавонад дар бораи ҳамаи ҳамсолони созмонҳои дигар маълумот гирад. Барои ҳамоҳангсозии иттилоот байни НМ истифода мешавад
протоколи ғайбат . - Пешвои ҳамсол — агар ташкилот якчанд ҳамсол дошта бошад, пас танҳо роҳбари ҳамсол аз хидмати Фармоиш блокҳоро гирифта, ба дигар ҳамсолон медиҳад. Раҳбар метавонад аз ҷониби ҳамсолон дар созмон статикӣ ё динамикӣ муайян карда шавад. Протоколи ғайбат низ барои ҳамоҳангсозии маълумот дар бораи роҳбарон истифода мешавад.
Дороиҳо — объектҳое, ки арзиш доранд ва дар блокчейн нигоҳ дошта мешаванд. Аниқтараш, ин маълумоти калидӣ дар формати JSON мебошад. Ин маълумотест, ки дар Blockchain сабт шудааст. Онҳо таърихе доранд, ки дар blockchain нигоҳ дошта мешаванд ва ҳолати кунунӣ, ки дар пойгоҳи додаҳои "Давлати Ҷаҳонӣ" нигоҳ дошта мешаванд. Сохторҳои маълумот вобаста ба вазифаҳои тиҷоратӣ худсарона пур карда мешаванд. Майдонҳои ҳатмӣ вуҷуд надоранд, танҳо як тавсия ин аст, ки дороиҳо бояд соҳиби ва арзишманд бошанд.
Ledger — аз Blockchain ва базаи давлатии Word иборат аст, ки ҳолати кунунии дороиҳоро нигоҳ медорад. Давлати ҷаҳонӣ LevelDB ё CouchDB -ро истифода мебарад.
Шартномаи интеллектуалӣ - бо истифода аз шартномаҳои интеллектуалӣ, мантиқи тиҷорати система амалӣ карда мешавад. Дар Hyperledger Fabric, шартномаҳои интеллектуалӣ chaincode номида мешаванд. Бо истифода аз занҷир, дороиҳо ва муомилот аз болои онҳо муайян карда мешаванд. Ба истилоҳи техникӣ, шартномаҳои интеллектуалӣ модулҳои нармафзор мебошанд, ки бо забонҳои барномасозии JS ё Go амалӣ карда мешаванд.
Сиёсати тасдиқ — барои ҳар як коди занҷир, шумо метавонед сиёсатеро муқаррар кунед, ки чӣ қадар тасдиқи транзаксия бояд интизор шавад ва аз кӣ. Агар сиёсат муқаррар карда нашуда бошад, пешфарз ин аст: "муомилот бояд аз ҷониби ягон узви ягон созмони канал тасдиқ карда шавад." Намунаҳои сиёсатҳо:
- Муомилот бояд аз ҷониби ягон маъмури ташкилот тасдиқ карда шавад;
- Бояд аз ҷониби ягон аъзо ё муштарии созмон тасдиқ карда шавад;
- Бояд аз ҷониби ягон ташкилоти ҳамсол тасдиқ карда шавад.
Хизматрасонии фармоиш — транзаксияҳоро ба блокҳо бастабандӣ мекунад ва онҳоро ба ҳамсолони канал мефиристад. Интиқоли паёмҳоро ба ҳама ҳамсолони шабака кафолат медиҳад. Барои системаҳои саноатӣ истифода мешавад
CallFlow
- Ин барнома бо Hyperledger Fabric бо истифода аз Go, Node.js ё Java SDK муошират мекунад;
- Муштарӣ як транзаксияи tx эҷод мекунад ва онро ба ҳамсолони индоссант мефиристад;
- Ҳамсол имзои муштариро тафтиш мекунад, транзаксияро анҷом медиҳад ва имзои тасдиқро ба муштарӣ бармегардонад. Chaincode танҳо дар ҳамсолони индоссант иҷро карда мешавад ва натиҷаи иҷрои он ба ҳама ҳамсолон фиристода мешавад. Ин алгоритми кор консенсуси PBFT (Practical Fault Byzantine Tolerant) номида мешавад. Аз
BFT классикӣ далели фиристодани паём ва тасдиқи он на аз ҳама иштирокчиён, балки танҳо аз маҷмӯи муайян интизор аст; - Пас аз он ки муштарӣ шумораи ҷавобҳои мувофиқи сиёсати индоссаментро гирифт, вай транзаксияро ба хадамоти фармоишӣ мефиристад;
- Хидмати фармоишӣ блок тавлид мекунад ва онро ба ҳамаи ҳамсолони иҷрокунанда мефиристад. Хидмати фармоишӣ сабти пайдарпайи блокҳоро таъмин мекунад, ки ба истилоҳ форкҳои дафтарро нест мекунад (
ба бахши "Форкҳо" нигаред ); - Ҳамсолон блокро мегиранд, сиёсати тасдиқро дубора санҷед, блокро ба blockchain нависед ва ҳолатро дар МД "Ҳолати ҷаҳонӣ" тағир диҳед.
Онхое. Ин боиси тақсими нақшҳо дар байни гиреҳҳо мегардад. Ин кафолат медиҳад, ки blockchain миқёспазир ва бехатар аст:
- Шартномаҳои интеллектуалӣ (chaincode) ҳамсолонро тасдиқ мекунанд. Ин махфияти шартномаҳои интеллектуалиро таъмин мекунад, зеро онро на ҳама иштирокчиён нигоҳ медоранд, балки танҳо тавассути тасдиқи ҳамсолон.
- Фармоиш бояд зуд кор кунад. Ин бо он далел таъмин карда мешавад, ки Фармоиш танҳо блокро ташкил медиҳад ва онро ба маҷмӯи собит ҳамсолони пешво мефиристад.
- Ҳамсолони содиршуда танҳо блокчейнро нигоҳ медоранд - онҳо метавонанд бисёре аз онҳо бошанд ва онҳо қувваи зиёд ва амалиёти фаврӣ талаб намекунанд.
Тафсилоти бештарро дар бораи қарорҳои меъмории Hyperledger Fabric ва чаро он ин тавр кор мекунад ва на ба таври дигар дар ин ҷо пайдо кардан мумкин аст:
Ҳамин тавр, Hyperledger Fabric як системаи воқеан универсалӣ аст, ки шумо метавонед:
- Татбиқи мантиқи тиҷорати худсарона бо истифода аз механизми шартномаи оқилона;
- Маълумотро аз пойгоҳи додаҳои blockchain дар формати JSON сабт ва қабул кунед;
- Бо истифода аз мақомоти сертификатсия дастрасии API-ро диҳед ва тафтиш кунед.
Акнун, ки мо дар бораи мушаххасоти Hyperledger Fabric каме фаҳмидем, биёед дар ниҳоят як кори муфид кунем!
Ҷойгиркунии blockchain
Тартиб додани масъала
Вазифа аз он иборат аст, ки шабакаи Citcoin бо вазифаҳои зерин амалӣ карда шавад: ҳисоб эҷод кунед, бақия гиред, ҳисоби худро пур кунед, тангаҳо аз як ҳисоб ба ҳисоби дигар интиқол диҳед. Биёед модели объектро кашем, ки мо минбаъд онро дар шартномаи интеллектуалӣ татбиқ хоҳем кард. Ҳамин тавр, мо ҳисобҳое хоҳем дошт, ки аз рӯи номҳо муайян карда шудаанд ва дорои тавозун ва рӯйхати ҳисобҳо мебошанд. Ҳисобҳо ва рӯйхати ҳисобҳо аз нуқтаи назари дороиҳои Hyperledger Fabric мебошанд. Аз ин рӯ, онҳо таърих ва вазъи кунунӣ доранд. Ман кӯшиш мекунам, ки инро равшантар кашам:
Рақамҳои боло ҳолати кунунӣ мебошанд, ки дар пойгоҳи додаҳои "Давлати Ҷаҳонӣ" нигоҳ дошта мешаванд. Дар зер рақамҳое ҳастанд, ки таърихи дар blockchain нигоҳ дошташударо нишон медиҳанд. Ҳолати ҷории дороиҳо тавассути муомилот тағир дода мешавад. Актив танҳо дар маҷмӯъ тағир меёбад, бинобар ин дар натиҷаи муомилот объекти нав сохта мешавад ва арзиши ҷории дороиҳо ба таърих ворид мешавад.
IBM Cloud
Мо ҳисобро дар
Бо истифода аз платформаи Blockchain як шабакаи асосии blockchain эҷод кунед Шартномаи интеллектуалии blockchain созед ва иҷро кунед Ҳодисаҳоро аз Blockchain Platform интиқол диҳед
Дар зер скриншотҳои платформаи IBM Blockchain оварда шудаанд. Ин дастур оид ба сохтани блокчейн нест, балки танҳо як намоиши доираи вазифа аст. Ҳамин тавр, барои мақсадҳои худ, мо як созмонро ташкил медиҳем:
Мо дар он гиреҳҳо эҷод мекунем: Orderer CA, Org1 CA, Orderer Peer:
Мо корбаронро эҷод мекунем:
Канал эҷод кунед ва онро citcoin меномед:
Аслан Channel як blockchain аст, бинобар ин он бо блоки сифр оғоз мешавад (Блоки Ҳастӣ):
Навиштани шартномаи интеллектуалӣ
/*
* 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;
Ба таври интуитивӣ, ҳама чиз бояд дар ин ҷо равшан бошад:
- Якчанд функсияҳо мавҷуданд (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), ки барномаи намоишӣ бо истифода аз API Hyperledger Fabric даъват мекунад.
- Функсияҳои SendFrom ва RefillBalance Ҳодисаҳоеро тавлид мекунанд, ки барномаи намоишӣ қабул мекунад.
- Функсияи фаврӣ як маротиба вақте даъват карда мешавад, ки шартномаи интеллектуалӣ таъсис дода мешавад. Дар асл, он на танҳо як маротиба номида мешавад, балки ҳар дафъае, ки версияи шартномаи интеллектуалӣ тағир меёбад. Аз ин рӯ, оғоз кардани рӯйхат бо массиви холӣ фикри бад аст, зеро Ҳоло, вақте ки мо версияи шартномаи интеллектуалиро тағир медиҳем, мо рӯйхати ҷорӣро аз даст медиҳем. Аммо хуб аст, ман танҳо омӯхта истодаам).
- Ҳисобҳо ва рӯйхати ҳисобҳо сохторҳои додаҳои JSON мебошанд. JS барои коркарди додаҳо истифода мешавад.
- Шумо метавонед бо истифода аз занги функсияи getState арзиши ҷории дороиро гиред ва онро бо истифода аз putState навсозӣ кунед.
- Ҳангоми эҷод кардани Ҳисоб, функсияи AddAccount даъват карда мешавад, ки дар он барои шумораи максималии ҳисобҳо дар blockchain муқоиса карда мешавад (maxAccounts = 5). Ва дар ин ҷо ҷабби вуҷуд дорад (шумо пай бурдед?), ки боиси афзоиши беохири шумораи ҳисобҳо мегардад. Чунин хатогиҳо бояд пешгирӣ карда шаванд)
Баъдан, мо шартномаи интеллектуалиро ба Канал бор мекунем ва онро эҷод мекунем:
Биёед ба транзаксия барои насб кардани шартномаи Smart назар кунем:
Биёед ба тафсилоти Каналамон назар андозем:
Дар натиҷа, мо диаграммаи зерини шабакаи blockchain дар абри IBM мегирем. Диаграмма инчунин як барномаи намоиширо нишон медиҳад, ки дар абри Amazon дар сервери виртуалӣ кор мекунад (бештар дар бораи он дар фасли оянда):
Эҷоди GUI барои зангҳои Hyperledger Fabric API
Hyperledger Fabric дорои API мебошад, ки метавонад барои:
- Эҷоди канал;
- Пайвастшавӣ ба канал;
- Насб ва эҷоди шартномаҳои интеллектуалӣ дар канал;
- амалиёти занг;
- Дар бораи blockchain маълумот дархост кунед.
Таҳияи барнома
Дар барномаи намоишии мо мо API-ро танҳо барои занг задан ба транзаксияҳо ва дархост кардани маълумот истифода хоҳем кард, зеро Мо аллакай қадамҳои боқимондаро бо истифода аз платформаи blockchain IBM анҷом додем. Мо бо истифода аз стек технологияи стандартӣ GUI менависем: Express.js + Vue.js + Node.js. Шумо метавонед дар бораи чӣ гуна оғоз кардани эҷоди замимаҳои муосири веб мақолаи алоҳида нависед. Дар ин ҷо ман истинод ба силсилаи лексияҳоеро мегузорам, ки ба ман бештар писанд омад:
- HyperledgerDemo/v1/init - блокчейнро оғоз кунед;
- HyperledgerDemo/v1/accounts/list — гирифтани рӯйхати ҳамаи ҳисобҳо;
- HyperledgerDemo/v1/account?name=Bob&balance=100 — эҷод кардани ҳисоби Боб;
- HyperledgerDemo/v1/info?account=Боб — дар бораи ҳисоби Боб маълумот гиред;
- HyperledgerDemo/v1/transaction?from=Bob&to=Алис&volume=2 - интиқоли ду танга аз Боб ба Алис;
- HyperledgerDemo/v1/disconnect - пайвастро ба blockchain пӯшед.
Тавсифи API бо мисолҳои дохилшуда
Замимаи намоишӣ дар абрҳои Amazon
Ман барномаро ба Amazon бор кардам, зеро... IBM то ҳол натавонистааст ҳисоби худро навсозӣ кунад ва ба ман иҷозат диҳад, ки серверҳои виртуалӣ эҷод кунам. Чӣ тавр ба домен гелос илова кардан мумкин аст:
- Блокчейнро оғоз кунед;
- Ҳисоб эҷод кунед (аммо ҳоло шумо ҳисоби нав эҷод карда наметавонед, зеро шумораи максималии ҳисобҳои дар шартномаи интеллектуалӣ зикршуда дар blockchain расидааст);
- Рӯйхати ҳисобҳоро гиред;
- Интиқоли тангаҳои citcoin байни Алис, Боб ва Алекс;
- Гирифтани рӯйдодҳо (аммо ҳоло роҳи нишон додани рӯйдодҳо вуҷуд надорад, бинобар ин интерфейс барои соддагӣ мегӯяд, ки рӯйдодҳо дастгирӣ намешаванд);
- Ҳисоб кардани амалҳо.
Аввал мо blockchain-ро оғоз мекунем:
Баъдан, мо ҳисоби худро эҷод мекунем, бо тавозун вақтро беҳуда сарф накунед:
Мо рӯйхати ҳамаи ҳисобҳои дастрасро мегирем:
Мо ирсолкунанда ва қабулкунандаро интихоб мекунем ва тавозуни онҳоро мегирем. Агар ирсолкунанда ва гиранда якхела бошанд, пас ҳисоби ӯ пур карда мешавад:
Дар гузориш мо иҷрои транзаксияҳоро назорат мекунем:
Дар асл, ин ҳама бо барномаи намоишӣ аст. Дар зер шумо метавонед амалиёти моро дар blockchain бубинед:
Ва рӯйхати умумии амалиётҳо:
Бо ин, мо татбиқи PoC-ро барои эҷоди шабакаи Citcoin бомуваффақият анҷом додем. Барои он ки Citcoin ба шабакаи мукаммали интиқоли тангаҳо табдил ёбад, боз чӣ кор кардан лозим аст? Хеле хурд:
- Дар марҳилаи эҷоди ҳисоб, тавлиди калиди хусусӣ/оммавиро амалӣ кунед. Калиди хусусӣ бояд бо корбари ҳисоб нигоҳ дошта шавад, калиди ҷамъиятӣ бояд дар blockchain нигоҳ дошта шавад.
- Интиқоли тангаро анҷом диҳед, ки дар он калиди оммавӣ, на ном, барои муайян кардани корбар истифода мешавад.
- Амалиётҳоеро, ки аз корбар ба сервер мегузаранд, бо калиди шахсии ӯ рамзгузорӣ кунед.
хулоса
Мо шабакаи Citcoin-ро бо вазифаҳои зерин татбиқ кардем: ҳисоб илова кунед, бақия гиред, ҳисоби худро пур кунед, тангаҳо аз як ҳисоб ба ҳисоби дигар интиқол диҳед. Пас, сохтани як PoC ба мо чӣ арзиш дошт?
- Шумо бояд блокчейнро дар маҷмӯъ ва махсусан Hyperledger Fabric-ро омӯзед;
- Истифодаи абрҳои IBM ё Amazon омӯзед;
- Забони барномасозии JS ва баъзе чаҳорчӯбаи вебро омӯзед;
- Агар баъзе маълумотҳо на дар blockchain, балки дар пойгоҳи додаҳои алоҳида нигоҳ дошта шаванд, пас интегратсияро, масалан, бо PostgreSQL омӯзед;
- Ва ниҳоят, вале на камтар аз он - шумо наметавонед дар ҷаҳони муосир бе дониши Linux зиндагӣ кунед!)
Албатта, ин илми ракета нест, аммо шумо бояд сахт кор кунед!
Сарчашмаҳо дар GitHub
Сарчашмаҳо гузоштанд
Каталоги «сервер» — Сервери Node.js
Каталоги «муштарӣ» — муштарии Node.js
Каталоги «blockchain"(арзишҳои параметрҳо ва калидҳо, албатта, кор намекунанд ва танҳо ҳамчун мисол оварда шудаанд):
- шартнома — рамзи сарчашмаи шартномаи интеллектуалӣ
- ҳамён — калидҳои корбар барои истифодаи API Hyperledger Fabric.
- *.cds - версияҳои тартибдодашудаи шартномаҳои интеллектуалӣ
- Файлҳои *.json - намунаҳои файлҳои конфигуратсия барои истифодаи Hyperledger Fabric API
Ин танҳо ибтидо аст!
Манбаъ: will.com