원서 : https://hyperledger-fabric.readthedocs.io/en/release-1.4/smartcontract/smartcontract.html
- (What's) Smart Contracts and Chaincode
- Hyperledger Fabric 개발자 입장에서는 smart-contract(chaincode)가 가장 중요합니다. 비지니스적으로 ledger가 현재상태 및 히스토리 기록 이라면, smart-contract 앞으로 추가될 정보입니다. 일반적으로 chaincode는 각 administrator에 의해 배포되고, 시스템 전반적으로 다 쓰입니다. 자 그럼 smart-contract(chaincode)를 알아보아요.
- Smart contract
- 사업자간 비지니스를 할때에는 일단 먼저 계약서를 쓰죠? 계약서에는 각종 용어, 데이터, 룰, 개념정의, 프로세스등이 명시 될것입니다. 바로 이런 계약서으로 사업자간 상호거래를 통제할수있는 '비지니스 model'이 완성 되는것 입니다.
- 블로체인을 활용하면, 계약서를 실행가능한 프로그램으로 만들수 있습니다. 이것이 바로 smart-contract입니다. 다양한 사업군에서 이 smart-contract을 사용 할 수 있으며, 자동 효율화에 아주 유용합니다. (예를들면, smart-contract을 통해서~ 새차 납품을 정해진 기간보증을 할수도있고 자금의 흐름을 자동적으로 향상시킬수도 있습니다.) 잘 와닿지 않는다고요? 그냥 사람이 계약을 진행하는것 보다... 무조건 효율적이라는 것만 기억하세요! (복덕방 계약를 그냥 직방서버가 알아서 다 해준다고 상상해 봐요)
- Terminology
- Hyperledger Fabric에서 smart-contract 와 chaincode는 똑같은 의미 입니다. smart-contract는 '비지니스 데이터'의 lifecycle를 제어하는 'transaction logic' 입니다. 이건이 blockchain-network에 chaincode형태로 배포되는것 입니다.
- Ledger
- 단순히 말하자면, blockchain이란 ledge를 업데이트 하는 transaction을 불변하게 기록하는 방식으로 볼수있습니다. smart-contract는 프로그래밍 적으로 2가지 측면으로 접근할수 있습니다. 바로, blockchain(모든 transaction 히스토리를 불변하게 기록) 과 world-state(현재의 상태 캐시값) 입니다. smart-contract는 주로 world-state를 put, get, delete 하고~ 뭐 blockchain 쿼리도 할수있습니다.
- 물론 다양한 smart-contract API는 다 제공이 됩니다. 참 좋죠?
- Development
- 하나의 chaincode에서 여러게의 smart-contract를 정의할 수 있고, blockchain-network 배포되면~ organization들에서 바로 쓸수 있다는것을 의미합니다.
- 더 나아가, 하나의 smart-contract은 여러게의 transaction을 정의 할수있습니다.
- 개발자로 각종 다양한 비지니스를 프로그래밍 할수있고, java, golang, js 가 지원됩니다.
- Endorsement
- 모든 chaincode에는 그 smart-contract에 적용되는 각각의 '보증정책'을 정의 할 수 있습니다. '보증정책'은 해당 smart-contract의 transaction을 반영하기위해서~ 보증 받아야할 blockchain-network의 organization 이라고 보시면 됩니다.
- (보증 합의 방식에 관해서는 굳이 더 설명 안하겠습니다.)
- Hyperledger Fabric '보증정책'은 이더리움, 비트코딩 등과 좀 다릅니다. 이런류의 blockchain-network에서는 아무 node에서나 transaction 검증을 합니다. 반면 Hyperledger Fabric은 좀더 실세계의 비지니스 모델을 반영 했는데, transaction 는 반듯이 신뢰 할 수있는 organization에게 검증받아야 합니다. 예를들면 정부기관이 여러가지 신원확인을 해주듯이~ 특정 organization의 도장을 받아야 하는식입니다.
- 끝으로 '보증정책'는 Hyperledger Fabric의 여러 정책중 하나일 뿐입니다. '단순쿼리', '업데이트', 'node 추가제거' 등을 하는 다른정책들도 있습니다. 일반적으로 정책이란 organization들의 동의를 얻어서 세워지게 되는것이고... 정책을 변경하기위한 정책도 또한, 고급주체로 배우실수있습니다.
- Valid transactions
- smart-contract는 blockchain-network의 organization의 peer-node에서 실행된다. smart-contract는 'transaction proposal' 이라 불리는 파라미터를 가지고, ledger를 R/W하는 프로그램 로직을 처리한다.
- world-state의 변경은 'transaction proposal response'으로 되어짐니다. 참고로 'transaction proposal response'는 read-set 및 write-set 둘다 있습니다. 또한 smart-contract가 실행 되었다고, world-state에 반영되는것 아닙니다.
- 위 그림의 "car transfer"를 보면, transaction의 id값은 t3이고, input은 '{CAR1, ORG1, ORG2}' output은 '{CAR1.owner=ORG1, CAR1.owner=ORG2}' 입니다. (CAR1의 주인이 1에서->2으로 바뀜) input의 서명은 ORG1의 application 으로 되어있고, output의 서명은 '보증 정책'에 따라 ORG1 및 ORG2 둘다 되어있습니다. 서명은 각자의 private key으로 되는거 아시죠? 이렇기 때문에 blockchain-network의 모든이에 동의여부를 판단 할수있는것 입니다.
- 또 transaction는 모든 blockchain-network의 peer에게 분배된 이후, 두번에 걸쳐서 검증되어 집니다. 첫번째는 해당 transaction이 '보증 정책'에 따라 충분한 organization들로부터 서명을 받았는지? 확인하는것 입니다. 두번쨰는 현재의 world-state값 과 ('endorsing peer' 서명받은 당시) transaction의 'read-set'값이 대응되는지? 확인하는것 입니다. (고사이에 값 상태변화가 없는지? 확인 한다는 의미)
- 이렇게 두번에 걸친 테스트를 통과하면, 검증된 transaction으로 표시됩니다. 물론 모든 transaction 검증결과 상관없이 blockchain 히스토리에는 기록 됩니다. (ledger는 히스토리 및 world-state으로 구성되있는거? 다 아시죠?)
- Channels
- Hyperledger Fabric에서는 channel을 통해서, organization이 복수개의 blockchain-network에 참여 할 수 있습니다. 바로 channel을 통해 망을 공유할수있고, 데이터의 프라이버시를 지킬수있게 됩니다. 그러기 때문에 organization은 각 사업부 별로 관리망을 분리하기도 용이해지는것 입니다. (오직 거대한 blockchain-network망 하나로 모든것을 하는게 아니라, 사업별로 각각의 망을 구축)
- organization의 administrator는 chaincode을 인스턴티 할 때, '보증정책'을 정 할 수 있습니다. '보증정책'은 당연 모든 smart-contract에게 동일하게 적용이 되겠죠? 물론 서로다른 channel의 smart-contract은 '보증정책'이 서로다르게 정해질 수도 있겠죠.
- Intercommunication
- 특정 smart-contract는 동일channel 및 타channel 의 다른 smart-contract를 모두 호출 할 수 있습니다. 이런방식으로 'smart-contract namespace'에 제약이있어도, world-state 데이터를 R/W 할수있습니다. 이런 상호통신은 'chaincode namespace' 시간에 자세히 보아요.
- System chaincode
- chaincode으로 개발된 smart-contract는 (blockchain-network의 organization 동의하에~) '비지니스 rule'을 정하는것 이라고 볼 수 있지만, chaincode로는 비지니스와 관련없는 시스템으로써의 low-level 프로그래밍도 할 수 있습니다. 이런 '시스템 chaincode' 종류와 그 약어도 한번 알아두면 좋겠죠?
- Lifecycle system chaincode (LSCC) : 모든 peer에서 chaincode의 signing, install, instantiate, upgrad을 처리함.
- Configuration system chaincode (CSCC) : 모든 peer에서 channel 설정(정책)을 처리함.
- Query system chaincode (QSCC) : 모든 peer에서 ledger API (block query, transaction query)을 처리 합니다.
- Endorsement system chaincode (ESCC) : 'endorsing peer'에서 transaction response 암호화 서명을 처리함.
- Validation system chaincode (VSCC) : transaction의 '보증정책' 검증 및 'read-write 버젼' 검증을 합니다.
- low-level 수준의 시스템 프로그래밍을 하는 개발자 분들은... administrator으로써 시스템 수정도 하실 수 있는것 입니다. 하지만... 생각만해도 무시무시한(?) 작업인 느낌! 딱 오시죠?ㅎㅎ Hyperledger Fabric에서 이렇식으로 '시스템 chaincode' 건드리다보면~ 타 peer들 과의 consensus 결함으로, 결과적으로 원치않은 'ledger fork'가 날 수 도 있겠죠? ㅎㄷㄷ
- chaincode으로 개발된 smart-contract는 (blockchain-network의 organization 동의하에~) '비지니스 rule'을 정하는것 이라고 볼 수 있지만, chaincode로는 비지니스와 관련없는 시스템으로써의 low-level 프로그래밍도 할 수 있습니다. 이런 '시스템 chaincode' 종류와 그 약어도 한번 알아두면 좋겠죠?
-끝-
'hyperledger > fabDoc.Key Concepts' 카테고리의 다른 글
10) The Ordering Service (1) | 2019.04.10 |
---|---|
9) Ledger (0) | 2019.04.10 |
7) Peers (0) | 2019.04.10 |
6) Membership (0) | 2019.04.10 |
5) Identity (0) | 2019.04.10 |