ç®ã¯æããŠãæã¯ããããªããŸãã
以åã®èšäºã§ã¯ããããã¯ãã§ãŒã³ãæ§ç¯ãããã¯ãããžãŒã«ã€ããŠèª¬æããŸãã (
Hyperledger Fabric - ãŠãããŒãµã«ãããã¯ãã§ãŒã³
äžè¬ã«ããŠãããŒãµã«æ å ±ã·ã¹ãã ãšã¯æ¬¡ã®ãããªãã®ã§ãã
- ããžãã¹ ããžãã¯ãå®è¡ããäžé£ã®ãµãŒããŒãšãœãããŠã§ã¢ ã³ã¢ã
- ã·ã¹ãã ãšå¯Ÿè©±ããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã
- ããã€ã¹/人ã®ç»é²ãèªèšŒãèªå¯ã®ããã®ããŒã«ã
- éçšããŒã¿ãšã¢ãŒã«ã€ã ããŒã¿ãä¿åããããŒã¿ããŒã¹:
Hyperledger Fabric ã®æ£åŒçã¯ã次ã®å Žæã§èªãããšãã§ããŸãã
ãã€ããŒã¬ãžã£ãŒãã¡ããªãã¯ã¢ãŒããã¯ãã£
ãã®å³ã¯ãHyperledger Fabric ã®ã¢ãŒããã¯ãã£ã瀺ããŠããŸãã
äŒæ¥ã»çµç¹ã®æ¹ãž â çµç¹ã«ã¯ãã¢ãå«ãŸããŸããã€ãŸãã ãããã¯ãã§ãŒã³ã¯çµç¹ã®ãµããŒãã«ãã£ãŠååšããŸãã ç°ãªãçµç¹ãåããã£ãã«ã«åå ããããšãã§ããŸãã
ãã£ãã« â ãã¢ãã°ã«ãŒãã«çµåããè«çæ§é ã ãããã¯ãã§ãŒã³ãæå®ãããŠããŸãã Hyperledger Fabric ã¯ãç°ãªãããžãã¹ ããžãã¯ãæã€è€æ°ã®ãããã¯ãã§ãŒã³ãåæã«åŠçã§ããŸãã
äŒå¡ãµãŒãã¹ãããã€ã㌠(MSP) ID ã®çºè¡ãšåœ¹å²ã®å²ãåœãŠãè¡ã CA (èªèšŒå±) ã§ãã ããŒããäœæããã«ã¯ãMSP ãšå¯Ÿè©±ããå¿ èŠããããŸãã
ãã¢ããŒã â ãã©ã³ã¶ã¯ã·ã§ã³ãæ€èšŒãããããã¯ãã§ãŒã³ãä¿åããã¹ããŒã ã³ã³ãã©ã¯ããå®è¡ããã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããŸãã ãã¢ã¯ãMSP ã«ãã£ãŠçºè¡ããã ID (ããžã¿ã«èšŒææž) ãæã£ãŠããŸãã ãã¹ãŠã®ããŒããåçã®æš©å©ãæã€ãããã³ã€ã³ãã€ãŒãµãªã¢ã ã®ãããã¯ãŒã¯ãšã¯ç°ãªãããã€ããŒã¬ãžã£ãŒ ãã¡ããªãã¯ã§ã¯ããŒããç°ãªã圹å²ãæãããŸãã
- ãã¢ãããããªã 仲éãæ¯æãã (EP) ããã¹ããŒãã³ã³ãã©ã¯ããå®è¡ããŸãã
- ãã¢ãã³ãããããŠããŸã (CP) - ãããã¯ãã§ãŒã³ã«ããŒã¿ãä¿åãããäžçç¶æ ããæŽæ°ããã ãã§ãã
- ã¢ã³ã«ãŒã㢠(AP) - è€æ°ã®çµç¹ããããã¯ãã§ãŒã³ã«åå ããŠããå Žåããããã®éã®éä¿¡ã«ã¯ã¢ã³ã«ãŒ ãã¢ã䜿çšãããŸãã åçµç¹ã«ã¯ XNUMX ã€ä»¥äžã®ã¢ã³ã«ãŒ ãã¢ãå¿
èŠã§ãã AP ã䜿çšãããšãçµç¹å
ã®ã©ã®ãã¢ãä»ã®çµç¹å
ã®ãã¹ãŠã®ãã¢ã«é¢ããæ
å ±ãååŸã§ããŸãã AP éã®æ
å ±ãåæããããã«äœ¿çšãããŸã
ãŽã·ãããããã³ã« . - ãªãŒããŒã㢠â çµç¹ã«è€æ°ã®ãã¢ãããå Žåããã¢ã®ãªãŒããŒã®ã¿ãé åºä»ããµãŒãã¹ãããããã¯ãåãåããæ®ãã®ãã¢ã«æž¡ããŸãã ãªãŒããŒã¯éçã«æå®ããããšããçµç¹å ã®ãã¢ã«ãã£ãŠåçã«éžæããããšãã§ããŸãã ãŽã·ãã ãããã³ã«ã¯ããªãŒããŒã«é¢ããæ å ±ãåæããããã«ã䜿çšãããŸãã
è³ç£ â 䟡å€ãããããããã¯ãã§ãŒã³ã«ä¿åãããŠãããšã³ãã£ãã£ã ããå ·äœçã«ã¯ããã㯠JSON 圢åŒã®ããŒãšå€ã®ããŒã¿ã§ãã ãããã¯ãã§ãŒã³ã«èšé²ãããã®ã¯ãã®ããŒã¿ã§ãã ãããã«ã¯ããããã¯ãã§ãŒã³ã«ä¿åãããå±¥æŽãšããäžçç¶æ ãããŒã¿ããŒã¹ã«ä¿åãããçŸåšã®ç¶æ ããããŸãã ããŒã¿æ§é ã¯ããžãã¹ã¿ã¹ã¯ã«å¿ããŠä»»æã«åããããŸãã å¿ é ãã£ãŒã«ãã¯ãããŸãããå¯äžã®æšå¥šäºé ã¯ãè³ç£ã«ã¯ææè ãååšãã䟡å€ãããããšã§ãã
å åž³ â ãããã¯ãã§ãŒã³ãšè³ç£ã®çŸåšã®ç¶æ ãä¿åãã Word ç¶æ ããŒã¿ããŒã¹ã§æ§æãããŸãã World state 㯠LevelDB ãŸã㯠CouchDB ã䜿çšããŸãã
ã¹ããŒãå¥çŽ â ã¹ããŒã ã³ã³ãã©ã¯ãã䜿çšããŠãã·ã¹ãã ã®ããžãã¹ ããžãã¯ãå®è£ ãããŸãã Hyperledger Fabric ã§ã¯ãã¹ããŒã ã³ã³ãã©ã¯ãã¯ãã§ãŒã³ã³ãŒããšåŒã°ããŸãã ãã§ãŒã³ã³ãŒãã䜿çšããŠãè³ç£ãšãã®ãã©ã³ã¶ã¯ã·ã§ã³ãæå®ããŸãã æè¡çã«èšãã°ãã¹ããŒã ã³ã³ãã©ã¯ãã¯ãJS ãŸã㯠Go ããã°ã©ãã³ã°èšèªã§å®è£ ããããœãããŠã§ã¢ ã¢ãžã¥ãŒã«ã§ãã
æšå¥šããªã·ãŒ â ãã§ãŒã³ã³ãŒãããšã«ããã©ã³ã¶ã¯ã·ã§ã³ã®ç¢ºèªãäœåã誰ããæåŸ ãããã«é¢ããããªã·ãŒãèšå®ã§ããŸãã ããªã·ãŒãèšå®ãããŠããªãå Žåãããã©ã«ãã¯ããã©ã³ã¶ã¯ã·ã§ã³ã¯ãã£ãã«å ã®çµç¹ã®ã¡ã³ããŒã«ãã£ãŠç¢ºèªãããå¿ èŠããããã«ãªããŸãã ããªã·ãŒã®äŸ:
- ãã©ã³ã¶ã¯ã·ã§ã³ã¯çµç¹ã®ç®¡çè ã«ãã£ãŠæ¿èªãããå¿ èŠããããŸãã
- çµç¹ã®ã¡ã³ããŒãŸãã¯ã¯ã©ã€ã¢ã³ãã«ãã確èªãå¿ èŠã§ãã
- ãã¢çµç¹ã«ãã確èªãå¿ èŠã§ãã
ãªãŒããŒãµãŒãã¹ â ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯ã«ããã¯ãããã£ãã«å
ã®ãã¢ã«éä¿¡ããŸãã ãããã¯ãŒã¯äžã®ãã¹ãŠã®ãã¢ãžã®ã¡ãã»ãŒãžã®é
ä¿¡ãä¿èšŒããŸãã ç£æ¥çšã·ã¹ãã ã«äœ¿çšããã
ã³ãŒã«ãããŒ
- ã¢ããªã±ãŒã·ã§ã³ã¯ãGoãNode.jsããŸã㯠Java SDK ã䜿çšã㊠Hyperledger Fabric ãšéä¿¡ããŸãã
- ã¯ã©ã€ã¢ã³ã㯠tx ãã©ã³ã¶ã¯ã·ã§ã³ãäœæãããããæ¿èªãã¢ã«éä¿¡ããŸãã
- ãã¢ã¯ã¯ã©ã€ã¢ã³ãã®çœ²åãæ€èšŒãããã©ã³ã¶ã¯ã·ã§ã³ãå®äºãããšã³ããŒã¹ã¡ã³ã眲åãã¯ã©ã€ã¢ã³ãã«éãè¿ããŸãã ãã§ãŒã³ã³ãŒãã¯æ¿èªãã¢äžã§ã®ã¿å®è¡ããããã®å®è¡çµæã¯ãã¹ãŠã®ãã¢ã«éä¿¡ãããŸãã ãã®äœæ¥ã¢ã«ãŽãªãºã ã¯ãPBFT (Practical Byzantine Fault Tolerant) ã³ã³ã»ã³ãµã¹ãšåŒã°ããŸãã ãšã¯ç°ãªã
ã¯ã©ã·ãã¯BFT ã¡ãã»ãŒãžãéä¿¡ããããã¹ãŠã®åå è ããã®ç¢ºèªãæåŸ ãããã®ã§ã¯ãªããç¹å®ã®åå è ã®ã¿ããã®ç¢ºèªãæåŸ ããããšããäºå®ã - ã¯ã©ã€ã¢ã³ãã¯ãæ¿èªããªã·ãŒã«å¯Ÿå¿ããæ°ã®å¿çãåä¿¡ããåŸããã©ã³ã¶ã¯ã·ã§ã³ã泚æãµãŒãã¹ã«éä¿¡ããŸãã
- é åºä»ããµãŒãã¹ã¯ãããã¯ãçæãããããã³ãããããŠãããã¹ãŠã®ãã¢ã«éä¿¡ããŸãã é åºä»ããµãŒãã¹ã«ããããããã¯ã®é 次èšé²ãä¿èšŒãããããããã¬ãžã£ãŒãã©ãŒã¯ (
ããã©ãŒã¯ãã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã ); - ãã¢ã¯ãããã¯ãåä¿¡ããæ¿èªããªã·ãŒãå床確èªãããããã¯ããããã¯ãã§ãŒã³ã«æžã蟌ã¿ããäžçç¶æ ãDB ã®ç¶æ ãå€æŽããŸãã
ãããã®ã ããã«ãããããŒãéã®åœ¹å²ãåå²ãããŸãã ããã«ããããããã¯ãã§ãŒã³ãã¹ã±ãŒã©ãã«ã§å®å šã§ããããšãä¿èšŒãããŸãã
- ã¹ããŒã ã³ã³ãã©ã¯ã (ãã§ãŒã³ã³ãŒã) ã¯ãã¢ã®æ¿èªãå®è¡ããŸãã ããã«ãããã¹ããŒã ã³ã³ãã©ã¯ãã®æ©å¯æ§ãä¿èšŒãããŸãã ãã¹ãŠã®åå è ã«ãã£ãŠä¿åãããã®ã§ã¯ãªããæ¿èªãããã¢ã«ãã£ãŠã®ã¿ä¿åãããŸãã
- 泚æã¯è¿ éã«è¡ãããå¿ èŠããããŸãã ããã¯ãOrdering ããããã¯ã圢æããããããªãŒã㌠ãã¢ã®åºå®ã»ããã«éä¿¡ããã ãã§ãããšããäºå®ã«ãã£ãŠä¿èšŒãããŸãã
- ã³ããããã¢ã¯ãããã¯ãã§ãŒã³ãä¿åããã ãã§ãããã¢ã¯å€æ°ååšããå¯èœæ§ããããå€ãã®é»åãšå³æã®æäœãå¿ èŠãšããŸããã
Hyperledger Fabric ã®ã¢ãŒããã¯ã㣠ãœãªã¥ãŒã·ã§ã³ã®è©³çŽ°ãšãHyperledger Fabric ããã®æ¹æ³ã§æ©èœããä»ã®æ¹æ³ã§ã¯æ©èœããªãçç±ã«ã€ããŠã¯ããã¡ããã芧ãã ããã
ãããã£ãŠãHyperledger Fabric ã¯ã次ã®ããšãã§ããçã®æ±çšã·ã¹ãã ã§ãã
- ã¹ããŒãã³ã³ãã©ã¯ãã¡ã«ããºã ã䜿çšããŠä»»æã®ããžãã¹ããžãã¯ãå®è£ ããŸãã
- JSON 圢åŒã§ãããã¯ãã§ãŒã³ ããŒã¿ããŒã¹ããããŒã¿ãèšé²ããã³åä¿¡ããŸãã
- èªèšŒå±ã䜿çšã㊠API ã¢ã¯ã»ã¹ãèš±å¯ããæ€èšŒããŸãã
Hyperledger Fabric ã®è©³çŽ°ã«ã€ããŠå°ãç解ã§ããã®ã§ãæåŸã«åœ¹ç«ã€ããšããã£ãŠã¿ãŸãããã
ãããã¯ãã§ãŒã³ã®å°å ¥
åé¡ã®å®åŒå
ã¿ã¹ã¯ã¯ãã¢ã«ãŠã³ãã®äœæãæ®é«ã®ååŸãã¢ã«ãŠã³ãã®è£å ãããã¢ã«ãŠã³ãããå¥ã®ã¢ã«ãŠã³ããžã®ã³ã€ã³ã®ééãªã©ã®æ©èœãåãã Citcoin ãããã¯ãŒã¯ãå®è£ ããããšã§ãã ãªããžã§ã¯ã ã¢ãã«ãæããŠã¿ãŸãããããããããã«ã¹ããŒã ã³ã³ãã©ã¯ãã«å®è£ ããŸãã ãããã£ãŠãååã§èå¥ãããæ®é«ãšå£åº§ã®ãªã¹ããå«ãŸããå£åº§ãååšããŸãã ã¢ã«ãŠã³ããšã¢ã«ãŠã³ãã®ãªã¹ãã¯ãHyperledger Fabric è³ç£ã®èŠ³ç¹ããèšããŸãã ãããã£ãŠããããã«ã¯æŽå²ãšçŸç¶ããããŸãã ãããæ確ã«æããŠã¿ãŸãã
äžã®æ°åã¯ããäžçã®ç¶æ
ãããŒã¿ããŒã¹ã«ä¿åãããŠããçŸåšã®ç¶æ
ã§ãã ãã®äžã«ã¯ããããã¯ãã§ãŒã³ã«ä¿åãããŠããå±¥æŽã瀺ãå³ããããŸãã è³ç£ã®çŸç¶ã¯ååŒã«ãã£ãŠå€åããŸãã è³ç£ã¯å
šäœãšããŠã®ã¿å€æŽãããããããã©ã³ã¶ã¯ã·ã§ã³ã®çµæãšããŠæ°ãããªããžã§ã¯ããäœæãããè³ç£ã®çŸåšã®äŸ¡å€ãå±¥æŽã«æ®ããŸãã
IBMã¯ã©ãŠã
ã§ã¢ã«ãŠã³ããäœæããŸã
ãããã¯ãã§ãŒã³ ãã©ãããã©ãŒã ã䜿çšããŠåºæ¬çãªãããã¯ãã§ãŒã³ ãããã¯ãŒã¯ãäœæãã ãããã¯ãã§ãŒã³ã¹ããŒãã³ã³ãã©ã¯ããäœæããŠå®è¡ãã ãããã¯ãã§ãŒã³ãã©ãããã©ãŒã ããã€ãã³ããçºè¡ãã
以äžã¯ãIBM Blockchain ãã©ãããã©ãŒã ã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã ããã¯ãããã¯ãã§ãŒã³ã®äœææ¹æ³ã«é¢ãã説æã§ã¯ãªããåã«ã¿ã¹ã¯ã®ç¯å²ã説æãããã®ã§ãã ãããã£ãŠãç§ãã¡ã®ç®çã®ããã«ãXNUMX ã€ã®çµç¹ãäœæããŸãã
ãã®äžã«ããŒããäœæããŸã: Orderer CAãOrg1 CAãOrderer Peer:
ãŠãŒã¶ãŒãäœæããŸãã
ãã£ãã«ãäœæããããã« citcoin ãšããååãä»ããŸãã
åºæ¬çã«ãã£ãã«ã¯ãããã¯ãã§ãŒã³ã§ãããããããã㯠XNUMX (Genesis ãããã¯) ããå§ãŸããŸãã
ã¹ããŒãã³ã³ãã©ã¯ããæžã
/*
* 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;
çŽæçã«ã¯ãããã§ãã¹ãŠãæããã«ãªãã¯ãã§ãã
- ã㢠ããã°ã©ã ã Hyperledger Fabric API ã䜿çšããŠåŒã³åºãé¢æ° (AddAccountãGetAccountsãSendFromãGetBalanceãRefillBalance) ãããã€ããããŸãã
- SendFrom é¢æ°ãš RefillBalance é¢æ°ã¯ãã㢠ããã°ã©ã ãåä¿¡ããã€ãã³ããçæããŸãã
- ã€ã³ã¹ã¿ã³ã¹åé¢æ°ã¯ãã¹ããŒã ã³ã³ãã©ã¯ããã€ã³ã¹ã¿ã³ã¹åããããšãã« XNUMX ååŒã³åºãããŸãã å®éããã㯠XNUMX åã ãã§ã¯ãªããã¹ããŒã ã³ã³ãã©ã¯ãã®ããŒãžã§ã³ãå€æŽããããã³ã«åŒã³åºãããŸãã ãããã£ãŠã空ã®é åã§ãªã¹ããåæåããããšã¯æªãèãã§ãã ããã§ãã¹ããŒã ã³ã³ãã©ã¯ãã®ããŒãžã§ã³ãå€æŽãããšãçŸåšã®ãªã¹ãã¯å€±ãããŸãã ã§ã倧äžå€«ããã å匷ããŠããã ãã§ãïŒã
- ã¢ã«ãŠã³ããšã¢ã«ãŠã³ãã®ãªã¹ã㯠JSON ããŒã¿æ§é ã§ãã ããŒã¿æäœã«ã¯JSã䜿çšããŸãã
- getState é¢æ°åŒã³åºãã䜿çšããŠã¢ã»ããã®çŸåšã®å€ãååŸããputState ã䜿çšããŠæŽæ°ã§ããŸãã
- ã¢ã«ãŠã³ããäœæãããšãã«ãAddAccount é¢æ°ãåŒã³åºããããããã¯ãã§ãŒã³å ã®æ倧ã¢ã«ãŠã³ãæ° (maxAccounts = 5) ãæ¯èŒãããŸãã ãããŠããã«ã¯åŽæ ããã (ãæ°ã¥ãã§ãã?)ãã¢ã«ãŠã³ãã®æ°ãç¡éã«å¢å ããããšã«ã€ãªãããŸãã ãã®ãããªééãã¯é¿ããã¹ãã§ãïŒ
次ã«ãã¹ããŒã ã³ã³ãã©ã¯ãããã£ãã«ã«ããŒãããã€ã³ã¹ã¿ã³ã¹åããŸãã
ã¹ããŒã ã³ã³ãã©ã¯ããã€ã³ã¹ããŒã«ãããã©ã³ã¶ã¯ã·ã§ã³ãèŠãŠã¿ãŸãããã
ãã£ã³ãã«ã®è©³çŽ°ãèŠãŠã¿ãŸãããã
ãã®çµæãIBM ã¯ã©ãŠãå
ã®ãããã¯ãã§ãŒã³ ãããã¯ãŒã¯ã®æ¬¡ã®å³ãåŸãããŸãã ãã®å³ã«ã¯ãä»®æ³ãµãŒããŒäžã® Amazon ã¯ã©ãŠãã§å®è¡ãããŠããã㢠ããã°ã©ã ã瀺ãããŠããŸã (詳现ã¯æ¬¡ã®ã»ã¯ã·ã§ã³ã§èª¬æããŸã)ã
Hyperledger Fabric APIåŒã³åºãçšã®GUIã®äœæ
Hyperledger Fabric ã«ã¯ã次ã®ç®çã§äœ¿çšã§ãã API ããããŸãã
- ãã£ã³ãã«ãäœæããŸãã
- ãã¢ããŒãã£ãã«æ¥ç¶ã
- ãã£ãã«å ã§ã®ã¹ããŒã ã³ã³ãã©ã¯ãã®ã€ã³ã¹ããŒã«ãšã€ã³ã¹ã¿ã³ã¹åã
- ãã©ã³ã¶ã¯ã·ã§ã³ã®åŒã³åºãã
- ãããã¯ãã§ãŒã³ã«é¢ããæ å ±ããªã¯ãšã¹ãããŸãã
ã¢ããªã±ãŒã·ã§ã³éçº
ã㢠ããã°ã©ã ã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®åŒã³åºããšæ
å ±ã®ãªã¯ãšã¹ãã®ã¿ã« API ã䜿çšããŸãã IBM ãããã¯ãã§ãŒã³ ãã©ãããã©ãŒã ã䜿çšããŠæ®ãã®æé ããã§ã«å®äºããŠããŸãã æšæºãã¯ãããžãŒ ã¹ã¿ã㯠(Express.js + Vue.js + Node.js) ã䜿çšã㊠GUI ãäœæããŸãã ææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ã®äœæãéå§ããæ¹æ³ã«ã€ããŠã¯ãå¥ã®èšäºãæžãããšãã§ããŸãã ããã«ãç§ãæãæ°ã«å
¥ã£ãäžé£ã®è¬çŸ©ãžã®ãªã³ã¯ãæ®ããŠãããŸãã
- HyperledgerDemo/v1/init - ãããã¯ãã§ãŒã³ãåæåããŸãã
- HyperledgerDemo/v1/accounts/list â ãã¹ãŠã®ã¢ã«ãŠã³ãã®ãªã¹ããååŸããŸãã
- HyperledgerDemo/v1/account?name=Bob&balance=100 â Bob ã¢ã«ãŠã³ããäœæããŸãã
- HyperledgerDemo/v1/info?account=Bob â Bob ã¢ã«ãŠã³ãã«é¢ããæ å ±ãååŸããŸãã
- HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 â ããããã¢ãªã¹ã« XNUMX æã®ã³ã€ã³ã転éããŸãã
- HyperledgerDemo/v1/disconnect - ãããã¯ãã§ãŒã³ãžã®æ¥ç¶ãéããŸãã
ã«å«ãŸããäŸãå«ã API ã®èª¬æ
Amazonã¯ã©ãŠãã§ã®ãã¢ã¢ããªã±ãŒã·ã§ã³
ã¢ããªã±ãŒã·ã§ã³ã Amazon ã«ã¢ããããŒãããçç±ã¯... IBM ã¯ãŸã ç§ã®ã¢ã«ãŠã³ããã¢ããã°ã¬ãŒãã§ãããä»®æ³ãµãŒããŒã®äœæãèš±å¯ããŠãããŸããã ãã¡ã€ã³ã«ãã§ãªãŒãè¿œå ããæ¹æ³:
- ãããã¯ãã§ãŒã³ãåæåããŸãã
- ã¢ã«ãŠã³ããäœæããŸã (ãã ãããããã¯ãã§ãŒã³å ã®ã¹ããŒã ã³ã³ãã©ã¯ãã§æå®ãããã¢ã«ãŠã³ãã®æ倧æ°ã«éããŠãããããçŸåšã¯æ°ããã¢ã«ãŠã³ããäœæã§ããŸãã)ã
- ã¢ã«ãŠã³ãã®ãªã¹ããåãåããŸãã
- ã¢ãªã¹ããããã¢ã¬ãã¯ã¹ã®é㧠citcoin ã³ã€ã³ã転éããŸãã
- ã€ãã³ããåä¿¡ããŸã (ãã ããçŸåšã¯ã€ãã³ãã衚瀺ããæ¹æ³ããªããããããããããããããã«ãã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ã€ãã³ãããµããŒããããŠããªãããšã瀺ãããŠããŸã)ã
- ã¢ã¯ã·ã§ã³ããã°ã«èšé²ããŸãã
ãŸããããã¯ãã§ãŒã³ãåæåããŸãã
次ã«ãã¢ã«ãŠã³ããäœæããŸããæ®é«ã確èªããããã«æéãç¡é§ã«ããªãã§ãã ããã
å©çšå¯èœãªãã¹ãŠã®ã¢ã«ãŠã³ãã®ãªã¹ããååŸããŸãã
éä¿¡è
ãšåä¿¡è
ãéžæããæ®é«ãååŸããŸãã éä¿¡è
ãšåä¿¡è
ãåãå Žåããã®ã¢ã«ãŠã³ãã¯è£å
ãããŸãã
ãã°ã§ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡ãç£èŠããŸãã
å®éãã㢠ããã°ã©ã ã¯ããã§ãã¹ãŠã§ãã 以äžã«ãããã¯ãã§ãŒã³å
ã®ãã©ã³ã¶ã¯ã·ã§ã³ã瀺ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã®äžè¬çãªãªã¹ãã¯æ¬¡ã®ãšããã§ãã
ããã«ãããCitcoin ãããã¯ãŒã¯ãäœæããããã® PoC ã®å®è£
ãæ£åžžã«å®äºããŸããã Citcoin ãæ¬æ Œçãªã³ã€ã³è»¢éãããã¯ãŒã¯ã«ãªãããã«ã¯ä»ã«äœãããå¿
èŠãããã§ãããã? ãããããïŒ
- ã¢ã«ãŠã³ãäœæ段éã§ãç§å¯éµ/å ¬ééµã®çæãå®è£ ããŸãã ç§å¯ããŒã¯ã¢ã«ãŠã³ã ãŠãŒã¶ãŒãšãšãã«ä¿åããå¿ èŠããããå ¬éããŒã¯ãããã¯ãã§ãŒã³ã«ä¿åããå¿ èŠããããŸãã
- ãŠãŒã¶ãŒãèå¥ããããã«ååã§ã¯ãªãå ¬éããŒã䜿çšããŠã³ã€ã³è»¢éãè¡ããŸãã
- ãŠãŒã¶ãŒãããµãŒããŒã«éä¿¡ããããã©ã³ã¶ã¯ã·ã§ã³ãç§å¯ããŒã䜿çšããŠæå·åããŸãã
ãŸãšã
ç§ãã¡ã¯æ¬¡ã®æ©èœãåãã Citcoin ãããã¯ãŒã¯ãå®è£ ããŸãã: ã¢ã«ãŠã³ãã®è¿œå ãæ®é«ã®ååŸãã¢ã«ãŠã³ãã®è£å ãããã¢ã«ãŠã³ãããå¥ã®ã¢ã«ãŠã³ããžã®ã³ã€ã³ã®ééã ã§ã¯ãPoC ã®æ§ç¯ã«ã¯ã©ããããã®è²»çšãããããŸããã?
- ãããã¯ãã§ãŒã³å šè¬ãç¹ã« Hyperledger Fabric ã«ã€ããŠåŠç¿ããå¿ èŠããããŸãã
- IBM ãŸã㯠Amazon ã¯ã©ãŠãã®äœ¿ãæ¹ãåŠã³ãŸãã
- JS ããã°ã©ãã³ã°èšèªãš Web ãã¬ãŒã ã¯ãŒã¯ãåŠã³ãŸãã
- äžéšã®ããŒã¿ããããã¯ãã§ãŒã³ã§ã¯ãªãå¥ã®ããŒã¿ããŒã¹ã«ä¿åããå¿ èŠãããå Žåã¯ãPostgreSQL ãªã©ãšã®çµ±åæ¹æ³ãåŠç¿ããŠãã ããã
- ãããŠæåŸã«éèŠãªããšã§ãããLinux ã®ç¥èããªããã°çŸä»£ã®äžçã§ã¯çããŠãããŸãã!)
ãã¡ããããã±ããç§åŠã§ã¯ãããŸããããäžçæžåœåãå¿ èŠããããŸãã
GitHub ã§ã®æŽæ°
ãœãŒã¹ãèŒãã
ã«ã¿ã㰠« » â Node.js ãµãŒããŒ
ã«ã¿ã㰠«ã¯ã©ã€ã¢ã³ã» â Node.js ã¯ã©ã€ã¢ã³ã
ã«ã¿ã㰠«ãããã¯ãã§ãŒã³(ãã©ã¡ãŒã¿å€ãšããŒã¯ããã¡ããæ©èœãããäŸãšããŠã®ã¿æäŸãããŠããŸã):
- ã³ã³ãã©ã¯ã â ã¹ããŒãã³ã³ãã©ã¯ãã®ãœãŒã¹ã³ãŒã
- ãŠã©ã¬ãã â Hyperledger Fabric API ã䜿çšããããã®ãŠãŒã¶ãŒ ããŒã
- *.cds - ã¹ããŒã ã³ã³ãã©ã¯ãã®ã³ã³ãã€ã«ãããããŒãžã§ã³
- *.json ãã¡ã€ã« - Hyperledger Fabric API ã䜿çšããããã®æ§æãã¡ã€ã«ã®äŸ
ããã¯ã»ãã®å§ãŸãã«éããŸããïŒ
åºæïŒ habr.com