728x90
반응형
목표
- fabric-samples 이용
- go chain code 등록
- 원장의 값 가져오기
실습
1. fabric-samples 설치
curl -sSL https://bit.ly/2ysbOFE | bash -s
2. 네트워크 실행
샘플코드 설치가 끝나면 fabric-samples/test-network 폴더로 이동합니다.
cd fabric-samples/test-network
3. 채널 생성
- genesis block이 생성됩니다.
./network.sh createChannel
4. 원장 초기화
- 체인코드가 basic.tar.gz로 압축되고, 피어에 설치됩니다. (피어에서 체인코드는 압축파일로 설치진행함)
./network.sh deployCC -cci initLedger
- 체인코드 내용 확인
초기화 함수, 조회 함수
....
// InitLedger adds a base set of assets to the ledger
func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) error {
assets := []Asset{
{ID: "asset1", Color: "blue", Size: 5, Owner: "Tomoko", AppraisedValue: 300},
{ID: "asset2", Color: "red", Size: 5, Owner: "Brad", AppraisedValue: 400},
{ID: "asset3", Color: "green", Size: 10, Owner: "Jin Soo", AppraisedValue: 500},
{ID: "asset4", Color: "yellow", Size: 10, Owner: "Max", AppraisedValue: 600},
{ID: "asset5", Color: "black", Size: 15, Owner: "Adriana", AppraisedValue: 700},
{ID: "asset6", Color: "white", Size: 15, Owner: "Michel", AppraisedValue: 800},
}
for _, asset := range assets {
assetJSON, err := json.Marshal(asset)
if err != nil {
return err
}
err = ctx.GetStub().PutState(asset.ID, assetJSON)
if err != nil {
return fmt.Errorf("failed to put to world state. %v", err)
}
}
return nil
}
....
// GetAllAssets returns all assets found in world state
func (s *SmartContract) GetAllAssets(ctx contractapi.TransactionContextInterface) ([]*Asset, error) {
// range query with empty string for startKey and endKey does an
// open-ended query of all assets in the chaincode namespace.
resultsIterator, err := ctx.GetStub().GetStateByRange("", "")
if err != nil {
return nil, err
}
defer resultsIterator.Close()
var assets []*Asset
for resultsIterator.HasNext() {
queryResponse, err := resultsIterator.Next()
if err != nil {
return nil, err
}
var asset Asset
err = json.Unmarshal(queryResponse.Value, &asset)
if err != nil {
return nil, err
}
assets = append(assets, &asset)
}
return assets, nil
}
5. 원장 조회
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
에러 해결
1. 원장 조회
peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
=> ERRO [main] InitCmd -> Fatal error when initializing core config : error when reading core config file: Config File "core" Not Found in...
해결방법 : 환경설정 추가
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
반응형