⭐ 하이퍼레저 패브릭 1.4 ver 기준

package main

 import (
	 "bytes"
	 "encoding/json" // Marshal 사용
	 "fmt"
	 "strconv"

	 "github.com/hyperledger/fabric/core/chaincode/shim"
	 sc "github.com/hyperledger/fabric/protos/peer"
 )

shim & peer 설치 라이브러리 인터페이스

  • shim 라이브러리에 내장된 함수

1. GetState( )
👉 원장의 데이터를 읽어올때 사용하는 함수

2. PutState( )
👉 원장의 데이터를 집어넣을때 사용하는 함수

3. GetFunctionAndParameters( )
👉 트랜잭션이 들어왔을때 트랜잭션 내용에 대해서
스마트컨트랙트의 이름과 스마트컨트랙트를 동작시키는데
필요한 파라미터들을 잘라주는 함수

	function, args := stub.GetFunctionAndParameters()

👉 Func & Para

  1. 들어온 데이터를 스마트컨트랙트 함수 이름

  2. 스마트컨트랙트가 동작하기 위한 파라미터들이 배열형식으로 들어온다

  3. 함수 이름과 파라미터를 잘라서 사용할수 있도록 처리


Json 형식으로 데이터를 받는 이유

  • 사람이 읽기가 편하다 (적당한 들여쓰기와 데이터시작 시점의 레벨)

  • 전송하는 데이터가 바이트 형식이기 때문에 인터넷(네트워크)을 통한 데이터 전달이 가능하다 (데이터 저장용)


Init 함수

 func (s *SmartContract) Init(APIstub shim.ChaincodeStubInterface) sc.Response {
	 return shim.Success(nil)
 }

shimpeer 를 불러와서 체인코드를 작성한다면
InitInvoke 를 필수로 써줘야한다

  1. 개발자가 체인코드를 작성하면 관리자에게 보내준다

  2. 관리자는 블록체인(패브릭)에 자신의 peer 에게 체인코드를 설치 (copy)

  3. 패브릭 네트워크에 체인코드를 활성화 시킨다 (배포)

  4. 체인코드를 배포하게되면

  5. peer 는 체인코드 컨테이너를 생성

  6. 해당 체인코드를 체인코드 컨테이너에 보내고 컴파일

  7. 그럼 트랜잭션을 받을 준비한다

  8. 체인코드가 활성화 된 후에 제일먼저 실행되는게 Init 함수다

  9. shim.Success(nil) 👉 체인코드를 배포를 시킨 관리자에게

  10. 관리자에 요청한 체인코드의 작업이 성공적으로 끝났다는 뜻

  11. 배포를 했을때 문제가 있다면 Init 함수가 실행되지 않음


Invoke 함수

func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
  1. 체인코드 배포가 끝나고 어플, 웹서버가 동작을하게 되면

  2. 사용자가 자신의 단말기(컴퓨터, 핸드폰, IOT 등)로 인터넷을 통해 트랜잭션을 일으킬때

  3. 트랜잭션 내용이 패브릭 네트워크내에 peer 에게 전달

  4. peer 는 트랜잭션을 받아서

  5. 자신이 보유하고 있는 체인코드 컨테이너쪽에 그 트랜잭션을 보낸다

  6. 그리고 시뮬레이션을 돌림

  7. 그때 호출되는게 Invoke 함수이다

  8. 사용자가 블록체인에 트랜잭션을 일으켰을때

  9. 데이터를 써 넣는다거나 / 읽어오거나 / 요청하거나 / 데이터를 저장할때

  10. 반드시 호출되는게 Invoke 함수이다

  11. Invoke 함수가 호출되어 동작하게되면 peer는 트랜잭션을 받은것이다


참고 코드