일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 백준 1464
- 비트마스킹
- 패스트캠퍼스
- 최장길이바이토닉수열
- 구현
- boj 1464
- 뒤집기 3
- bfs
- Lis
- 백준 뒤집기 3
- 분할정복
- DP
- 2493 백준
- union find
- 그래프 이론
- 1939백준
- disjoint set
- 서로소 집합
- 그래프탐색
- 브루트포스
- parametric search
- 결정 문제
- 최장증가수열
- 이분탐색
- 결정문제
- 깊이 우선 탐색
- 그래프이론
- 재귀
- 이분 탐색
- 그래프 탐색
- Today
- Total
알고리즘 문제풀이
Hyperledger Fabric Chaincode 동작 과정 본문
Hyperledger Fabric 에 Transaction을 발생시키기 위해 Chaincode를 이용한다.
Chaincode는 Go언어와 Java등의 언어로 작성이 가능한데, 앞으로 포스팅하는 하이퍼레저 패브릭 글들은 Go언어를 기준으로 설명할 것이다.
Chaincode 구현 부분
체인코드를 작성할 때 필수적으로 구현해야하는 Chaincode Interface 는 다음과 같은 형태로 설정한다.
체인코드를 작성할 때 필수적으로 구현해야하는 함수는 크게 3가지가 있다.
- main : Register-list의 역할 수행 ( 너는 ~~기능을 하는 체인코드를 등록했고, 사용할 수 있어 )
- Init : 체인코드의 Instantiate/upgrade 담당
- Invoke : 체인코드가 호출되었을 때 호출할 함수를 분기하는 역할을 함
3개의 함수의 원형은 다음과 같다.
func main(){
// 체인코드를 시작한다.
err := shim.Start(new(SmartContract))
if err != nil{
fmt.Printf("Error Starting Chaincode: %s", err)
}
}
// Init is called during chaincode instantiation to initialize any data.
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {
}
// Invoke is called per transaction on the chaincode. Each transaction is
// either a 'get' or a 'set' on the asset created by Init function. The 'set'
// method may create a new asset by specifying a new key-value pair.
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
}
그 외에 구현할 체인코드의 Interface는 기본적으로 다음과 같이 정의해주면 된다.
( 모든 체인코드에서 chaincode Interface는 구현되어야 한다 )
( main 함수에서 Start함수를 통해서 컨테이너 내부의 chaincode를 시작하기 위해 사용한다. )
-> 이 과정은 Instantiation 때 일어난다.
type SmartContract struct{
}
Chaincode Interface는 main 함수 내부에서 다음과 같이 호출된다.
func main(){
err := shim.Start(new(SmartContract))
if err != nil{
// 에러 처리 내용
}
}
Chaincode 실행 과정
Chaincode Installation
Chaincode도 도커에 올라가는 컨테이너 중 하나이고 Peer 노드에 설치되므로서 해당 피어가 특정 Transaction을 발생 시키게 만들 수 있다.
그러므로 Fabric Client or Tools 를 통해서 피어 컨테이너에 Chaincode를 설치하는 과정이 우선시 되어야한다.
이 과정은 docker에 cli 컨테이너를 통해서 원하는 컨테이너에 접근한 후 peer의 chaincode명령어를 통해서 설치할 수 있다.
peer chaincode install -n "체인코드 이름" -v "버전" -p "체인코드의 Path"
체인코드의 Path는 docker-compose 상에서 마운트한 체인코드의 경로를 지정해주면 된다.
즉, 로컬 환경에서 GoPath의 경로가 매핑되어있는 컨테이너의 경로를 지정한다.
* 참고로, 이 과정은 Chaincode 와 관련된 Binary 파일을 피어 컨테이너 상에 올리는 것이다. 오해가 없길!!
Chaincode Instantiation
이제 설치된 Chaincode Binary 파일을 통해서 체인코드를 인스턴스화 or 초기화 해서 도커 컨테이너를 생성할 차례이다.
[ 추가 예정 ]