Kei te mataku o kanohi, kei te patito o ringaringa!
I nga tuhinga o mua, i korerohia e matou nga hangarau i hangaia ai nga poraka (Me aha tatou ki te hanga poraka?) me nga keehi ka taea te whakatinana me o raatau awhina (He aha te take me hanga he keehi?). Kua tae ki te wa ki te mahi me o ringaringa! Hei whakatinana i nga kaiurungi me te PoC (Proof of Concept), he pai ki ahau te whakamahi i nga kapua, na te mea... ka taea te uru mai i nga waahi katoa o te ao, a, i te nuinga o te waa, kaore he take e pau i te wa mo te whakaurunga o te taiao, na te mea He whirihoranga tatūkē. Na, me hanga e tatou tetahi mea ngawari, hei tauira, he whatunga mo te whakawhiti moni i waenga i nga kaiuru me te karanga ma te iti ko Bitcoin. Mo tenei ka whakamahia e matou te kapua IBM me te ao poraka Hyperledger Fabric. Tuatahi, kia mohio tatou he aha i kiia ai a Hyperledger Fabric he poraka mo te ao?
Hyperledger Fabric - he poraka mo te ao
Ko te tikanga, ko te punaha korero mo te ao ko:
He huinga o nga kaitoro me tetahi punaha rorohiko e mahi ana i te arorau pakihi;
Nga atanga mo te taunekeneke me te punaha;
Nga taputapu mo te rehitatanga, motuhēhēnga me te whakamanatanga o nga taputapu/tangata;
Raraunga Raraunga Raraunga Raraunga Mahi me te Puranga:
Ko te putanga mana o te Hyperledger Fabric ka taea te panui ki pae, me te poto, ko te Hyperledger Fabric he papaa tuwhera e taea ai e koe te hanga poraka motuhake me te whakahaere i nga kirimana maamaa kua tuhia ki roto i nga reo kaupapa JS me Go. Kia ata tirohia te hoahoanga o Hyperledger Fabric me te mohio he punaha mo te ao katoa he mea motuhake mo te penapena me te tuhi raraunga. Ko te mea motuhake ko nga raraunga, pera i roto i nga poraka katoa, kei te rongoa i roto i nga poraka e whakanohoia ana ki runga i te poraka anake mehemea ka tae nga kaiuru ki te whakaaro me muri i te tuhi i nga raraunga kaore e taea te whakatika marie, te whakakore ranei.
Hangahanga papanga Hyperledger
E whakaatu ana te hoahoa i te hoahoanga papanga Hyperledger:
Ngā whakahaere — kei roto i nga whakahaere nga hoa, i.e. kei te noho poraka na te tautoko a nga whakahaere. Ka taea e nga whakahaere rereke tetahi waahanga o te hongere kotahi.
hongere - he hanganga arorau e whakakotahi ana i nga hoa ki roto i nga roopu, i.e. kua tohua te poraka. Ka taea e Hyperledger Fabric te tukatuka i nga wa kotahi poraka maha me nga whakaaro pakihi rereke.
Kaiwhakarato Ratonga Mema (MSP) he CA (Mana Tiwhikete) mo te whakaputa i te tuakiri me te tuku mahi. Hei waihanga i te node, me mahi koe ki te MSP.
Kopuku hoa — manatokohia nga whakawhitinga, penapena te poraka, mahia nga kirimana atamai me te taunekeneke ki nga tono. He tuakiri to nga hoa (tiwhikete mamati), na te MSP i tuku. Kaore i rite ki te whatunga Bitcoin, Etherium ranei, kei reira nga pona katoa he mana rite, kei roto i te Hyperledger Fabric he rereke nga mahi:
Hoa pea hoa tautoko (EP) me te whakahaere kirimana atamai.
Te mahi hoa (CP) - tiakina noa nga raraunga i roto i te poraka me te whakahou i te "World state".
Punga Hoa (AP) - mena he maha nga whakahaere e uru ana ki te poraka, katahi ka whakamahia nga hoa punga mo te whakawhitiwhiti korero i waenga i a raatau. Me kotahi, neke atu ranei nga hoa punga o ia whakahaere. Ma te whakamahi i te AP, ka taea e tetahi hoa o tetahi whakahaere te tiki korero mo nga hoa katoa o etahi atu whakahaere. Ka whakamahia hei tukutahi korero i waenga i nga AP kawa korero.
Kaihautu Hoa — mena he maha nga hoa o tetahi whakahaere, ka riro ko te kaihautu o te hoa anake nga poraka mai i te ratonga Whakatau ka hoatu ki era atu o nga hoa. Ko te kaihautu ka taea te tohu i runga i te ahua, i te kowhiringa hihiri ranei e nga hoa o te whakahaere. Ka whakamahia hoki te kawa kohukohu hei tukutahi korero mo nga kaiarahi.
rawa — nga hinonga e whai uara ana, e rongoa ana ki te poraka. He mea nui ake, he raraunga uara-matua tenei i te whakatakotoranga JSON. Ko tenei raraunga ka tuhia ki te Poraka Poraka. Kei a ratou he hitori, kei te rongoa i roto i te poraka, me te ahua o naianei, kei te rongoa i roto i te "World state" database. Ko nga hanganga raraunga ka whakakiia i runga i nga mahi pakihi. Karekau he mara e hiahiatia ana, ko te kupu anake me whai rangatira nga rawa me te whai taonga.
Ledger — kei roto ko te Poraka me te Puka korero a-motu, e pupuri ana i nga ahuatanga o naianei o nga rawa. Ka whakamahia e te kawanatanga o te ao LevelDB, CouchDB ranei.
Waehe Smart — te whakamahi i nga kirimana atamai, ka whakatinanahia te arorau pakihi o te punaha. I roto i te papanga Hyperledger, ko nga kirimana atamai e kiia ana ko te waehere mekameka. Ma te whakamahi i te mekameka, ka tohua nga rawa me nga tauwhitinga ki runga. I roto i nga tikanga hangarau, ko nga kirimana atamai he raupaparorohiko kua whakatinanahia i roto i nga reo hotaka JS, Go ranei.
Kaupapa here tautoko — mo ia waehere mekameka, ka taea e koe te whakatakoto kaupapa here mo te maha o nga whakapumautanga mo te tauwhitinga me tumanako me ma wai. Ki te kore te kaupapa here i whakaritea, ko te taunoa ko: "me whakau te tauwhitinga e tetahi mema o tetahi whakahaere i roto i te hongere." He tauira kaupapa here:
Me whakaae te tauwhitinga e tetahi kaiwhakahaere o te whakahaere;
Me whakamana e tetahi mema, kaihoko ranei o te whakahaere;
Me whakamana e tetahi whakahaere hoa.
Ratonga ota — ka kohia nga whakawhitinga ki roto i nga poraka ka tukuna atu ki nga hoa o te hongere. Ka whakamanahia te tuku karere ki nga hoa katoa i runga i te whatunga. Ka whakamahia mo nga punaha ahumahi Kafka kaihokohoko karere, mo te whanaketanga me te whakamatautau Solo.
Waearere
Ka whakawhitiwhiti te tono ki te Hyperledger Fabric ma te whakamahi i te Haere, Node.js, Java SDK ranei;
Ka hangaia e te kiritaki he tauwhitinga tx ka tukuna atu ki nga hoa tautoko;
Ka whakamanahia e te Hoa te hainatanga a te kiritaki, ka whakaoti i te tauwhitinga, ka tukuna ano te hainatanga whakamana ki te kaihoko. Ka mahia te Chaincode ki te hoa tautoko anake, ka tukuna te hua o tana mahi ki nga hoa katoa. Ko tenei algorithm o te mahi ka kiia ko te PBFT (Practical Byzantine Fault Tolerant) te whakaaetanga. He rereke mai i BFT matarohia ko te meka ka tukuna te karere me te whakapumautanga kaore e tumanakohia mai i nga kaiuru katoa, engari mai i tetahi huinga anake;
I muri i te whiwhinga o te kiritaki i te maha o nga whakautu e pa ana ki te kaupapa here whakamana, ka tukuna e ia te tauwhitinga ki te ratonga Whakatau;
Ka mahia e te ratonga Whakatau he poraka ka tukuna ki nga hoa mahi katoa. Ko te ratonga ota ka whakarite i te tuhi raupapa o nga poraka, ka whakakore i te marau pukapuka e kiia nei (tirohia te waahanga "Forks");
Ka whiwhi nga hoa i tetahi poraka, tirohia ano te kaupapa here whakamana, tuhia te poraka ki te poraka ka huri i te ahua i roto i te "World state" DB.
Ko era. Ka puta mai he wehewehenga o nga mahi i waenga i nga pona. Ma tenei ka whakarite kia taea te tauine me te haumaru te poraka:
Ko nga kirimana atamai (chaincode) e whakamana ana i nga hoa. Ma tenei ka whakarite te muna o nga kirimana atamai, na te mea ehara i te mea rongoa e nga kaiuru katoa, engari ma nga hoa tautoko anake.
Me tere te mahi ota. Ka whakapumautia tenei na te mea ko te Ota ka hanga poraka anake ka tukuna atu ki te huinga o nga hoa rangatira.
Ko te tuku i nga hoa ka penapena noa i te poraka - he maha o raatau kaore e hiahiatia he kaha me te mahi tere.
Na, ko Hyperledger Fabric he punaha ao katoa e taea ai e koe:
Whakatinana i te arorau pakihi ma te whakamahi i te tikanga kirimana atamai;
Tuhia me te whiwhi raraunga mai i te papaaarangi poraka i te whakatakotoranga JSON;
Tukuna me te manatoko te urunga API ma te whakamahi Mana Tiwhikete.
Inaianei kua maarama taatau mo nga korero motuhake o te papanga Hyperledger, me mahi tetahi mea whai hua!
Te tuku poraka
Kaupapa raru
Ko te mahi ko te whakatinana i te whatunga Citcoin me nga mahi e whai ake nei: te hanga i tetahi kaute, te whiwhi i te toenga, te tihi ake i to putea, te whakawhiti moni mai i tetahi kaute ki tetahi atu. Me tuhi he tauira ahanoa, ka mahia ano e tatou i roto i te kirimana atamai. Na, ka whiwhi tatou i nga kaute kua tautuhia e nga ingoa, kei roto he toenga, me te rarangi o nga kaute. Ko nga kaute me te rarangi o nga kaute, mo nga rawa Hyperledger Fabric. No reira, he hitori me te ahuatanga o naianei. Ka ngana ahau ki te tuhi marama i tenei:
Ko nga whika o runga ko te ahua o naianei, kei te rongoa i roto i te paataka raraunga "World state". Kei raro iho ko nga whika e whakaatu ana i te hitori e rongoa ana i roto i te poraka. Ko te ahua o nga rawa o naianei ka whakarerekehia e nga whakawhitinga. Ka huri noa te Rawa i te katoa, na te hua o te tauwhitinga, ka hangaia he ahanoa hou, ka uru te uara o naianei o te rawa ki te hitori.
IBM Kapua
Ka waihangahia e matou he kaute i roto IBM kapua. Hei whakamahi i te turanga poraka, me whakahou ake ki te Utu-As-You-Go. Kaore pea tenei mahi e tere, na te mea... Ka tono a IBM i etahi atu korero me te manatoko a-ringa. I runga i te tuhipoka pai, ka taea e au te kii he pai nga rauemi whakangungu a IBM e taea ai e koe te tuku Hyperledger Fabric i roto i to raatau kapua. I pai ahau ki nga raupapa tuhinga me nga tauira e whai ake nei:
Ko nga whakaahua e whai ake nei o te IBM Blockchain platform. Ehara tenei i te tohutohu mo te hanga poraka, engari he whakaaturanga noa mo te whanuitanga o te mahi. Na, mo o maatau kaupapa, ka hanga e matou tetahi Whakahaere:
Ka waihangahia e matou he kohanga ki roto: Kaiwhakarite CA, Org1 CA, Kaiwhakarite Hoa:
Ka hangaia e matou nga kaiwhakamahi:
Waihangahia he Hongere ka kiia ko te citcoin:
Ko te mea nui ko te Channel he poraka poraka, no reira ka timata ki te poraka kore (Poraka Genesis):
Te tuhi i te kirimana atamai
/*
* 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;
Ma te mohio, me maarama nga mea katoa i konei:
He maha nga mahi (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance) ka karangahia e te kaupapa demo ma te whakamahi i te Hyperledger Fabric API.
Ko nga mahi SendFrom me RefillBalance ka whakaputa i nga Takahanga ka whakawhiwhia e te kaupapa demo.
Ka karangahia te mahi inamata i te wa ka tiimata te kirimana atamai. Inaa, e kiia ana ehara i te mea kotahi anake, engari i nga wa katoa ka huri te putanga kirimana atamai. Na reira, ko te arawhiti i te rarangi me te rarangi kau he whakaaro kino, na te mea Na, ka huri tatou i te putanga o te kirimana atamai, ka ngaro tatou i te rarangi o naianei. Engari kei te pai, kei te ako noa ahau).
Ko nga kaute me te rarangi o nga kaute he hanganga raraunga JSON. Ka whakamahia a JS mo te raweke raraunga.
Ka taea e koe te tiki i te uara o naianei o tetahi rawa ma te whakamahi i te waea mahi getState, ka whakahou ma te whakamahi putState.
I te wa e hanga ana he Kaute, ka karangahia te mahi AddAccount, he whakataurite mo te maha o nga kaute kei roto i te poraka (maxAccounts = 5). Na kei konei he jamb (kua kite koe?), e arahi ana ki te pikinga mutunga kore o te maha o nga kaute. Me karohia enei hapa)
I muri mai, ka utaina e matou te kirimana atamai ki roto i te Hongere ka whakatauhia:
Kia titiro tatou ki te tauwhitinga mo te whakauru i te kirimana atamai:
Kia titiro tatou ki nga korero mo to tatou Channel:
Ko te mutunga, ka whiwhi tatou i te hoahoa e whai ake nei o te whatunga poraka i roto i te kapua IBM. Ko te hoahoa hoki e whakaatu ana i tetahi kaupapa demo e rere ana i te kapua Amazon i runga i te tūmau mariko (he maha atu mo tera i te waahanga e whai ake nei):
Te hanga i te GUI mo nga waea Hyperledger Fabric API
He API ta Hyperledger Fabric ka taea te whakamahi ki:
Waihanga hongere;
Hononga hoa ki te hongere;
Te whakaurunga me te whakaurunga o nga kirimana atamai i roto i te hongere;
Nga whakawhitinga waea;
Tonoa nga korero mo te poraka.
Te whanaketanga tono
I roto i ta maatau kaupapa demo ka whakamahia e matou te API anake ki te karanga i nga whakawhitinga me te tono korero, na te mea Kua oti i a maatau nga toenga e toe ana ma te whakamahi i te kaupapa poraka IBM. Ka tuhia e matou he GUI ma te whakamahi i te puranga hangarau paerewa: Express.js + Vue.js + Node.js. Ka taea e koe te tuhi tuhinga motuhake me pehea te tiimata ki te hanga tono tukutuku hou. I konei ka waiho e ahau he hononga ki te raupapa o nga korero i tino paingia e au: Taupānga Tukutuku Tāpae Katoa ma te whakamahi i te Vue.js & Express.js. Ko te hua ko te tono-kaitono me te atanga kauwhata taunga i roto i te ahua Hoahoa Rauemi a Google. Ko te REST API i waenga i te kiritaki me te tūmau he maha nga waea:
HyperledgerDemo/v1/init - arawhiti te poraka;
HyperledgerDemo/v1/accounts/list — tiki he rarangi o nga kaute katoa;
HyperledgerDemo/v1/info?account=Bob — tiki korero mo te putea Bob;
HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 - whakawhiti moni e rua mai i a Bob ki a Alice;
HyperledgerDemo/v1/disconnect - kati te hononga ki te poraka.
Whakaahuatanga o te API me nga tauira kei roto pae tukutuku Postman - he kaupapa rongonui mo te whakamatautau HTTP API.
Tono demo i roto i te kapua Amazon
I tukuna e ahau te tono ki Amazon na te mea... Kaore ano a IBM i kaha ki te whakahou i taku kaute me te tuku i ahau ki te hanga i nga kaitoro mariko. Me pehea te taapiri i te here ki te rohe: www.citcoin.info. Ka noho tonu ahau mo te wa poto, ka whakawetohia, na te mea... Ko nga moni reti mo te reti kei te pupuhi, kaore ano nga moni citcoin i tuhia ki runga i te utu hokohoko) Kei te whakauru ahau i nga whakaahua o te demo i roto i te tuhinga kia marama ai te arorau o te mahi. Ka taea e te tono demo:
Whakaarahia te poraka;
Waihangahia he Kaute (engari inaianei kaore e taea e koe te hanga i tetahi Kaute hou, na te mea kua tae te nuinga o nga kaute kua tohua i roto i te kirimana atamai i roto i te poraka);
Whiwhi i te rarangi o nga Kaute;
Whakawhitihia nga moni citcoin i waenga i a Alice, Bob me Alex;
Whiwhi i nga huihuinga (engari inaianei kaore he huarahi hei whakaatu i nga huihuinga, na mo te ngawari, e kii ana te atanga kaore i te tautokohia nga huihuinga);
Nga mahi takiuru.
Tuatahi ka arawhiti tatou i te poraka:
I muri mai, ka hangahia e taatau putea, kaua e ururua i te waa me te toenga:
Ka whiwhi matou i te rarangi o nga kaute katoa e waatea ana:
Ka tohua e matou te kaituku me te kaiwhiwhi, ka whiwhi i a raatau toenga. Mena he rite te kaituku me te kaiwhiwhi, ka whakakiia tana kaute:
I roto i te rangitaki ka aro turuki matou i te whakahaerenga o nga whakawhitinga:
Mau, ko te katoa ki te hōtaka demo. Kei raro ka kite koe i ta maatau whakawhitinga i roto i te poraka:
Me te rarangi whanui o nga whakawhitinga:
Na tenei, kua oti pai te whakatinanatanga o te PoC ki te hanga i te whatunga Citcoin. He aha atu ano me mahi mo Citcoin kia noho hei whatunga tuuturu mo te whakawhiti moni? He iti rawa:
I te wahanga hanga kaute, whakatinanahia te whakatipuranga o te taviri tūmataiti / tūmatanui. Me penapena te taviri tūmataiti ki te kaiwhakamahi pūkete, me penapena te kī tūmatanui ki te poraka.
Hangaia he whakawhitinga moni hei whakamahi i te taviri whanui, kaua ko te ingoa, hei tautuhi i te kaiwhakamahi.
Whakamuna nga whakawhitinga mai i te kaiwhakamahi ki te tūmau me tana kī tūmataiti.
mutunga
Kua whakatinanahia e matou te whatunga Citcoin me nga mahi e whai ake nei: te taapiri i te kaute, te whiwhi i te toenga, te tihi ake i to putea, te whakawhiti moni mai i tetahi kaute ki tetahi atu. Na, he aha te utu mo te hanga PoC?
Me ako koe i te poraka i roto i te whanui me te papanga Hyperledger rawa;
Ako ki te whakamahi kapua IBM Amazon ranei;
Akohia te reo hötaka JS me etahi angamahi tukutuku;
Mena me penapena etahi raraunga kaore i roto i te poraka, engari i roto i te waahanga motuhake, ka ako ki te whakauru, hei tauira, me PostgreSQL;
Ko te mea whakamutunga engari ko te iti rawa - kaore e taea e koe te noho ki te ao hou me te kore mohio ki te Linux!)
Ko te tikanga, ehara i te mea putaiao toka, engari me whakapau kaha koe!
He puna kei runga i a GitHub
Ka mau nga puna GitHub. Whakaahuatanga poto mo te putunga:
Putumōhio «tūmau» — Node.js tūmau
Putumōhio «kiritaki» — Kiritaki Node.js
Putumōhio «blockchain"(Ko nga uara tawhā me nga taviri, ko te tikanga, kaore i te mahi, ka hoatu hei tauira anake):
kirimana — smart contract source code
putea — taviri kaiwhakamahi mo te whakamahi i te Hyperledger Fabric API.
*.cds - nga putanga whakahiato o nga kirimana atamai
*.json files - tauira o nga konae whirihoranga mo te whakamahi i te Hyperledger Fabric API