• 1) Install and Instantiate chaincode package
    • 음... chaincode를 install 및 instantiate 하는 방법을 알면 되는 영역인거 같다.
    • 예를들면,
      • peer chaincode install -n {chaincode이름} -v 1.0 -l java -p /etc/hyperledger/chaincode
      • peer chaincode instantiate -o {orderer주소} -C {channel이름} -n {chaincode이름} -l java -v 1.0 -c '{"function":"init","Args":[ ... ]}' -P 'OR ("Org1.member","Org2.member", ... )'
    • 이런식으로~ peer-node에 chaincode 관련 커맨드 하면 될 것이다.
  • 2) Configure endorsement policy
    • '보증정책'도 당연히 할 줄 알아야 할것이다.
    • chaincode-level '보증정책'
      • 예) AND('Org1.member', 'Org2.member', 'Org3.member') 
      • 예) OR('Org1.member', AND('Org2.member', 'Org3.member')) 
      • 예) OutOf(2, 'Org1.member', 'Org2.member', 'Org3.member') // 1,2,3중 두명에게 보증
      • EXPR(E[, E...]) 은 "표현식(AND,OR,OutOf)" 이다.
      • MSP.ROLE 은 "MSP ID" 와 "역할(member,admin,client,peer)" 이다.
      • 참고로... "MSP 설정"에 'identity classification' 설정을 해야, peer등의 역할을 할수있는것 같다.
      • // TODO : MSP id class
    • key-level '보증정책'
      • API shim 차원에서, 특정 key 단위로 '보증정책'을 세분화 할수있는 함수가 제공됩니다.
      • 예) SetStateValidationParameter(key string, ep []byte)
      • 예) GetStateValidationParameter(key string)
      • 예) SetPrivateDataValidationParameter(collection, key string, ep []byte) // private-data collection용
      • 예) GetPrivateDataValidationParameter(collection, key string) // private-data collection용
      • 예) type KeyEndorsementPolicy interface { 
        • Policy() ([]byte, error)
        • AddOrgs(roleType RoleType, organizations ...string)
        • DelOrgs(organizations ...string)
        • ListOrgs() ([]string) }
  • 3) Define collection policy for private data
    • private-data에 관한 collection 정의에서 '정책'을 정할수있습니다.
    • 예) [ 
      • "name": "collectionMarbles", 
      • "policy": "OR('Org1MSP.member','Org2MSP.member')", 
      • "requiredPeerCount": 0, 
      • "maxPeerCount": 3, 
      • "blockToLive":1000000, 
      • "memberOnlyRead": true },
      • { "name": "collectionMarblePrivateDetails", 
      • "policy": "OR('Org1MSP.member')", 
      • "requiredPeerCount": 0, 
      • "maxPeerCount": 3, 
      • "blockToLive":3, 
      • "memberOnlyRead": true }]
    • name collection 이름
    • policy : collection을 가질수있는organization의 peer들을 정의
    • requiredPeerCount : endorse-peer가 private-data를 배부해야할 최소 peer갯수 (미만시, 에러리턴)
    • maxPeerCount : endores-peer가 private-date를 배부하려고하는 최대 peer갯수 // TODO : 뭔말?
    • blockToLive : private-database에서 TTL 시간이 지나면 자동폐기
    • memberOnlyRead : 해당 collention의 organization에 속한 client도 private-data에 접근허용.
    • 마찬가지로,
      • peer chaincode instantiate ... --collections-config collection.json
      • peer chaincode invoke ... -c '{"Args":["write"]}' --transient '{"key1":{"price":99, ... }} | base64'
      • peer chaincode query ... -c '{"Args":["read","key1"]}'
    • 식으로~ chaincode에 collection을 정의 할수있습니다.
    • 그리고 chaincode에서 직접 GetPrivateData(collection,key) 및 PutPrivateData(collection,key,value) 함수를 코딩해서... private-data를 다루는것 입니다.
    • private-data는 orderer에게 제출되는 transaction에 포함되지 않는다. 즉, channel의 block에 포함되지 않는다는 것이다!
    • 그래서 endorse-peer가 private-data를 배부함에 있어서 가용성이 중요하다. (아니면, 유실위험)
    • 즉, maxPeerCount 및 requiredPeerCount 속성으로 가용성을 잘 설정 해야한다.
    • organization간에도 마찬가지로 endorse-peer가 private-data를 배부한다.
    • // TODO : 'gossip 프로토콜'은 anchor-peer에 의해 ... 음 ...
  • 4) Modify or upgrade chaincode
    • 기 chaincode도 당연히 수정 및 업그레이드 하는 방법을 알아야 할것같다.
    • 실례로,
      • peer chaincode install -n {chaincode새이름2} -v 2.0 -l java -p /etc/hyperledger/chaincode
      • peer chaincode instantiate -o {orderer주소} -C {channel이름} -n {chaincode새이름2} -l java -v 2.0 -c '{"function":"init","Args":[ ... ]}' -P 'AND ("Org1.member","Org2.member", ... )'
    • 이렇게~ 해당 chaincode를 고치고 -> 이름 및 버젼을 바꾸어서 다시 배포하면 잘 되었다.
    • 참고적으로 chaincode도 init가 되면서, 하나의 프로세스로 동작을 하게 된다.
    • (docker ps으로 새로운 컨테이너가 뜬것을 확인 할 수 있다.)

-끝-

+ Recent posts