Hyperledger Fabric ã¨æ¯ãã part.6
Commercial Paper Tutorial (ã¤ã¥ã)
ååã«ç¶ãã Commercial Paper ãã¥ã¼ããªã¢ã«ãããã«ããã Developing Applications ããã¥ã¡ã³ããèªã使¥ãç¶ããã
hyperledger-fabric.readthedocs.io
hyperledger-fabric.readthedocs.io
ã¢ããªã±ã¼ã·ã§ã³
hyperledger-fabric.readthedocs.io
åå ChainCode å´ãå®è£ ããã®ã§ä»å㯠Client å´ã¨ãªãã
該å½ãã£ã¬ã¯ããªã¯ commercial-paper/organization/magnetocorp/application ããã㯠commercial-paper/organization/digibank/application ã¨ãªãã diff -r ããã°ãããããããã2ã¤ã¯æ®ã©åãã ãã©è²ã
éãã
æ¢ã«ã¯ã©ã¤ã¢ã³ãã¢ããªã®æ¸ãæ¹ã¯ Writing Your First Application ãã¥ã¼ããªã¢ã«ã§çè§£ãã¦ããããããã§ã¯ãã®åºæ¬ããã¼ã¨ãã¦ä»¥ä¸ã®ããã«å®ç¾©ããã¦ãã
- Wallet ãã Identity ã鏿
- Gateway ã«æ¥ç¶
- ç®çã®ãããã¯ã¼ã¯ã«ã¢ã¯ã»ã¹
- ChainCode ã«å¯¾ãããã©ã³ã¶ã¯ã·ã§ã³ãªã¯ã¨ã¹ãã使
- ãããã¯ã¼ã¯ã«ãªã¯ã¨ã¹ããéä¿¡
- ã¬ã¹ãã³ã¹ãå¦çãã
ã¨ããã§ã解説ã§ã¯ papernetConnection.yaml ã®ä¸èº«ã説æãã¦ãããã¹ã¯ãªããã¯å®éã«ã¯ Basic Network ã¨åçã®æ§æã® networkConnection.yaml ã使ç¨ãã¦ãããããã papernetConnection.yaml ã¯ä½ãªã®ã£ã¦è©±ã ããã©ãã«ã使ããã¦ãªãã£ã½ãã説æä¸ã papernetConnection.yaml ã«ããè¨å®å
容ã¯ãããã¯ã¼ã¯æ§æçããªããã¦ãä½å¦ã«ãåæ ããã¦ãªããããããã解説ä¸ã® connectionProfile.yaml ã¨ãããã¡ã¤ã«ãåå¨ããªãã
API
hyperledger-fabric.readthedocs.io
ãªã«ãæ¸ããã¦ããªããä½ãªãã ã
ã¢ããªãã¶ã¤ã³è¦ç´ (ï¼)
hyperledger-fabric.readthedocs.io
ããã«ãã¦æ´ã«ãã¼ã¸æ°ãå¢ããããæ£ç´å2ãã¼ã¸ããããããããããªã®ã§ããªãæµãèªã¿ã§ããã
ãªããããã¸ãã«æ¸ããã¦ããäºã¯ãµã³ãã«ãªãã¸ããªã«ã¯ä¸åå«ã¾ãã¦ããªãã
Commercial Paper Tutorial
ã¨ãããã¨ã§ Developing Applications ã¯èªã¿çµããã®ã§ãµã¯ã£ã¨ãã£ã¡ããã
Create network
ãã£ã±ã basic-network (1 org, 1 peer, 1 orderer) ãã¤ãã£ã¦ããå社ãã¨ã« org ä½ã£ã¦ããã«è¦ããããã¥ã¡ã³ãã ã£ãã®ã«éå¸¸ã«æ®å¿µã§ããã
Working as MagnetoCorp
éä¸ã§ ./monitordocker.sh ãå®è¡ãã¦ããããgliderlabs/logspout ã¨ããã³ã³ãããèµ·åãã¦ããã ãã®æ¨¡æ§ã logspout ã£ã¦ä½ã ãã¨æã£ãããè¤æ°ã® docker log ãã¾ã¨ãã¦ããããã®ããããè¶
便å©ã
ãã以é
ãã¨ã¯ããã¾ã§èªãã å 容éããªãããã§ãã£ãã
仿¥ã¯ããã¾ã§
ãã£ããã°ãã°ãã§ãã£ããããã¦åºæ¬çãªã¨ããã¯ããã§ããåé¡ãªããããªã®ã§ã次åã¯ã¨ããããä½ãä½ã£ã¦ã¿ããã¨æãã
Hyperledger Fabric ã¨æ¯ãã part.5
ãã£ããæ¥ã空ãã¦ãã¾ã£ããããã®éã« Blockchain Engineer Night 2019 #2 ã«åå ãããªã©ãã¦ãã
IBM ã®äººãã話ãã¦ãã¤ãã³ããªã ããã£ã¦ããªããªãå®ããã話ãèãããåå è ã®å¹³åå¹´é½¢ãå¦ã«é«ãã®ãæ°ã«ãªã£ããã ãã©ãFabric èå³ããã²ã¨ã£ã¦ãªããµã³ã°ã£ããªã? è¥ã人ãã¯ãã£ã± Ethereum ã¨ããªã®ããª?
Commercial Paper Tutorial
äºå®éã Commercial Paper ãã¥ã¼ããªã¢ã«ãããã
hyperledger-fabric.readthedocs.io
ãããã®ãã¥ã¼ããªã¢ã«ã¯ããå®è·µçãªãã®ã¨ãªã£ã¦ããããã¸ãã¹ä¸ã®èª²é¡ã解決ãã¦ããç®çããè¦ã¦ãè¦ä»¶ã®åæãè¨è¨ãéçºãæ§ç¯ã¾ã§ã«ãã¼ããã¦ãã¨ãããªãã¨ãã£ã¦äºãªã®ã§ãDeveloping Applications ããã¥ã¡ã³ããã¾ãèªãã§ããé²ããã
hyperledger-fabric.readthedocs.io
ã·ããªãª
hyperledger-fabric.readthedocs.io
ã³ãã¼ã·ã£ã«ãã¼ãã¼(以ä¸CPãçæã»ç¡æ ä¿ã®ç´ææå½¢) ã®çºè¡ã»å£²è²·ã»åéãè¡ããããã¯ã¼ã¯ãæ§ç¯ããã
æ¬æã§ã¯å社ã®èæ¯ã®è¨å®ã¾ã§ä½ãè¾¼ãã§ã¦ãªããªãé¢ç½ãããæ£ç´ããã¾ãæå³ãªãè¨å®ãªã®ã§èªã¿é£ã°ãã¦ãè¯ãã
ã¾ã¨ããã¨ãæ¬ãããã¯ã¼ã¯ã®åå å£ä½ã¯ 6 å£ä½ã§ããããã以ä¸ã®ãããªæãã MagnetoCorp(çºè¡) 㨠RateM(è©ä¾¡) ã¨ãã以å¤(売買)ãã§è¦ãã¦ããã°ããã
- MagnetoCorp
- CP ã®çºè¡ããã
- çºè¡ãã CP ã®åéããã
- RateM
- CP ã®å£²è²·ã観å¯ãã
- CP ã®ä¾¡å¤ãè©ä¾¡ãã
- DigiBank
- CP ã®å£²è²·ããã
- è³¼å ¥ãã CP ã®åéããã
- BigFund
- (åä¸)
- BrokerHouse
- (åä¸)
- HedgeMatic
- (åä¸)
åæ
hyperledger-fabric.readthedocs.io
CP ã ç¶æ ã¨ãã¦ãããªæãã§å®ç¾©ãã¦ãã
- CommercialPaper
- Issuer (çºè¡è )
- Paper (CPçªå·)
- Issuer + Paper ã§ pkey ã¨ãªãããã
- Owner (ææè
)
- CurrentState != Trading ã®ã¨ã㯠Owner == Issuer ã¨ãªã
- IssueDate (çºè¡æ¥)
- Maturity (å鿥)
- FaceValue (é¡é¢)
- è³¼å ¥é¡ã§ã¯ãªããåéæã«è¿å´ãããéé¡
- CurrentState (ç¾å¨ã®ã¹ãã¼ã¿ã¹)
- Issued (çºè¡æ¸) | Trading (åå¼ä¸) | Redeemed (å鿏)
ã¾ãããçºè¡ããè³¼å ¥ããåéãã®åå¼ã ãã©ã³ã¶ã¯ã·ã§ã³ ã¨ãã¦ä»¥ä¸ã®ããã«å®ç¾©ãã¦ããã
Issue (çºè¡)
- Issuer (çºè¡è )
- Paper (CPçªå·)
- IssueTime (çºè¡æ¥æ)
- MaturityDate (å鿥)
- FaceValue (é¡é¢)
Buy (è³¼å ¥)
- Issuer (çºè¡è )
- Paper (CPçªå·)
- CurrentOwner (å ã®ææè = 売ã人)
- NewOwner (æ°ããææè = è²·ã人)
- PurchaseTime (è³¼å ¥æ¥æ)
- Price (è³¼å ¥é¡)
Redeem (åé)
- Issuer (çºè¡è = åéãã人)
- Paper (CPçªå·)
- CurrentOwner (å ã®ææè = åéããã人)
- RedeemTime (å鿥æ)
CP ã¯å鿏ãªãæ¶ãã¡ããã°ããããããªãã®ï¼ã¨æã£ãããåéããã CP ã®è¨é²ã¯ä¿åããªãã¨ãã¡ã£ã¦äºãããã
ã¾ããCP ã«åéé¡ã ããã£ã¦è³¼å ¥é¡ããªãã®ã¯ãããããããï¼ã¨ãæã£ããããè³¼å ¥é¡ã㯠CP ã¨ãã ç¶æ ã«ç´ä»ãç©ã§ã¯ãªãããè³¼å ¥ãã¨ãã ãã©ã³ã¶ã¯ã·ã§ã³ã«ç´ä»ããã®ã ã¨ããçè§£ãããã
ããã«ããªãã§ Buy ã Redeem ã§ Issuer ã CurrentOwner ãæå®ããå¿ è¦ãããã®ãè¬ã«æã£ãããIssuer 㯠Paper ã¨ã»ããã§ pkey ã«ãªãã®ã§ãã®ããã CurrentOwner 㯠CP ã® Owner ã¨ç §åãã¦åè´ããªããã°ã¨ã©ã¼ã¨ããããã ãã«ä½¿ããã¦ããã
ããã»ã¹ã¨ãã¼ã¿ã®è¨è¨
hyperledger-fabric.readthedocs.io
ä¸ã§å¤ªåã«ãã¦ããããã«ã ç¶æ 㨠ãã©ã³ã¶ã¯ã·ã§ã³ ã¯éè¦ãªæ¦å¿µãããã
説æèªãã°ãªãã¨ãªãããããã ãã©ããã¾ãã¾ã¨ãã«ãããåºæ¬çã«å°å¸³ã«ä¿åãããã®ã¯ãªã«ãããã® ç¶æ ã§ãããã ãã©ã³ã¶ã¯ã·ã§ã³ ã«å¿ãã¦å¤åã»é·ç§»ãã¦ãããã¨ããã¢ãã«ããã®æè¡ã«åãããã¼ã¿å½¢å¼ããã®æç¶ãã¨ãããã¨ãªã®ã ãããã
ãããã¯ã¤ãã¥ã¼ã¿ãã«ãª ãã©ã³ã¶ã¯ã·ã§ã³ ã®ç©ã¿éãããã¥ã¼ã¿ãã«ãª ç¶æ ãä½ããã¨æãããã¨ãã§ããããªæ°ãããã
ã¹ãã¼ãã³ã³ãã©ã¯ãå¦ç
hyperledger-fabric.readthedocs.io
ã¹ãã¼ãã³ã³ãã©ã¯ããã¤ã¾ã ChainCode ã®ã³ã¼ãèªã¿ã¨ãªãã
該å½ãã£ã¬ã¯ããªã¯ commercial-paper/organization/magnetocorp/contract ããã㯠commercial-paper/organization/digibank/contract ã¨ãªãã diff -r ããã°ãããããããã2ã¤ã¯å
¨ãåãã
lib/papercontract.js ã® CommercialPaperContract ãè¦ãã¨ãissueãbuyãredeem ãå®ç¾©ããã¦ãããããããä¸è¿°ãã ãã©ã³ã¶ã¯ã·ã§ã³ 3種ã«ç¸å½ããã
ã¾ãã createContext ããªã¼ãã¼ã©ã¤ãããã¦ãã¦ããã®ãªãã§ Context ãç¶æ¿ãã CommercialPaperContext ãçæããããã«ããã¦ããã
CommercialPaperContext 㯠PaperList ããã£ã¼ã«ãã«æã¡ããã® PaperList 㯠StateDB ã«å¯¾ãã CommercialPaper ã® add update ããã³ get ãæä¾ããã
CommercialPaper 㯠Key 㨠CurrentState ãã㤠State ã®åã¨ãã¦å®ç¾©ãããissuer paperNumber issueDateTime maturityDateTime faceValue owner ãæã¤ã(State.Key 㯠[issuer, paperNumer] ã§å®ç¾©ããã) ã¤ã¾ããããä¸è¿°ãã ç¶æ
ã®ããã«ç¸å½ããã
ä»åã¯ããã¾ã§
ã¾ãä¸éå端ãªã¨ããã§æ¢ã¾ã£ã¡ãã£ããã©ãGW ã¯ã¬ãããªéã¶æ°ãªã®ã§ãã¾ãæ´æ°ééãããªãã»ããããããªã£ã¦æã£ãã®ã§ããã§ä¸æã
次åã¯ãã®ç¶ãã
Hyperledger Fabric ã¨æ¯ãã part.4
Writing Your First Application (ã¤ã¥ã)
ååã«ç¶ããWriting Your First Application ãã¥ã¼ããªã¢ã«ããããã¦ãã
hyperledger-fabric.readthedocs.io
node query.js
åã åããããããã©ãã© query ã¨ã invoke ã¨ãæ®éã«è¨ã£ã¦ãããåºæ¬çã« query ã¯åç §ãªã©ã® read only ãªã¢ã¯ã»ã¹ãinvoke ã¯è¿½å ã»æ´æ°ãªã©ã® write ãä¼´ãã¢ã¯ã»ã¹ã«ä½¿ãã
(å®éã®ã¨ãã invoke ã§ read only ãªäºã¨ããåºæ¥ããããã®ã§ä¸æ£ç¢ºã ã£ãããããã©ãã¾ããã¦ããã)
../../basic-network/connection.jsonãccpã¨ãã¦èªã¿è¾¼ã¿- ååã¨åã
- 以ä¸ã
mychannelã¸ã®ã¢ã¯ã»ã¹ãããããã«ä½¿ç¨ãã¦ãã
new FileSystemWallet()ã¨ãã¦./walletã使ç¨- ååã¨åã
- ããã¾ã§ã®æä½ã«ããã
./walletã«ã¯adminã¨user1ã® Identity ãåå¨ãã¦ãã
gateway.connect(ccp, {wallet, identity: 'user1' ...})ã§user1ã¨ãã¦ã²ã¼ãã¦ã§ã¤ã«æ¥ç¶adminã§ãªãuser1ã¨ãã¦æ¥ç¶ããç¹ä»¥å¤ã¯ååã¨åã- ããã§ãåãã¼ãã«å¯¾ã
walletã使ç¨ãã¦æ¥ç¶ããclientã®[email protected]ã¨ãã¦æ¯èãã
network = await gateway.getNetwork('mychannel')ã§mychannelã¸ã®ã¢ã¯ã»ã¹ãç²å¾contract = network.getContract('fabcar')ã§ ChainCodefabcarã¸ã®ã¢ã¯ã»ã¹ãç²å¾result = await contract.evaluateTransaction('queryAllCars')ã§ ChainCode ã®queryAllCars()ãã³ã¼ã«- Hyperledger Fabric SDK for node.js Class: Contract
- 弿°ã渡ãããã¨ãã¯ç¬¬äºå¼æ°ä»¥éã«æ¸¡ã
- çµæã¯ result ã« JSON ã¨ãã¦è¿ã
- ç¾å¨ä¿åããã¦ããå ¨ã¦ã® car æ å ±ãè¿ã£ã¦ãã¦ãã
ã§ãèå¿ã® ChainCode å´ãè¦ã¦ãããChainCode å´ã®ããã¥ã¡ã³ãã¯ãã¡ãã
lib/fabcar.js ãæ¬ä½ã (index.js ããããã©ãmodule ã® export ãããã¦ãªã)
class FabCar extends Contract ã®ããã« fabric-contract-api.Contract ãç¶æ¿ãã¦ããã¯ã©ã¹ã®ã¡ã½ããããã®ã¾ã¾ SDK å´ããå¼ã¹ãããã«ãªã£ã¦ããã
ã¡ã½ãã㯠Context ã¯ã©ã¹ã第ä¸å¼æ°ã«å¿
ãåãã以éã®å¼æ°(çç¥å¯è½) ãåãã°ãã¯ã©ã¤ã¢ã³ãSDKå´ãããã¼ã¿ãåãã¨ããã¨ãã§ããã
詳ããã¯ãã¡ããåç §ã
ãªããContext ã® class API ã«ã¯ã¯ã©ã¹å¤æ°ã®èª¬æããªããä¸è¨ããã¥ã¡ã³ãã®ãStructure of the Transaction Contextããèªãã°ãããéããctx.stub ã§ ChainCodeStub ãªãã¸ã§ã¯ãã ctx.identity ã§ ClientIdentity ãªãã¸ã§ã¯ããããããåå¾ã§ããã
-
ClientIdentity- Hyperledger Fabric Node.js Contract and Shim Class: ClientIdentity
- ååã®éããªã¯ã¨ã¹ãå
ã¯ã©ã¤ã¢ã³ãã® Identity æ
å ±ãä»åã®å ´å
./wallet/user1/user1ã«å«ã¾ãã¦ããè¨¼ææ¸ã®å 容 getAttributeValue()ã¯åè¨¼ææ¸ã«ããã1.2.3.4.5.6.7.8.1ã®å¤ã®attrsã«ãã£ã Object ã«å¯¾ãã getter- ãã¨ãã°ã
getAttributevalue("hf.Affiliation")ã®çµæã¯"org1.department1"ã«ãªã
- ãã¨ãã°ã
-
ChainCodeStub- Hyperledger Fabric Node.js Contract and Shim Class: ChaincodeStub
- å°å¸³ã¸ã® getter/setter ãããªã¯ã¨ã¹ãã«é¢ããæ å ±ãªã©ãå«ã¾ãã
ãã£ã¦ããã¨ã¯åç´ã«ããã ãã
FabCar.queryAllCars(ctx)ctx.stub.getStateByRange(...)ã§è»ãã¼ã¿ãå ¨ä»¶åå¾ãã- ãã¼ã¿ã¯
Bufferãªã®ã§ãtoString()ãããJSON.parse()ãããã㦠JSON ã«å¤æ - æååã«æ»ãã¦
return
ãªããåå¾ãããã¼ã¿ã¯ startFabric.sh ã§ invoke ãã¦ãããinitLedger() ã§æ ¼ç´ãã¦ããã
ãã£ãããªã®ã§å
容ãè¦ã¦ã¿ããã©ãqueryAllCars 以ä¸ã«ãã£ã¦ãäºã¯åç´ã
FabCar.initLedger(ctx)- åæãã¼ã¿ãå®ç¾©
ctx.stub.putState(...)ã§ 1 ã¤ãã¤ä¿åãã¦ãã
node invoke.js
query.js 㨠diff ãåãã¨ãããããéãã¯æå¾ã® contract.evaluateTransaction('queryAllCars') ã contract.submitTransaction('createCar', ...) ã«ãªã£ã¦ããäºã¨ãæç¤ºçã« gateway.disconnect() ãã¦ããã¨ããã®ã¿ã
evaluateTransaction -> submitTransaction- Hyperledger Fabric SDK for node.js Class: Contract
- ååã®éãã§ã
queryã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®è©ä¾¡ãããã¦ããã ãã§ãinvokeã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®éä¿¡ãããã¦ãã
FabCar.createCar()- 弿°ã§æå®ãããå
容㧠Car ãªãã¸ã§ã¯ããä½ã£ã¦ãããã
ctx.stub.putState()ã§ä¿åãã¦ãã ã
- 弿°ã§æå®ãããå
容㧠Car ãªãã¸ã§ã¯ããä½ã£ã¦ãããã
gateway.disconnect()ã®å®è¡- ã³ã¡ã³ãã¢ã¦ããã¦å®è¡ãã¦ã¿ãã¨ããããã©ãããããããªãã¨
invoke.jsã¯æ°¸ä¹ ã«çµãããªãã - ä¸å¯è§£ã ãã
queryã«ãã®è¡ãè¶³ãã¦ãåé¡ã¯èµ·ããªãããæ¥µãã¦ä¸è¬çãªæè¦ã¨ãã¦connectãããå¿ ãdisconnectããã¹ãã¨æãã®ã§ãããããããã ã¨æã£ã¦ãã
- ã³ã¡ã³ãã¢ã¦ããã¦å®è¡ãã¦ã¿ãã¨ããããã©ãããããããªãã¨
ããã¾ã
話é·ããªããã¨æã£ããã©ããããçãã£ãã
次å㯠Commercial paper tutorial ãããäºå®ã
Hyperledger Fabric ã¨æ¯ãã part.3
Writing Your First Application
äºåéããWriting Your First Application ãã¥ã¼ããªã¢ã«ã«é²ãã
hyperledger-fabric.readthedocs.io
startFabric.sh xxx
åãã¼ããæ§ç¯ã㦠chaincode ã®ã¤ã³ã¹ãã¼ã«ã»ã¤ã³ã¹ã¿ã³ã¹åã¾ã§å®æ½ã
xxx ã« javascript|typescript|go ãæå®ãããã¨ã§ chaincode ã®å®è£ è¨èªãé¸ã¹ããããã©ã«ã㯠Go ã ããã¥ã¼ããªã¢ã«çã«ã¯ JavaScript ã§èª¬æãã¦ããã ååã¾ã§ã® BYFN ã§ã¯ Go ãã¤ãã£ã¦ããããã£ããã ããä»åã¯ãã¥ã¼ããªã¢ã«éãã« JavaScript ã§ãã£ã¦ã¿ãã好ã¿ã§ã¯ãªããã ãã©ãã
ãªããããããã® chaincode ã®ã½ã¼ã¹ã³ã¼ã㯠../chaincode/fabcar ã«ç½®ãã¦ããã
javascript-low-level ã¨ãããã£ã¬ã¯ããªããããããã㯠v1.4 以åã®ããã°ã©ã ã¢ãã«ã«ããå®è£
ã詳細ã¯ä»¥ä¸ãåç
§ã
hyperledger-fabric.readthedocs.io
- (TypeScriptã®ã¿) JavaScript ã¸ã®ãã©ã³ã¹ãã¤ã«
- Go ã®ã³ã³ãã¤ã«ã¯ chaincode ã®ã¤ã³ã¹ãã¼ã«æã«è¡ããã¦ãããã«è¦ãã¦ããããTypeScript ã®ãã©ã³ã¹ãã¤ã«ã¯ãã®æç¹ã§è¡ã
- ã¤ã¾ããå®è£ è¨èªã¯ TypeScript ã ã¨ãã¦ããå®éã« chaincode ã¨ãã¦ã¤ã³ã¹ãã¼ã«ãããã®ã¯(ãã©ã³ã¹ãã¤ã«ããã) JavaScript ã¨ãããã¨ã«ãªãã
docker-composeã§å¿ è¦ãªãã¼ããèµ·åãã- è¨å®ãã¡ã¤ã«ã¯
../basic-network/docker-compose.yml - ååã¾ã§ã¯
crypto-configãçæãã¦ããããä»åã¯æåããåºæ¥ã¦ã../basic-network/generate.shã§ä½ããã¨ãã§ããã£ã½ããããªããå¾®å¦ã«éããã®ãã§ãã- generate æã®è¨å®ãã¡ã¤ã«
../basic-network/crypto-configl.yamlã¯ordererããã³org1ã®è¨å®ã®ã¿ããã
- generate æã®è¨å®ãã¡ã¤ã«
- ä»å使ããã®ã¯ä»¥ä¸ããªãå
¨ã¦ã®ãã¼ãã¯
basicãããã¯ã¼ã¯ã«å«ã¾ãããca.example.com- CA ãµã¼ããä»åååºã
ca.org1ã®è¨¼ææ¸ã¨éµããã¤
orderer.example.com- Orderer
ordererã®è¨¼ææ¸ã¨éµããã¤peer0.org1ã®è¨¼ææ¸ã¨éµããã¤
peer0.org1.example.com- peer. ä»å㯠1 Organization, 1 Peer æ§æã¨ãããã¨ã«ãªã
peer0.org1ã®è¨¼ææ¸ã¨éµããã¤org1ã® User1 㨠Admin ã®è¨¼ææ¸ã¨éµããã¤
couchdb- CouchDB. å°å¸³ã®ææ°ç¶æ³ãä¿æããããã®ãã®ãä»åååºã
clipeer0.org1ã«å¯¾ããæä½ãã»ããã¢ããããã¦ãã- å
¨
crypto-configãã¼ã¿ãæã£ã¦ãã
- è¨å®ãã¡ã¤ã«ã¯
mychannelãã£ã³ãã«ã使- è¨å®ã¯
../basic-network/channel.tx - ããã¾ãæ¢ã«ä½ææ¸ã¿ãå
ã¨ãªããã®ã¯
../basic-network/configtx.yaml- ãã£ã³ãã«åå è
ã¯
ordererããã³peer0.org1ã®ã¿ã
- ãã£ã³ãã«åå è
ã¯
- è¨å®ã¯
mychannelã«peer0.org1ã joinmchannel.blockã使æ¸ã¿ã
mychannelã« ChainCodefabcarv1.0 ãã¤ã³ã¹ãã¼ã«- ChainCode ã®ãã¹ã¯ä¸è¿°ã®éã
mychannelã® ChainCodefabcarv1.0 ãã¤ã³ã¹ã¿ã³ã¹åmychannelã® ChainCodefabcarã«å¯¾ãinitLedger()ã invoke- åä½ç¢ºèªãã¦ãåæãã¼ã¿ã®æ¿å ¥ãè¡ã£ã¦ããæ¨¡æ§
- 以ä¸ãèªã¿é²ããã°ãããäºã ããå¼ã°ãã¦ããã®ã¯
../fabcar/javascript/lib/fabcar.js
ã¯ã©ã¤ã¢ã³ãå´ã»ããã¢ãã
ä¸è¨ã§ chaincode ã®ä½¿ç¨æºåã¯æ´ã£ããããã®ã¾ã¾ã§ã¯ peer ã³ãã³ãçµç±ã§å©ãããããã使ãéããªãã ãããã£ã¦ã¯ã©ã¤ã¢ã³ãã¢ããªã®æ§ç¯ãããã
startFabric.sh ã®åºåãè¦ã¦ããããã¨ãããã¯ã©ã¤ã¢ã³ãã¢ããªã®å®è£
è¨èªãé¸ãã§ cd ãããã«ãã³ãã³ããå©ãã ãã
ã¯ã©ã¤ã¢ã³ãã¢ããªã¯ JavaScript ã TypeScript ãé¸ã¹ãã¾ã ChainCode åæ§ v1.4 以åã®ããã°ã©ã ã¢ãã«ã«ãã javascript-low-level ãããã
ããã TypeScript ã¯ãã©ã³ã¹ãã¤ã«ã® 1 æéããããã ãã§å¤§ããéãã¯ãªãã£ã½ãã®ã§ãç´ ç´ã«ãã¥ã¼ããªã¢ã«ã®æç¤ºéã JavaScript ã鏿ããã
node enrollAdmin.js
ã¯ã©ã¤ã¢ã³ãç¨ã® Admin ã¦ã¼ã¶ãç»é²ããã£ããèªãã§ããã
ãªããClientå´ (ä»¥ä¸ SDK) API ããã¥ã¡ã³ãã¯ã³ã¬ã
../../basic-network/connection.jsonãccpã¨ãã¦èªã¿è¾¼ã¿- å½è©²ãã¡ã¤ã«ã¯ä»åã®ã·ã¹ãã ã®æ§ææ å ±ãè¨è¿°ãã¦ããã
- 以ä¸ãCA ã® URL ãå¾ãããã«ä½¿ç¨ãã¦ãã
new FabricCAServices()ã§ CA ã«æ¥ç¶wallet = new FileSystemWallet()ã¨ãã¦./walletã使ç¨- ç¾æç¹ã§ã¯
./walletã¯ç©ºãã£ã¬ã¯ã㪠- Hyperledger Fabric SDK for node.js Class: FileSystemWallet
- ç¾æç¹ã§ã¯
identity = await ca.enroll({ enrollmentID: 'admin' ... })ã㦠CA ã«adminãç»é²ã- Hyperledger Fabric SDK for node.js Class: FabricCAServices
- ã¬ã¹ãã³ã¹ã«ã¯
adminã®è¨¼ææ¸ã¨ç§å¯éµãã«ã¼ãè¨¼ææ¸ãå«ã¾ãã
X509WalletMixin.createIdentity(identity...)ã§ãä¸ã§åå¾ããéµã¨è¨¼ææ¸ãMSPID (=Org1MSP) ãã Identity ãçæwallet.import('admin', identity)ã§walletã«adminã¨ãã¦identityãç»é²
ããã§ wallet ã« admin ãç»é²ãããã
-
./walletã¯ä»¥ä¸ã®ããã«ãªãã
$ tree wallet
wallet
âââ admin
âââ 81e6bfa(ç¥)691478-priv
âââ 81e6bfa(ç¥)691478-pub
âââ admin
1 directory, 3 files
81e6bfa(ç¥)691478-priv,81e6bfa(ç¥)691478-pubã¯ååã®éãä¸èº«ã¯ããããç§å¯éµã¨å ¬ééµ81e6bfa(ç¥)691478ã¯ã©ã³ãã ãªå¤ã§ãæ¯åéãå¤ã«ãªãã
admin㯠JSON ãã¡ã¤ã«ã§ã以ä¸ã®ãããªãããã
{ "name": "admin", "mspid": "Org1MSP", "roles": null, "affiliation": "", "enrollmentSecret": "", "enrollment": { "signingIdentity": "31b577222c67(ç¥)73516ea3c2483a", "identity": { "certificate": "-----BEGIN CERTIFICATE-----\nMIICAjCCA(ç¥)BAd8GA=\n-----END CERTIFICATE-----\n" } } }
-
certificateé¨åã¯è¨¼ææ¸ãªã®ã§å¹³æã«æ»ãã¦ã¿ãã¨ä»¥ä¸ca.org1.example.comãclientã®adminã«çºè¡ããè¨¼ææ¸ã§ãããã¨ããããã- ãããã¯
ca.enrollæã«çæããããã®ã§ã../../basic-network/crypto-configã«ãã[email protected]çã® cert ã¨ã¯ç°ãªããã®ã
$ Cat wallet/admin/admin \
| jq -r '.enrollment.identity.certificate' \
| openssl x509 -inform PEM -text -noout
Certificate: Data: Version: 3 (0x2) Serial Number: 02:af:ba:bd:ec:(ç¥):c0:6c:27:1c:66 Signature Algorithm: ecdsa-with-SHA256 Issuer: C=US, ST=California, L=San Francisco, O=org1.example.com, CN=ca.org1.example.com Validity Not Before: Apr 17 07:34:00 2019 GMT Not After : Apr 16 07:39:00 2020 GMT Subject: OU=client, CN=admin Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:1d:36:c3:b7:64:20:03:7f:82:39:f8:58:2d:37: (ç¥) 5d:3a:c9:72:0b ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Key Usage: critical Digital Signature X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: 67:49:65:58:49:(ç¥):86:CA:A9:96:F7:91 X509v3 Authority Key Identifier: keyid:42:39:AA:(ç¥):6A:57:36:5E:49:7C Signature Algorithm: ecdsa-with-SHA256 30:44:02:20:7c:7c:58:29:d9:5e:db:6a:91:af:1b:3b:19:8d: (ç¥) 16:60:52:00:0c:91:58:3a:f0:75:88:ae:3d:15:1f:df
node registerUser.js
../../basic-network/connection.jsonãccpã¨ãã¦èªã¿è¾¼ã¿- å½è©²ãã¡ã¤ã«ã¯ä»åã®ã·ã¹ãã ã®æ§ææ å ±ãè¨è¿°ãã¦ããã
- 以ä¸ãCA ã® URL ãå¾ãããã«ä½¿ç¨ãã¦ãã
new FileSystemWallet()ã¨ãã¦./walletã使ç¨- ç¾æç¹ã§ã¯ã
./walletã«ã¯./wallet/adminã ããåå¨ãã¦ãã - Hyperledger Fabric SDK for node.js Class: FileSystemWallet wallet ã使ç¨ãããã¨ã§ client ã® admin ã¨ãã¦æ¯èãã
- ç¾æç¹ã§ã¯ã
gateway.connect(ccp, {wallet, identity: 'admin' ...})ã§ã²ã¼ãã¦ã§ã¤ã«æ¥ç¶- Hyperledger Fabric SDK for node.js Class: Gateway
- ããã§ãåãã¼ãã«å¯¾ã
walletã使ç¨ãã¦æ¥ç¶ããclientã®adminã¨ãã¦æ¯èãã
secret = await ca.register(...)ã§ã¦ã¼ã¶ã使- Hyperledger Fabric SDK for node.js Class: FabricCAServices
- CA ã«å¯¾ã
adminã®æ¨©éã§å®è¡ clientãã¼ã«ããã¤[email protected]ã¦ã¼ã¶ã使ããsecretã¯user1ã®ãã¹ã¯ã¼ã(èªåçæ)- ã¾ã ä½ã£ãã ãã§ç»é²ã¯æ¸ãã§ããªããæ¬¡ã®
enroll()ã§ã¯ããã¦ç»é²ãããã
await ca.enroll(),X509WalletMixin.createIdentity(),wallet.import()ã§walletã«user1ãä¿åadminã®æã¨å ¨ãåãã
ããã§ wallet ã« user1 ãç»é²ãããã
-
./walletã¯ä»¥ä¸ã®ããã«ãªãã
$ tree wallet
wallet
âââ admin
â  âââ 81bab1e(ç¥)724a0e-priv
â  âââ 81e6bfa(ç¥)691478-priv
â  âââ 81e6bfa(ç¥)691478-pub
â  âââ admin
âââ user1
âââ 81bab1e(ç¥)724a0e-priv
âââ 81bab1e(ç¥)724a0e-pub
âââ user1
2 directories, 7 files
user1ãã£ã¬ã¯ããªãã§ããéµãã¢ã¨è¨¼ææ¸ãæ°ãã«è¿½å ãããadminã®ä¸ã«æ°ããç§å¯éµãå¢ããuser1ã®ããã¨åãã¨ããã®ãè¬- ãã¨ã§ããã¹ã
- å
ã»ã©åæ§
user1ã®certificateé¨åãå¹³æã«æ»ãã¦ã¿ãã¨ä»¥ä¸ca.org1.example.comãclientã®adminã«çºè¡ããè¨¼ææ¸ã§ãããã¨ããããã1.2.3.4.5.6.7.8.1:ã¨ãã屿§ã追å ããã¦ãããã¦ã¼ã¶ä½ææã«æå®ããaffiliationãroleãªã©ã®è¿½å æ å ±ãåãè¾¼ã¾ãã¦ãã- ããã MSP ã§ä½¿ç¨ãããã®ã ããããã¶ãã
Certificate: Data: Version: 3 (0x2) Serial Number: 28:38:98:15:77:(ç¥):48:ce:39:9c:58 Signature Algorithm: ecdsa-with-SHA256 Issuer: C=US, ST=California, L=San Francisco, O=org1.example.com, CN=ca.org1.example.com Validity Not Before: Apr 17 09:26:00 2019 GMT Not After : Apr 16 09:31:00 2020 GMT Subject: OU=client, OU=org1, OU=department1, CN=user1 Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:52:7b:ef:f4:49:b7:30:07:e6:a1:40:e7:90:70: (ç¥) 6a:9f:ae:ce:5d ASN1 OID: prime256v1 NIST CURVE: P-256 X509v3 extensions: X509v3 Key Usage: critical Digital Signature X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: 5C:B5:E3:84:9F:(ç¥):0B:C6:10:55:AF:38 X509v3 Authority Key Identifier: keyid:42:39:AA:(ç¥):6A:57:36:5E:49:7C 1.2.3.4.5.6.7.8.1: {"attrs":{"hf.Affiliation":"org1.department1","hf.EnrollmentID":"user1","hf.Type":"client"}} Signature Algorithm: ecdsa-with-SHA256 30:45:02:21:00:e9:10:09:8b:4b:d8:29:c8:e8:e8:52:b4:2f: (ç¥) 79:02:91:e1:04:32:af:65:b1:6e:42:ea:09:ab:72:33:86
仿¥ã¯ããã§ä¸æ
ãããããã query 㨠invoke ãå©ã㦠SDK å´ã ããããªã ChainCode ã®å å´ã¾ã§å ¥ã£ã¦ããããã¨ããæãªã®ã ãã話ãé·ããªããããªã®ã§ä»åã¯ããã§ä¸æã
次åã¯ãã®ç¶ããèªãã§ãããã
Hyperledger Fabric ã¨æ¯ãã part.2
ã¨ãããã¨ã§ã仿¥ã仿¥ã¨ã¦ãã¥ã¼ããªã¢ã«ãã¾ã ã³ã¼ãæ¸ããªããããã
ååã®è£è¶³
ååãã£ã¦ããã¥ã¼ããªã¢ã«ã¯ãã¡ãã
hyperledger-fabric.readthedocs.io
./byfn.sh down ããªãã§ä»¥ä¸ã®ããã«ã³ã³ããã¨ã¤ã¡ã¼ã¸ãåé¤ããã ãã ã¨æ¬¡ã® ./byfn.sh up ã§ãããã失æããããªã«ããããã®ãã¯ããã¨è¦åãããªãã£ãããã¨ã«ãã ./byfn.sh down ãããã
$ docker rm -f $(docker ps -aq)
$ docker rmi -f $(docker images | grep 'dev-' | awk '{print $3}')
$ git clean -fdx .
Adding an Org to a Channel ãã¥ã¼ããªã¢ã«
hyperledger-fabric.readthedocs.io
ä»åãã eyfn.sh ã使ããbyfn ã Build Your First Network ã®ç¥ã£ã½ããããeyfn 㯠Edit 以ä¸ç¥ã¨ãã£ã¦äºãªã®ããªã ãã¼ãã³ã°ã»ã³ã¹ã»ã»ã»
ã¨ãããã eyfn.sh ã«ã ãµãã³ãã³ã generate, up, down (ãã¨ä¸å¿ restart ã) ãããã
ãã¥ã¼ããªã¢ã«æ¬æã§ã¯ generate ãçç¥ã㦠up ãå¼ã¶æç¤ºããããããã㯠up ã®ãªãã§ generate ã®åºåã®æç¡ããã§ãã¯ãã¦ãå¿
è¦ãããã°é©å®å¼ãã§ããããã(å®ã¯ ./byfn.sh ããããã¸ãã®ä»çµã¿ã¯åãã)
åæç¶æ (ååã®ãããã)
./byfn.sh up ãå®äºããç¶æ
ãä»åã®åæç¶æ
ã¨ãããã¤ã¾ãåå解説ããéãã
- ãã£ã³ãã«å
mychannelããã£ã¦ã - 以ä¸ã®ãã¼ããç»é²ããã¦ãã¦ã
- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
- cli
- ChainCode
myccã® v1.0 ãä»¥ä¸ 3 ã¤ã® peer ã«ã¤ã³ã¹ãã¼ã«ããã¦ãã¦ã- peer0.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
- ChainCode
myccã® v1.0 ãã¤ã³ã¹ã¿ã³ã¹åãããåä½ç¢ºèªã¾ã§åºæ¥ã¦ããç¶æ
ã¨ãããã¨ã«ãªãã
./eyfn.sh generate
cryptogenã§org3-artifacts/org3-crypto.yamlã®è¨å®éãã«è¨¼ææ¸ãçºè¡ãã¦./org3-artifacts/crypto-configãçæcryptogenã¯ä»¥ä¸ãçæãã¦ãåãã¼ããã¦ã¼ã¶ã®è¨å®ã¨ãªããããã£ã¬ã¯ããªããªã¼ãã¤ããé ç½®ãã- org3.example.com ãã¡ã¤ã³ã® CAãå
¨ã¦ã¼ã¶(Admin, User1)ãå
¨ãã¼ã(peer0, peer1) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
- è¨¼ææ¸ã¯ãããã交äºã«é å¸ããã (ã¦ã¼ã¶å士ã¯äº¤æããªã)
- org3.example.com ãã¡ã¤ã³ã® CAãå
¨ã¦ã¼ã¶(Admin, User1)ãå
¨ãã¼ã(peer0, peer1) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
configtxgenã§org3-artifacts/configtx.yamlã®è¨å®éãã« Org3 ã®è¨å®ãçæãã¦./channel-artifacts/org3.jsonãçæ- ååã¨éã£ã¦ Anchor Peer ã®è¨å®ãã¡ã¤ã«ã¨ã㦠.tx ãã¡ã¤ã«ãä½ã£ã¦ãããã§ã¯ãªãã
org3-artifacts/configtx.yamlãã organization ã®æ§æã«ã¤ãã¦æç²ããã¿ãããªãã¡ã¤ã«ãä½ã£ã¦ããã
crypto-config/ordererOrganizationsãorg3-artifacts/crypto-config/ã«ã³ãã¼- ååä½ã£ã Orderer ã¾ããã®è¨¼ææ¸ã¨éµã
cliã«scripts/step1org3.shãå®è¡ãããapt-get install jq- ç¥ã£ã¦ã人ãå¤ãã¨æããã©ã
jq㯠JSON ã®æä½ãããã³ãã³ããè²ã¤ãããæ´å½¢ããããã§ãã¦ä¾¿å©ãªã®ã§ã¿ããªä½¿ãã
- ç¥ã£ã¦ã人ãå¤ãã¨æããã©ã
peer channel fetch config ...- Orderer ãã
mychannelã®è¨å®ãåå¾ãã¦ãã - çµæã
configtxlator proto_decode --type common.Blockãããã¨ã§ JSON å½¢å¼ã«å¤æãjqã§å¿ è¦æ å ±ãæãåºãã¦ãã- å
容ã¯è²ã
ãããããããã
mychannelã®æ§ææ å ±
- å
容ã¯è²ã
ãããããããã
- Orderer ãã
- ä¸ã§æãåºãã channel è¨å®ã«ãä¸è¨ã§ä½æãã
./channel-artifacts/org3.jsonãåã込㿠configtxlator proto_encode,configtxlator compute_updateçãé§ä½¿ãã¦æ´æ°ç¨ã®ãã¼ã¿ã使- ãããã¸ãã®ä»æ§ã«ããããããã¥ã¡ã³ããã¾ãã§è¦å½ããªãã®ã§è©³ç´°ã¯ä¸æ
peer channel signconfigtx ...peer0.org1ã«å¯¾ãã¦ä¸ã§ä½ã£ãæ´æ°ç¨ãã¼ã¿ã¸ã®ç½²åãæåã§ä»å
peer channel update ...peer0.org2ã«å¯¾ãã¦å¤æ´ãéä¿¡- channel ã®ç®¡çè
ã¯
peer0.org*ã® 2 ã¤ã§ããã夿´ããªã·ã¯éåæ°ã®æ¿èªã§åãå ¥ããããããã«è¨å®ããã¦ãããã¤ã¾ã 2 ã¤ä¸¡æ¹ã®æ¿èªãå¿ è¦peer0.org1ã¯å ã»ã©æåã§ç½²åæ¸ã¿peer0.org2ã¯ä»åã®è¦æ±ã§org2ã® Admin ã¨ãã¦éä»ããããããåé¡ãªããã°ç½²åããããã®ã¾ã¾å¤æ´ãåãå ¥ãããã
- ãªãã³ã¬ã
mychannelã®ãããã¯5 ã«ãããã- ããã㯠0 ã¯ã¸ã§ãã·ã¹ããã㯠(ãã£ã³ãã«åæè¨å®)
- ããã㯠1 㯠Org1 ã®ã¢ã³ã«ã¼ãã¢æ´æ°
- ããã㯠2 㯠Org2 ã®ã¢ã³ã«ã¼ãã¢æ´æ°
- ããã㯠3 ã¯
myccã®ã¤ã³ã¹ã¿ã³ã¹å - ããã㯠4 ã¯
myccã¸ã® invoke (byfn.shã§åä½ç¢ºèªãããã¤) - ããã㯠5 ãä»åã®
org3追å
./byfn.sh up
ãã®æç¹ã§ã¯ãmychannel ã« org3 ãå«ã¾ããããã«è¨å®ã§ãã¦ããã
ã ãå®éã« org3 ã® peer 㯠mychannel ã«åå ã¯ãã¦ããªãã(ã¨ãããããorg3 ã® peer èªä½ã¾ã åå¨ãã¦ããªã)
docker-composeã§org3ã®åãã¼ããèµ·åãã- è¨å®ãã¡ã¤ã«ã¯
docker-compose-org3.yaml- å
容çã«ã¯
org1,org2ã¨å¤§å·®ãªã
- å
容çã«ã¯
- èµ·åããã®ã¯ä»¥ä¸ããªããã¹ã¦
byfnãããã¯ã¼ã¯ã«å±ããã- peer0.org3.example.com
- peer1.org3.example.com
- Org3cli
org3å°ç¨ã®ã¯ã©ã¤ã¢ã³ããã¼ãã
- è¨å®ãã¡ã¤ã«ã¯
- ä½ã£ã
Org3cliã«scripts/step2org3.shãå®è¡ãããpeer channel fetch 0 ...- Orderer ãã
mychannelã®ã¸ã§ãã·ã¹ãããã¯ãåå¾ãã¦ãã - ååã¯
peer channel createã®çµæã¨ãã¦çæããã¦ããã®ã§åå¾ã®å¿ è¦ã¯ãªãã£ãããä»åã¯ãããã¦åå¾ãã
- Orderer ãã
peer channel join- Org3 ã® peer ãã¼ã(2ã¤)ããããã«å¯¾ãã¦å®è¡ãã¦ãã
- ä¸ã§åå¾ãã
mychannel.blockãæ¸¡ãã¦ã対象 peer ãã¼ãã mychannel ã«åå ããã
- ä¸ã§åå¾ãã
- Org3 ã® peer ãã¼ã(2ã¤)ããããã«å¯¾ãã¦å®è¡ãã¦ãã
peer chaincode install- Anchor Peer ã§ãã
peer0.org3.example.comã«å¯¾ã宿½- chaincode åã¯
myccã ãã¼ã¸ã§ã³2.0ãå®è£ è¨èªã¯golangãã¨ããããæå®ãã¦ããã - chaincode èªä½ã«ã¯å¤æ´ããªããããã¼ã¸ã§ã³ãååã® 1.0 ã§ãªã 2.0 ã¨ãã¦ããã¨ããã«æ³¨æ
- chaincode åã¯
- Anchor Peer ã§ãã
cliã«scripts/step3org3.shãå®è¡ããã- ããã ã
Org3cliã§ã¯ãªãcliã«å®è¡ããã¦ãã®ã§æ³¨æ peer chaincode install- Anchor Peer ã®ãã¡æ®ã 2 ã¤ã§ãã
peer0.org1.example.compeer0.org2.example.comã«å¯¾ã宿½- chaincode åã¯
myccã ãã¼ã¸ã§ã³2.0ãå®è£ è¨èªã¯golangãã¨ããããæå®ãã¦ããã - org3 ã®ã¨ãåæ§ããã¼ã¸ã§ã³ãä¸ãã£ã¦ããã
- chaincode åã¯
- Anchor Peer ã®ãã¡æ®ã 2 ã¤ã§ãã
peer chaincode upgrdepeer0.org1.example.comãã¼ã 1 ã¤ã®ã¿ã«å¯¾ãã¦å®è¡ããã¦ããpeer chaincode instantiateã¨ã»ã¨ãã©åãã ãããã¼ã¸ã§ã³ã¢ããæã¯ãã¡ãã使ãã£ã½ãã- orderer
orderer.example.comã«å¯¾ãã mychannelã«ããã¦ã- åæåã¡ãã»ã¼ã¸
{"Args":["init","a","90","b","210"]}ãæ¸¡ãã- "a" ã« "90" ãã "b" ã« "210" ãããããã»ãããã¦ããã£ã½ã
- ããªã·ã¼
AND ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')ãæ¸¡ãã¦ã- Org1ãOrg2ãOrg3 ã®æ¿èªã® 3 ã¤ãå¿ è¦ã¨ãããã¨
myccã®ãã¼ã¸ã§ã³2.0ãã¤ã³ã¹ã¿ã³ã¹åãã
- orderer
- ã¤ã³ã¹ã¿ã³ã¹åã®æä½ã¯ channel å ã®å ¨ peer ã«ä¼éããã
- ãã®æç¹ã§
Org3ã¯ä»ã®Org1,Org2ã¨åæ§ã«mychannelã®åå è ã¨ãªã£ã¦ãã
- ããã ã
- å度
Org3cliã«scripts/testorg3.shãå®è¡ããã- åä½ç¢ºèªãç®æ°ãããã¨ã¯ãã¦ããªãã®ã§çç¥ã
ããã§ãDocker ã³ã³ãããä¸è¦§ãã¦ã¿ãã¨
$ docker ps --format "table {{.Names}}\t{{.CreatedAt}}\t{{.Status}}\t{{.Ports}}" | sort
NAMES CREATED AT STATUS PORTS
Org3cli 2019-04-15 13:50:36 +0900 JST Up About an hour
cli 2019-04-15 10:55:05 +0900 JST Up 4 hours
dev-peer0.org1.example.com-mycc-1.0 2019-04-15 10:55:56 +0900 JST Up 4 hours
dev-peer0.org1.example.com-mycc-2.0 2019-04-15 13:50:51 +0900 JST Up About an hour
dev-peer0.org2.example.com-mycc-1.0 2019-04-15 10:55:39 +0900 JST Up 4 hours
dev-peer0.org2.example.com-mycc-2.0 2019-04-15 13:51:24 +0900 JST Up About an hour
dev-peer0.org3.example.com-mycc-2.0 2019-04-15 13:51:09 +0900 JST Up About an hour
dev-peer1.org2.example.com-mycc-1.0 2019-04-15 10:56:13 +0900 JST Up 4 hours
orderer.example.com 2019-04-15 10:55:04 +0900 JST Up 4 hours 0.0.0.0:7050->7050/tcp
peer0.org1.example.com 2019-04-15 10:55:04 +0900 JST Up 4 hours 0.0.0.0:7051->7051/tcp
peer0.org2.example.com 2019-04-15 10:55:04 +0900 JST Up 4 hours 0.0.0.0:9051->9051/tcp
peer0.org3.example.com 2019-04-15 13:50:35 +0900 JST Up About an hour 0.0.0.0:11051->11051/tcp
peer1.org1.example.com 2019-04-15 10:55:04 +0900 JST Up 4 hours 0.0.0.0:8051->8051/tcp
peer1.org2.example.com 2019-04-15 10:55:04 +0900 JST Up 4 hours 0.0.0.0:10051->10051/tcp
peer1.org3.example.com 2019-04-15 13:50:35 +0900 JST Up About an hour 0.0.0.0:12051->12051/tcp
ã®ããã«ã
- ã¯ã©ã¤ã¢ã³ããã¼ã 2 種
- mycc v1.0 ã¤ã³ã¹ã¿ã³ã¹ 3㤠(peer0.org1, peer0.org2, peer1.org2)
- mycc v2.0 ã¤ã³ã¹ã¿ã³ã¹ 3㤠(peer0.org1, peer0.org2, peer0.org3)
- orderer 1 ã¤
- org 3種 x peer 2ã¤ã§è¨ 6 ã¤ã® Peer ãã¼ã
ãèµ·åãã¦ãããã¨ããããã chaincode ã¯ã¢ããã°ã¬ã¼ããã¦ãã³ã³ããèªä½ã¯æ¶ããªãã®ãªã
./eyfn.sh down
åç´ãªããããã¹ã¯ãªãããä¸è¨ã¾ã§ã§ä½ã£ããã®ãã¿ããªåé¤ããã
ããã¾ã
ä»åã¯ååã®å 容ãè¸è¥²ãã¦ãé¨åãæ®ã©ã ã£ãã®ã§ãããã¨ç°¡åã ã£ãã
次åã¯ãååé£ã°ãã¦ãã Writing Your First Application ãã¥ã¼ããªã¢ã«ã«é²ãäºå®ã
Hyperledger Fabric ã¨æ¯ãã part.1
ã¨ãããã¨ã§ä»æ¥ã¯ããã£ã¨ Hyperledger Fabric ãåããã¦ã¿ãã
ã¡ãã£ã¨èª¿ã¹ãããã Hyperledger Composer ã便å©ããã ã£ãã®ã§ããããã¦å°å ¥ã ããã¦ããã
ãã®åã«
Hyperledger Fabric ãã©ããªããããç¨èªã¨ãã®å 容ããããç¨åº¦ã«ã¶ãã¯ãªèªãã©ãã
hyperledger-fabric.readthedocs.io
çè§£ãããã¨ãããããã£ããã¾ã¨ããã¨
- Network
- Hyperledger Fabric ãã¤ãã£ã¦ä½ãã·ã¹ãã å ¨ä½ãæãã
- 1ã¤ä»¥ä¸ã® Organization ã network ã®ç®¡çãããæ¨©å©ãæã¦ãã
- ããã¯å³å¯ã«ã¯ System Channel ã¨ããç¹å¥ãª channel ã¨ãã¦æ±ãããã
- 1ã¤ä»¥ä¸ã® Channel ãå«ãã
- 1ã¤ä»¥ä¸ã® Orderer ãå«ãã
- Organization
- ãã® network ã«åå ããçµç¹ãæãã
- 1ã¤ä»¥ä¸ã® channel ã«åå ã§ããã
- 1ã¤ä»¥ä¸ã® peer ãæã¤ã
- 1ã¤ã® MSP ãæã¤ã
- Peer
- (ç©ççãªæå³ã§) organization ã管çãããã¼ãã ã
- ã¤ã¾ãã 1 ã¤ä»¥ä¸ã® channel ã«åå ã§ããã
- ã¤ã¾ãã 1 ã¤ä»¥ä¸ã®å°å¸³ãæã¤ã
- (è«ççãªæå³ã§ã¯) channel ã«ãã¹ãããããã¼ãã ã
- ã¤ã¾ãã 1 ã¤ä»¥ä¸ã® channel ã«åå ã§ããã
- 4 種ã®å½¹å²ããããå peer ã¯1ã¤ä»¥ä¸ã®å½¹å²ãæ
ãã
- Commitment Peer
- å°å¸³ãä¿æãã¦ããã
- æ¤è¨¼ããããã©ã³ã¶ã¯ã·ã§ã³ãèªèº«ã®å°å¸³ã«åæ ããã
- åºæ¬çã«ãã¹ã¦ã® peer 㯠commitment peer ã«ãªãã¨æãã
- Endorsement Peer
- å°å¸³ãchaincodeãendorsement policy ãä¿æãã¦ããã
- endorsement policy ã«åºãã¦ãã©ã³ã¶ã¯ã·ã§ã³ã®æ¤è¨¼ãæ å½ããã
- Anchor Peer
- network ã«åå ããä»ã® organization ã¨ã®éä¿¡ã®çªå£ã«ãªãã
- Leader Peer
- orderer ã¨ç´æ¥ããã¨ãããã
- leader ãããªã peer ã¯ãleader ãããã©ã³ã¶ã¯ã·ã§ã³ãåé ãããã
- 1 organization ã«ã¤ãå¿ ã 1 leader peer ãå¿ è¦ã ã
- orderer ã¨ç´æ¥ããã¨ãããã
- Commitment Peer
- (ç©ççãªæå³ã§) organization ã管çãããã¼ãã ã
- Channel
- 1ã¤ã®å°å¸³ã¨ããããæ±ã organization ãã¡ãã¾ã¨ããåä½ã ã
- channel ã«æå±ãã organization ã ãã channel ã«æå±ããå°å¸³ãä¿æãå¶å¾¡ã§ããã
- 1ã¤ä»¥ä¸ã® peer ããã¤ã
- 常㫠1 ã¤ã® Leader Peer ããã¤ã
- å°ãªãã¨ã 1 ã¤ã® Commitment Peer ããã¤ã
- å°ãªãã¨ã 1 ã¤ã® Endorsement Peer ããã¤ã
- å°å¸³
- ãã®ã¾ã¾ã ã
- å é¨çã«ã¯ãç¾å¨(ææ°)ã®ç¶æ ãä¿æãã DB ã¨ãããã¾ã§ã®æä½å±¥æ´ãä¿æãã BlockChain ã§æ§æãããã
- å°å¸³ã¨ããªã channel ã«æå±ãã organization (ã® peer) ãããããå ¨ãåãå°å¸³ã®ã³ãã¼ãä¿æãã¦ãã
- å°å¸³ã¨ããªã channel ã«æå±ãã organization (ã® peer) ã chaincode ãéãã¦å°å¸³ãå¶å¾¡ã§ããã
- DB ã¿ãããªããªã§ã¢ã¯ã»ã¹ã§ããã
- ãã®ã¾ã¾ã ã
- Endorsement Policy
- ãã©ã³ã¶ã¯ã·ã§ã³ãåãå ¥ããããããã«ãã©ã® organization ãæ¿èªããå¿ è¦ããããã®å®ç¾©ã ã
- channel æ§æã«å«ã¾ããchannel å ã®ãã¹ã¦ã® endorsement peer ã¯åä¸ã®ããªã·ã§åãå¿ è¦ãããã
- Chain Code
- å°å¸³ã«å¯¾ããæä½ãå®ç¾©ããããã°ã©ã ã¿ãããªãã®ã ã
- peer ã«ã¤ã³ã¹ãã¼ã«ããã¤ã³ã¹ã¿ã³ã¹åãããã¨ã§ä½¿ç¨ãããã¨ãã§ããã
- ãã¼ã¸ã§ã³ã¯ç®¡çãããã
- Orderer
- å peer ã«å¯¾ãããã©ã³ã¶ã¯ã·ã§ã³ã®é çªãã³ã³ã»ã³ãµã¹ã管çããç¹å¥ãªãã¼ãã ã
- network ã«ã¤ã 1 ã¤ä»¥ä¸å«ã¾ããã
- è¤æ°ããå ´åã¯ãApache Kafka ã§åé·æ§æãã¨ãã ãã ã
- network ã«ããããããã® organization ã«æå±ãã¦ããã
- è¤æ°ããå ´åã¯ãè¤æ°ã® organization ã§ããããæã¤ãã¨ãã§ããã
- network ã«å«ã¾ãããã¹ã¦ã® channel ãè·¨ãã§åå¨ãã¦ããã
- æå±ãã¦ãã organization ããã¹ã¦ã® channel ã«å«ã¾ãã¦ããªãã¦ã大ä¸å¤«ã ã
- CA
- ãã ã®èªè¨¼å±ã ã
- Peer ã Ordererã Client ã¨ãã« X.509 è¨¼ææ¸ãåé ããã
- Fabric-CA ã¨ãããã®ãããã±ã¼ã¸ã«å«ã¾ãã¦ããã©ãæ®éã«çµç¹ç¬èªã® CA 使ãã°ããã
- é常ãå organization ããããã CA ãæã£ã¦ãã
- ãã ã®èªè¨¼å±ã ã
- MSP
- Membership Services Provider
- CA ãã¤ãã£ã¦ãnetwork å ã®åãã¼ãããã£ã³ãã«ãã¦ã¼ã¶ãªããã® Hyperledger Fabric ç¹æã®ããããã管çããã
- å organization ãããããéç¨ããã
- Client
- network ä¸ã®å°å¸³ãåç
§ã»å¶å¾¡ããã¢ããªã±ã¼ã·ã§ã³ã ã
- ããã¾ã§ã Hypeledger Fabric ã·ã¹ãã ã«å¯¾ããã¯ã©ã¤ã¢ã³ããæãã®ã§æ··ä¹±ããªãããæ³¨æã ã
- ããã¦ãã¯å organization ãããããã«ä½æã»ç®¡çããã
- network ä¸ã®å°å¸³ãåç
§ã»å¶å¾¡ããã¢ããªã±ã¼ã·ã§ã³ã ã
Identity 㨠MSP ããããããã¨çè§£ããããããããå«ãä½ãåéããã¦ããããªãå¾ã»ã©ä¿®æ£ããã (ã®ã§ãææçãã¦ããã人ããããå¬ããã)
ã¤ã³ã¹ãã¼ã«
å ¬å¼ããã¥ã¡ã³ãéãé²ãããã¤ã³ã¹ãã¼ã«ããã¥ã¢ã«ãå訳ããè¶£å³ã¯ãªãã®ã§ãªã³ã¯ã ãè²¼ã£ã¨ãã
注æãã¹ãã¨ããã¯ã Node.js 㯠v8 ç³»ãããªãã¨ãã¡ã¨ã®äºãªã®ã§ nvm ã使ã£ã¦ãã¼ã¸ã§ã³ãæå®ãããã¨ãpyenv ãªã©ã§ python ã³ãã³ãã®ãã¼ã¸ã§ã³ã 3 ç³»ã«ãã¦ãã¨ãã¯å¿ãã 2.7 ç³»ã«ãªãããã«ãã¦ãããã¨ããããã ã¨ãããã¨ã§ prereqs ãããã¨éè¦ãªã®ã§ãããã¦è²¼ã£ã¨ãã
- Hyperledger Fabric
- Hyperledger Composer
ãªã Fabric ã®ã¤ã³ã¹ãã¼ã«ã¹ã¯ãªããã¯ã«ã¬ã³ããã£ã¬ã¯ããªã« samples ãªãã¸ããªãã¯ãã¼ã³ããã®ã§ãå¤ãªå ´æã§å®è¡ããã¨å¾®å¦ãªæ°æã¡ã«ãªãã®ã§æ³¨æã
ããæ¢ã«ã¤ã³ã¹ãã¼ã«æ¸ãªãã®ããã£ãã®ã§è²ã é£ã°ãããçããã®ããããã MacOS 10.14.4 ã®ç°å¢ã§ã ããããããªãããã«ãªã£ãã
$ node --version v8.15.1 $ python --version Python 2.7.10 $ go version go version go1.12.1 darwin/amd64 $ docker --version Docker version 18.09.2, build 6247962 $ docker-compose --version docker-compose version 1.23.2, build 1110ad01 $ composer --version v0.20.8 $ docker images -a | sort REPOSITORY TAG IMAGE ID CREATED SIZE hyperledger/fabric-ca 1.2.1 be8400395e15 6 months ago 251MB hyperledger/fabric-ca 1.4.1 3a1799cda5d7 9 hours ago 252MB hyperledger/fabric-ca latest 3a1799cda5d7 9 hours ago 252MB hyperledger/fabric-ccenv 1.2.1 8651e7160d88 6 months ago 1.43GB hyperledger/fabric-ccenv 1.4.1 d7433c4b2a1c 9 hours ago 1.43GB hyperledger/fabric-ccenv latest d7433c4b2a1c 9 hours ago 1.43GB hyperledger/fabric-couchdb 0.4.10 3092eca241fc 9 months ago 1.61GB hyperledger/fabric-couchdb 0.4.15 8de128a55539 3 weeks ago 1.5GB hyperledger/fabric-couchdb latest 8de128a55539 3 weeks ago 1.5GB hyperledger/fabric-javaenv 1.4.1 b8c9d7ff6243 11 hours ago 1.74GB hyperledger/fabric-javaenv latest b8c9d7ff6243 11 hours ago 1.74GB hyperledger/fabric-kafka 0.4.15 b4ab82bbaf2f 3 weeks ago 1.44GB hyperledger/fabric-kafka latest b4ab82bbaf2f 3 weeks ago 1.44GB hyperledger/fabric-orderer 1.2.1 b1a1dd788841 6 months ago 152MB hyperledger/fabric-orderer 1.4.1 ec4ca236d3d4 9 hours ago 173MB hyperledger/fabric-orderer latest ec4ca236d3d4 9 hours ago 173MB hyperledger/fabric-peer 1.2.1 ef0e7788ead0 6 months ago 159MB hyperledger/fabric-peer 1.4.1 a1e3874f338b 9 hours ago 178MB hyperledger/fabric-peer latest a1e3874f338b 9 hours ago 178MB hyperledger/fabric-tools 1.4.1 432c24764fbb 9 hours ago 1.55GB hyperledger/fabric-tools latest 432c24764fbb 9 hours ago 1.55GB hyperledger/fabric-zookeeper 0.4.15 20c6045930c8 3 weeks ago 1.43GB hyperledger/fabric-zookeeper latest 20c6045930c8 3 weeks ago 1.43GB
CA ã¨ã Orderer ã¨ã Peer ãªããã®ã¤ã¡ã¼ã¸ãã¤ã³ã¹ãã¼ã«ããã¦ããã¨ã確èªã§ããã
Hyperledger Fabric ã®ææ°ç㯠1.4.1 ã ããComposer ã®ææ°çã®å¯¾è±¡ãã¼ã¸ã§ã³ã¯ãã¾ã 1.2 ç³»ãªã®ã§ä¸é¨ 1.2 ç³»ãå«ã¾ãã¦ããã v1.4 ç³»ã LTS ãªã®ã¨ãv1.4 ç³»ããããã°ã©ãã³ã°ã¢ãã«ãæ´æ°ãããã¨ã®äºãªã®ã§ãã§ããããã v1.2 ã¯ä½¿ããªãã§è¡ãããã¨ããã§ã¯ããã
ãã¥ã¼ããªã¢ã«ãåãã
ãã¥ã¼ããªã¢ã«ãã£ã¡ã沢山ããã®ã§ã¬ã³ã¬ã³ãããã¦ãã
sample ãªãã¸ããªã¯ä¸è¿°ã®éãã¤ã³ã¹ãã¼ã«ã¹ã¯ãªãããå®è¡ããå ´æã« clone ããã¦ããã
以é㯠tags/v1.4.1(6c0203a) ã§ã®åå¼·çµæã
Building Your First Application ãã¥ã¼ããªã¢ã«
ãã¥ã¼ããªã¢ã«ã®ç®æ¬¡ãè¦ã㨠Writing Your First Application ãå ã«ããã¹ãã£ã½ãã®ã ããåããããç¥ãåã«æ¸ãããããå ¥ãã®ã£ã¦ã©ããªã®ã¨æã£ãã®ã§å ã«ãã£ã¡ã
./byfn.sh generate
åºåãè¦ãã°ãªãã¨ãªãããããã©ã以ä¸ã®ãã¨ããã£ã¦ãã(èªåã§åæããå 容ãå¤åã«å«ã¾ãããããæ£ç¢ºãã©ããã¯æªãã)
cryptogenã§crypto-config.yamlã®è¨å®éãã«è¨¼ææ¸ãçºè¡ãã¦./crypto-configãçæcryptogenã¯ä»¥ä¸ãçæãã¦ãåãã¼ããã¦ã¼ã¶ã®è¨å®ã¨ãªããããã£ã¬ã¯ããªããªã¼ãã¤ããé ç½®ãã- orderer ãã¡ã¤ã³(example.com) ã® CAãå
¨ã¦ã¼ã¶(Admin)ãå
¨ãã¼ã(ordererãorderer5) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
- è¨¼ææ¸ã¯ãããã交äºã«é å¸ããã
- org1.example.com ãã¡ã¤ã³ã® CAãå
¨ã¦ã¼ã¶(Admin, User1)ãå
¨ãã¼ã(peer0, peer1) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
- è¨¼ææ¸ã¯ãããã交äºã«é å¸ããã (ã¦ã¼ã¶å士ã¯äº¤æããªã)
- org2.example.com ãã¡ã¤ã³ã® CAãå
¨ã¦ã¼ã¶(Admin, User1)ãå
¨ãã¼ã(peer0, peer1) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
- è¨¼ææ¸ã¯ãããã交äºã«é å¸ããã (ã¦ã¼ã¶å士ã¯äº¤æããªã)
- orderer ãã¡ã¤ã³(example.com) ã® CAãå
¨ã¦ã¼ã¶(Admin)ãå
¨ãã¼ã(ordererãorderer5) ããããã«å¯¾ããè¨¼ææ¸ã¨éµ
- ä¸è¨ã§çæããéµå
容ã
docker-compose-e2e-template.yamlã«é©ç¨ãã¦docker-compose-e2e.yamlãçæ- ãã®
docker-compose-e2e.yamlãªãã ãã©ã以éã©ãã§ã使ããã¦ãªãã - ããã¯å¥ã®ãã¹ãç¨ã®ãã®ãªã®ã§ä»åã¯ç¡è¦ããã
- ãã®
configtxgenã§configtx.yamlã®è¨å®éãã« Orderer ã®è¨å®ãçæãã¦./channel-artifacts/genesis.blockãçæ- æåéãã¸ã§ãã·ã¹ãããã¯(ãããã¯ãã§ã¼ã³ã«ãããä¸çªæåã®ãããã¯) ãçæãã
- å 容ã¨ãã¦ã¯ network ã® ã¹ã¿ã¡ã³ã¨ãªãåãã¼ãã®MSPæ å ±
- ãã㯠mychannel ã®ãããã¯ãã§ã¼ã³ã§ã¯ãªããSystem Chain ã®ã¸ã§ãã·ã¹ãããã¯ã
- æåéãã¸ã§ãã·ã¹ãããã¯(ãããã¯ãã§ã¼ã³ã«ãããä¸çªæåã®ãããã¯) ãçæãã
configtxgenã§configtx.yamlã®è¨å®éãã« Channel ã®è¨å®ãçæãã¦./channel-artifacts/channel.txãçæconfigtx.yamlãã channel ã®æ§æã«ã¤ãã¦æç²ããã¿ãããªãã¤ããªãã¡ã¤ã«ãä½ã£ã¦ããã- 以éã®æé ã§ channel ã使ããéã«è¨å®ãã¡ã¤ã«ã¨ãã¦æ¸¡ããã¦ãã
configtxgenã§configtx.yamlã®è¨å®éãã« Peer1 ã®è¨å®ãçæãã¦./channel-artifacts/Org1MSPanchors.txãçæconfigtxgenã§configtx.yamlã®è¨å®éãã« Peer2 ã®è¨å®ãçæãã¦./channel-artifacts/Org2MSPanchors.txãçæconfigtx.yamlãã organization ã®æ§æã«ã¤ãã¦æç²ããã¿ãããªãã¤ããªãã¡ã¤ã«ãä½ã£ã¦ããã- 以éã®æé ã§ anchor peer ã channel ã«ç»é²ããéã«è¨å®ãã¡ã¤ã«ã¨ãã¦æ¸¡ããã¦ãã
./byfn.sh up
ãªãã·ã§ã³ã§ chaincode ã Go å®è£ ãããªã㦠Node å®è£ ã Java å®è£ ã«åãæ¿ããããããããã©ã«ãã§ 1 ãããèµ·åãããªã orderer ã Kafka ãªãã Raft ã§ä¸¦åã«åãããããã¨ãã§ãããStateDB ã CouchDB (ããã©ã«ã㯠LevelDB) ã«ãããã¨ãã§ãããããã
ä»åã¯æ¢ã«ããã¨ããªããã£ã±ããªã®ã§ããã©ã«ããªãã·ã§ã³ã«ã¦å®è¡ããã
以éããã¯ãèªåã§åæããå 容ãå¤åã«å«ã¾ãããããæ£ç¢ºãã©ããã¯æªãã
docker-composeã§åãã¼ããèµ·åãã- ãªãã·ã§ã³çãã¤ããªãã£ãå ´åã
docker-compose-cli.yamlã ãã使ç¨ãããã- ããã« orderer2 ã orderer5 ã¾ã§ã® 4 ã¤ã® orderer ã¯å«ã¾ãã¦ããªã
- åãã¼ãã¯
cryptogenã§ä½ã£ããã£ã¬ã¯ããªããªã¼ã®èªèº«ã«å¯¾å¿ããé¨åãé©å®ãã¦ã³ãããããã«ãªã£ã¦ãã
- èµ·åããã®ã¯ä»¥ä¸ããªããã¹ã¦
byfnãããã¯ã¼ã¯ã«å±ããã- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
- cli
- çªç¶ç¾ãããã©ãããã¯ã¯ã©ã¤ã¢ã³ããã¼ãã
docker exec cli peer ...ã®ããã«å¼ã¶ãã¨ã§peer0.org1.example.comã対象ã«(ç°å¢å¤æ°ã®ã»ããçãããã¨ã)ç°¡åã«peerã³ãã³ããå¼ã¹ãããã«ãªã£ã¦ãpeerã³ãã³ãã¯ã Hyperledger Fabric ã®ã³ãã³ãã©ã¤ã³ãã¼ã«ã
- çªç¶ç¾ãããã©ãããã¯ã¯ã©ã¤ã¢ã³ããã¼ãã
- CA ãµã¼ãã¯èµ·åãã¦ãªãã
- (ãã¨ã§èª¿ã¹ã)
- ãªãã·ã§ã³çãã¤ããªãã£ãå ´åã
- ä½ã£ã
cliã«scripts/script.shãå®è¡ãããpeer channel create- orderer ã«å¯¾ãã¦å®è¡ãã¦ãã
- TLS ãæå¹ã«ãã
crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pemã TLS CA è¨¼ææ¸ã¨ãã¦ä»å ããããã§ã configtxgenã§ä½æããchannel.txã®è¨å®ã§ãmychannelã¨ããååã® channel ã使ããã
- TLS ãæå¹ã«ãã
- ããã§
mychannel.blockãcliã® working directory ã«ä½æããã- ããã¯
mychannelã®ãããã¯ãã§ã¼ã³ã«ãããã¸ã§ãã·ã¹ããã㯠- å 容ã¨ãã¦ã¯ channel ã® ã¹ã¿ã¡ã³ã¨ãªãåãã¼ãã®MSPæ å ±
- ããã¯
- orderer ã«å¯¾ãã¦å®è¡ãã¦ãã
peer channel join- å
¨ peer ãã¼ã(4ã¤)ããããã«å¯¾ãã¦å®è¡ãã¦ãã
- ä¸ã§ä½æããã
mychannel.blockãæ¸¡ãã¦ã対象 peer ãã¼ãã mychannel ã«åå ããã
- ä¸ã§ä½æããã
- å
¨ peer ãã¼ã(4ã¤)ããããã«å¯¾ãã¦å®è¡ãã¦ãã
peer channel update- orderer ã«å¯¾ãã¦å®è¡ãã¦ãã
- Anchor Peer ã¨ãªã 2 ã¤ã® peer0 ãã¼ãããããã«å¯¾ãã¦ã
- TLS ãæå¹ã«ãã
crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pemã TLS CA è¨¼ææ¸ã¨ãã¦ä»å ããããã§ã configtxgenã§ä½æããOrg*MSPanchors.txã®è¨å®ã§ãmychannelãæ´æ°ããã
- ããã§ Org* ã®ã¢ã³ã«ã¼ãã¢ã¨ãã¦
peer0.org*.example.comãè¨å®ããã- è¨å®å 容㯠channel å ã®å ¨ peer ã«ä¼éããã
- orderer ã«å¯¾ãã¦å®è¡ãã¦ãã
peer chaincode install- Anchor Peer ã§ãã 2ã¤ã®
peer0.org*.example.comãã¼ãã«å¯¾ãã¦å®è¡ããã¦ãã- æåéã chaincode ãã¤ã³ã¹ãã¼ã«ãã¦ãã
- ãã¹ ã¯
../chaincode/chaincode_example02/go/- ãã«ãã¨ãã¯ããããã®ã¾ãã¾æ¸¡ãã¦ããã£ã½ã
- chaincode ã®å å®¹ã¯æ¬¡ã®ãã¥ã¼ããªã¢ã«ã§å¦ã¶ã®ã§ã¨ããããç¡è¦ã
- chaincode åã¯
myccã ãã¼ã¸ã§ã³1.0ãå®è£ è¨èªã¯golangãã¨ããããæå®ãã¦ããã
- Anchor Peer ã§ãã 2ã¤ã®
peer chaincode instantiatepeer0.org2.example.comãã¼ã 1 ã¤ã®ã¿ã«å¯¾ãã¦å®è¡ããã¦ãã- orderer
orderer.example.comã«å¯¾ãã mychannelã«ããã¦ã- åæåã¡ãã»ã¼ã¸
{"Args":["init","a","100","b","200"]}ãæ¸¡ãã- "a" ã« "100" ãã "b" ã« "200" ãããããã»ãããã¦ããã£ã½ã
- ããªã·ã¼
AND ('Org1MSP.peer','Org2MSP.peer')ãæ¸¡ãã¦ã- Org1 ã®æ¿èªãããã³ Org2 ã®æ¿èªã® 2 ã¤ãå¿ è¦ã¨ãããã¨
myccã®ãã¼ã¸ã§ã³1.0ãã¤ã³ã¹ã¿ã³ã¹åãã
- orderer
- ã©ãããã®ã¿ã¤ãã³ã°ã§ã½ã¼ã¹ã³ã¼ãã®ãã«ããè¡ããã¦ããããã
- ã¤ã³ã¹ã¿ã³ã¹åã®æä½ã¯ channel å
ã®å
¨ peer ã«ä¼éããã
- ã¤ã³ã¹ãã¼ã«ããã¦ããã®ã¯
peer0.org*ã® 2 ãã¼ãã ããªã®ã§ãå®éã« query, invoke ãã§ããã®ã¯ããã 2 ãã¼ãã ãã¨ãªã
- ã¤ã³ã¹ãã¼ã«ããã¦ããã®ã¯
peer chaincode querypeer0.org1ãã¼ãã«å¯¾ãã query ã®åä½ç¢ºèª- "a" ã®å¤ãåãåãã㦠"100" ã§ãããã¨ã確èªãã¦ããã£ã½ã
- chaincode ã®å å®¹ã¯æ¬¡ã®ãã¥ã¼ããªã¢ã«ã§å¦ã¶ã®ã§ã¨ããããç¡è¦ã
peer chaincode invokepeer0.org1ããã³peer0.org2ãã¼ãã«å¯¾ãã invoke ã®åä½ç¢ºèª- "a" ãã "b" ã« "10" ã ãç§»åãã¦ããã£ã½ã
- chaincode ã®å å®¹ã¯æ¬¡ã®ãã¥ã¼ããªã¢ã«ã§å¦ã¶ã®ã§ã¨ããããç¡è¦ã
peer chaincode installpeer1.org2.example.comãã¼ãã«ã chaincode ãã¤ã³ã¹ãã¼ã«ãã¦ãã- chaincode ã¯æ¢ã«ã¤ã³ã¹ã¿ã³ã¹åããã¦ããããã
peer1.org2.example.comã§myccã¯ç´ã¡ã«ä½¿ããããã«ãªã - ã¤ã³ã¹ãã¼ã«ããã¦ããã®ã¯
peer0.org*ãå«ãã 3 ãã¼ãã§ãå®éã« query, invoke ãã§ããã®ãããã 3 ãã¼ãã¨ãªã
- chaincode ã¯æ¢ã«ã¤ã³ã¹ã¿ã³ã¹åããã¦ããããã
peer chaincode querypeer1.org2ãã¼ãã«å¯¾ãã query ã®åä½ç¢ºèª- "a" ã®å¤ãåãåãã㦠"90" ã§ãããã¨ã確èªãã¦ããã£ã½ã
- chaincode ã®å å®¹ã¯æ¬¡ã®ãã¥ã¼ããªã¢ã«ã§å¦ã¶ã®ã§ã¨ããããç¡è¦ã
ããã§ãDocker ã³ã³ãããä¸è¦§ãã¦ã¿ãã¨
$ docker ps --format "table {{.Names}}\t{{.CreatedAt}}\t{{.Status}}\t{{.Ports}}" | sort
NAMES CREATED AT STATUS PORTS
cli 2019-04-12 17:04:04 +0900 JST Up 2 hours
dev-peer0.org1.example.com-mycc-1.0 2019-04-12 17:04:55 +0900 JST Up 2 hours
dev-peer0.org2.example.com-mycc-1.0 2019-04-12 17:04:38 +0900 JST Up 2 hours
dev-peer1.org2.example.com-mycc-1.0 2019-04-12 17:05:12 +0900 JST Up 2 hours
orderer.example.com 2019-04-12 17:04:03 +0900 JST Up 2 hours 0.0.0.0:7050->7050/tcp
peer0.org1.example.com 2019-04-12 17:04:03 +0900 JST Up 2 hours 0.0.0.0:7051->7051/tcp
peer0.org2.example.com 2019-04-12 17:04:03 +0900 JST Up 2 hours 0.0.0.0:9051->9051/tcp
peer1.org1.example.com 2019-04-12 17:04:03 +0900 JST Up 2 hours 0.0.0.0:8051->8051/tcp
peer1.org2.example.com 2019-04-12 17:04:03 +0900 JST Up 2 hours 0.0.0.0:10051->10051/tcp
ãããªæãã§ dev-*-mycc-1.0 ã¨ãããã®ãåºæ¥ã¦ããããããè¦ããã«ã¤ã³ã¹ã¿ã³ã¹åãã chaincode ã£ã¦äºãããã
./byfn.sh down
åç´ãªããããã¹ã¯ãªãããä¸è¨ã¾ã§ã§ä½ã£ããã®ãã¿ããªåé¤ããã
ã¾ã¨ã
ã¾ãã¯èµ·åã¨åä½ç¢ºèªã¨ã宿½ã§ãããä»åã¯ãåå¼·é ç®ããããã¨å¤ãã£ãã®ã§ãã£ããç²ããã
Hyperledger Fabric ã¨æ¯ãã part.0
é¦é¡ã«ã¤ãã¦åå¼·ããçµæãã©ããã«çºãã¦ããããã£ãã®ã ããé©ããå ´æãã¨ãã«è¦å½ããªãã£ãã®ã§ããã«æ®ãã¨ãã ãã¨ã§ããé©ããã©ããã«ç§»åããããã
ãããã¯ãã§ã¼ã³ã¦ãªã¼ã«
ãããã¯ã®ãã§ã¼ã³ã§ããã
ãããã¯ã¯ä¸»ã«
- ãã©ã³ã¶ã¯ã·ã§ã³
- ã²ã¨ã¤åã®ãããã¯ã®ããã·ã¥å¤
ã§æ§æããããããä¸ã¤ãªãã«ç¶ããã¨ã§ã·ã¹ãã å ¨ä½ã«ãããåå¼å±¥æ´ãªã©ãã¤ãããããã
ãã®ã¨ããBlock(n-1) ã®ãã©ã³ã¶ã¯ã·ã§ã³ãæ¹ç«ãããã¨ããã¨ãBlock(n) ã«ãã Block(n-1) ã®ããã·ã¥å¤ã¨ä¸æ´åãèµ·ãããã§ã¯ Block(n) ã«ãã Block(n-1) ã®ããã·ã¥å¤ãæ¹ç«ããããã¨ãªã㨠Block(n+1) ã«ãã Block(n) ã®ããã·ã¥å¤ã¨ä¸æ´åãèµ·ããã»ã»ã»ã¨ãã£ããããã§ãæ¹ç«ãããã¨å°é£ã«ãªãããããããã£ãå¾ããæ¹ç«ã¨ãããããã®ãç°¡åã«ã§ããªããããªãã®(ããããä»®æ³é貨ã®åå¼ã¨ãã)ã«ä½¿ãããã
ãã¡ããä¸è¨èª¬æã ãã ã¨ä¸ååã§ããããã¯ãä½ããã¨èªä½ãè¨å¤§ãªè¨ç®ã³ã¹ããè¦ãã¦ããããæ¹ç«å¯¾è±¡ä»¥éã®ãããã¯ãæãæ¹ç«ãã¦ããã®ãä½è¨ã«å¤§å¤ã«ãªã£ã¦ããã ã¨ãããããã¯ãã§ã¼ã³ãåæ£ç®¡çããã¦ããããä¸ç®æã ãæ¹ç«ãã¦ãæå³ãªãã¨ãããããããªçè«ãä»çµã¿ãè¤éã«çµ¡ãã§æè¬ãã»ãã¥ã¢ãªãå¸³ç°¿ãæ§æãããã¨ãã§ãã¦ããã
å½ç¶ã ã俺ã¯ãã®å
¨ã¦ãæ£ç¢ºã«èª¬æã§ããªããç¥ã£ã¦ãããªããããããã®å
¨é¨ããã£ã¦ã¦å®éã«ã¼ãããããããã®ãä½ãã人ã¯å¹´å2000ä¸ã¨ãè²°ãè¶
䏿µã®ãããã¯ãã§ã¼ã³ã¨ã³ã¸ãã¢ãªããã§ã俺ã¯ããã§ãªãå¹´å3æ¡ä¸ã®ä¸è¬çãªã·ã¹ãã ã¨ã³ã¸ãã¢ã§ããããããéãæ¬²ãã
忣å°å¸³ã£ã¦ãªã¼ã«
ãããã¯ãã§ã¼ã³ã§æ§æããå°å¸³ããåæ£ç®¡çããã·ã¹ãã ãå®éã¯åæ£å°å¸³æè¡ããããã¯ãã§ã¼ã³ã®æ´¾çãããã®ã ããä¸è¬ã«ã¯åæ£å°å¸³æè¡ãå«ãã¦ããããã¯ãã§ã¼ã³æè¡ãã¦è¨ããã¡ããã
忣å°å¸³ã¯ããã®ãããã¯ã¼ã¯ã®åå è ãããããã«ãã©ã³ã¶ã¯ã·ã§ã³ãæ¤è¨¼ããã³ã³ã»ã³ãµã¹ãåãããã¨ã確èªãã¦ããã®å¾ã«å ¨åå è ã®å°å¸³(ãããã¯ãã§ã¼ã³)ã«ãã©ã³ã¶ã¯ã·ã§ã³ã追å ããã ãããããã¨ã«ãã£ã¦ãååå è ã®æã¤å°å¸³ã®æ´åæ§ãåããå ¨åå è ãåä¸ã®å°å¸³ãåæ£ä¿æãã¦ããã¨è¨ããã¨ãã§ãããããã
ããããã«ãããã¯ãã§ã¼ã³ã¦ä½ãå¬ããã®?
ãã¼ã¿æ§é çã«æ¹ç«ããã«ããã¨ããåæ£ç®¡çã«ããä¸å¤®é権åã®åé¿ã ã®åé·æ§ã ã®ã¨è²ã è¨ãããããããããã«ä¿¡é ¼æ§ãé«ããªãã£ã¦äºã§è¯ããããã
ãã ãããã®ããã«(æ®éã®RDBãªããã¨æ¯ã¹ãã)é度ã¨ãã¯å¤å°ãªãç ç²ã«ãªã£ã¦ãã¾ãã¨ã®ãã¨ã
Hyperledger Fabric ã¦ãªã¼ã«
Linux Foundation ã主å°ããOSS ã®ãããã¯ãã§ã¼ã³ãã©ãããã©ã¼ã ãHyperledger Projectãã®ãã¡ã® 1 ã¤ã§ãã³ã³ã½ã¼ã·ã¢ã åã®åæ£å°å¸³ãã¬ã¼ã ã¯ã¼ã¯ã ããã¡ã® 1 ã¤ãã¨ãã£ã¦ããã³ã¬ãããããååèããªãããã¨ã¯éçºãã¼ã«? ã® Composer ã¯ãã¾ã«èãããªç¨åº¦ã
ã³ã³ã½ã¼ã·ã¢ã åã¦ãªã¼ã«
Bitcoin ã Ethereumã¿ãããª(æªæãã奴ãå«ã)ä¸ç¹å®å¤æ°ãåå ãããã®(ãããªãã¯å)ã«å¯¾ããäºããäºãä¿¡é ¼ããã£ã¦ããè¤æ°ã®çµç¹ã ãã§å©ç¨ãããã®ãã³ã³ã½ã¼ã·ã¢ã åã
ç¹å®çµç¹ã ãã®è¨±å¯å¶ã§ã®åå ãåæã¨ãããã¨ã§ããããªãã¯åã»ã©ã«ã¯è¨å¤§ãªè¨ç®ãå¿ è¦ã¨ããªãã¦æ¸ã¿ãããããã«æ¯è¼çéããããã
ã¾ãã1 çµç¹ã ãã®ãã©ã¤ãã¼ãåãªããã®ããããããããã忣å°å¸³ããªã®ã«åæ£ç®¡çããªãã¨ã¯ããããã«? ãã¾ãæå³ãªããããªã®ã§èå³ããªã調ã¹ã¦ãããªãã
ãªãã§ Hyperledger Fabric ãªã®?
ä»äºã§ä½¿ãã¨æç¤ºãããããã§ããã
ãã¡ããä»ã«ããããã¯ãã§ã¼ã³åºç¤ã¯ãããããããããããã«ã¡ãªãããã¡ãªãããé·æçæãåãä¸åããªã©ã¯ããã®ã ãããã調ã¹ã¦ããããªããããªããã
仿¥ã¯ããã¾ã§
ãããHyperledger Fabric ã¨ã¾ã ä¸åæ¯ãã¦ãªãã