[BlockChain/Hyperledger Fabric] 스마트 계약을 채널에 배포하기 (2)

yujeongkwon·2023년 8월 9일
0

BlockChain

목록 보기
7/10

체인코드 패키지 설치하기

  • 자산 전송(기본) 스마트 계약을 패키징한 후 트랜잭션을 승인할 모든 피어에 체인코드를 설치

  • Org1과 Org2 모두의 보증을 요구하도록 보증 정책을 설정할 것이기 때문에 두 조직에서 운영하는 피어에 체인코드를 설치해야 함.

    peer0.org1.example.com
    peer0.org2.example.com

  • 먼저 Org1 피어에 체인코드를 설치

    • Org1 관리 사용자로 peer CLI를 사용하기 위해 다음의 환경 변수를 설정
    • = CORE_PEER_ADDRESS 는 Org1 피어를 가리키도록 설정 :peer0.org1.example.com.
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ 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
      export CORE_PEER_ADDRESS=localhost:7051
      
  • peer lifecycle chaincode install 명령을 실행하여 피어에 체인코드를 설치

    • 명령이 성공하면 피어는 패키지 식별자를 생성하고 반환
    • 이 패키지 ID는 다음 단계에서 체인코드를 승인하는 데 사용
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode install basic.tar.gz
      2023-08-09 14:26:45.445 KST 0001 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Installed remotely: response:<status:200 payload:"\nJbasic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578\022\tbasic_1.0" > 
      2023-08-09 14:26:45.445 KST 0002 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Chaincode code package identifier: basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578
      
  • 이제 Org2 피어에 체인코드를 설치

    • 다음 환경 변수를 설정하여 Org2 관리자로 작동하고 Org2 피어를 대상으로 지정 : peer0.org2.example.com.
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ export CORE_PEER_LOCALMSPID="Org2MSP"
      export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
      export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
      export CORE_PEER_ADDRESS=localhost:9051
      
  • 다음 명령을 실행하여 체인코드를 설치

    yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode install basic.tar.gz
    2023-08-09 14:34:37.923 KST 0001 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Installed remotely: response:<status:200 payload:"\nJbasic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578\022\tbasic_1.0" > 
    2023-08-09 14:34:37.923 KST 0002 INFO [cli.lifecycle.chaincode] submitInstallProposal -> Chaincode code package identifier: basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578
    
  • 체인코드는 체인코드가 설치될 때 피어에 의해 빌드 됨.

  • 설치 명령은 스마트 계약 코드에 문제가 있는 경우 체인코드에서 빌드 오류를 반환


체인코드 정의 승인

  • 체인코드 패키지를 설치한 후 조직에 대한 체인코드 정의를 승인해야 함.

    • 정의에는 이름, 버전 및 체인코드 보증 정책과 같은 체인코드 거버넌스의 중요한 매개변수가 포함
  • 체인코드를 배포하기 전에 승인해야 하는 채널 구성원 집합은 /Channel/Application/LifecycleEndorsement 정책을 따른다.

  • 기본적으로 이 정책에서는 대부분의 채널 구성원이 체인코드를 채널에서 사용하기 전에 승인해야 함.

    • 우리는 채널에 두 개의 조직만 있기에 2의 대부분은 2이므로 자산 전송(기본)의 체인코드 정의를 Org1 및 Org2로 승인해야 함.
  • 조직이 피어에 체인코드를 설치한 경우 조직에서 승인한 체인코드 정의에 packageID를 포함해야 함.

    • 패키지 ID
      - 체인코드 레이블과 체인코드 바이너리의 해시 조합
      - 모든 피어는 동일한 패키지 ID를 생성
      - 피어에 설치된 체인코드를 승인된 체인코드 정의와 연결하는 데 사용
      - 조직이 체인코드를 사용하여 트랜잭션을 보증할 수 있도록 함
      - peer lifecycle chaincode queryinstalled 명령 : 체인코드의 패키지 ID 찾기
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode queryinstalled
      Installed chaincodes on peer:
      Package ID: basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578, Label: basic_1.0
      
  • 체인코드를 승인할 때 패키지 ID를 사용할 것이므로 계속해서 환경 변수로 저장할 거임.

  • peer lifecycle chaincode queryinstalled 에서 받은 패키지 ID 붙여넣기

    • 참고: 패키지 ID는 모든 사용자에게 동일하지 않으므로 이전 단계의 명령 창에서 반환된 패키지 ID를 사용하기.
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ export CC_PACKAGE_ID=basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578
      
  • Org2 관리자로써 peer CLI를 동작하도록 환경 변수가 설정되어 있기 때문에, 자산 전송(기본)의 체인코드 정의를 Org2로 승인할 수 있음.

  • 체인코드는 조직 수준에서 승인되므로 명령은 하나의 피어만 대상으로 하면 됨

    • 승인은 한 피어가 조직 내의 다른 동료에게 배포함.
  • peer lifecycle chaincode approveformyorg 명령을 사용하여 체인코드 정의를 승인

    • --package-id 플래그 : 체인코드 정의에 패키지 식별자를 포함
    • --sequence 매개변수 : 체인코드가 정의되거나 업데이트된 횟수를 추적하는 정수
      • 체인코드가 처음으로 채널에 배포되기 때문에 시퀀스 번호는 1
      • asset-transfer(기본) 체인코드가 업그레이드되면 시퀀스 번호가 2로 증가
    • --init-required 플래그 : Fabric Chaincode Shim API를 통해 제공되는 저수준 API를 사용하는 경우, 해당 플래그로 체인코드를 초기화하기 위해 Init 함수의 실행을 요청가능
      • 원장과 상호 작용하기 위해 체인 코드의 다른 기능을 사용하기 전, 체인코드의 첫 번째 호출은 Init 함수를 대상으로 하고 --isInit 플래그를 포함해야 한다.
  • --signature-policy 또는 --channel-config-policy 인수를 approvalformyorg 명령에 제공하여 체인코드 승인 정책을 지정했다.

  • 보증 정책은 서로 다른 채널 구성원에 속하는 피어가 주어진 체인코드에 대해 트랜잭션을 검증해야 하는 수를 지정

  • 우리는 여기서 정책을 설정하지 않았기 때문에 자산 이전(기본)의 정의는 트랜잭션이 제출될 때 참석한 채널 구성원의 대다수가 트랜잭션을 보증하도록 요구하는 기본 보증 정책을 사용

    • 이는 새로운 조직이 채널에서 추가되거나 제거되면 보증 정책이 더 많거나 적은 보증이 필요하도록 자동으로 업데이트 됨
  • 이 튜토리얼에서 기본 정책은 2개 중 2개가 필요하며 트랜잭션은 Org1 및 Org2의 동료가 승인해야 함.

  • 위와 달리 사용자 지정 보증 정책을 지정법

    yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
    2023-08-09 14:55:23.473 KST 0001 INFO [chaincodeCmd] ClientWait -> txid [31dfb0e43cf3b57cb25d67ad2d445a438add1f34ce5804d03ac108a2dc2705ea] committed with status (VALID) at localhost:9051
    
  • 관리자 역할이 있는 ID로 체인코드 정의를 승인해야 함.

    • CORE_PEER_MSPCONFIGPATH 변수는 관리자 ID가 포함된 MSP 폴더를 가리켜야 함.
    • 클라이언트 사용자와 함께 체인코드 정의를 승인할 수 없음
    • 승인은 ordering service에 제출해야 함.
      • ordering service: 관리자 서명의 유효성을 검증한 다음 동료에게 승인을 분배
  • 여전히 체인코드 정의를 Org1로 승인 -> Org1 관리자로 작동하도록 다음 환경 변수를 설정합

    yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ export CORE_PEER_LOCALMSPID="Org1MSP"
    export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
    export CORE_PEER_ADDRESS=localhost:7051
    
  • 이제 체인코드 정의를 Org1로 승인 가능

    yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    
  • 결과
    2023-08-09 18:38:08.194 KST 0001 INFO [chaincodeCmd] ClientWait -> txid [fe9259acbf1b9bd3bfed9f3f2828698bea2b603063a110d5a8db61c742904a6a] committed with status (VALID) at localhost:7051

  • '대부분'의 조직이 체인코드 정의(기본 정책 포함)를 승인하고, '모든' 조직은 피어에서 체인코드를 시작하기 위해 체인코드 정의를 승인해야 함.

  • 채널 구성원이 체인코드를 승인하기 전에, 정의를 커밋하면 조직에서 트랜잭션을 보증할 수 없음.
    => 모든 채널 구성원이 체인코드 정의를 커밋하기 전에 체인코드를 승인하는 것을 권고


체인코드 정의를 채널에 커밋하기

  • 충분한 수의 조직이 체인코드 정의를 승인한 후, 한 조직이 체인코드 정의를 채널에 커밋O

  • 대다수의 채널 구성원이 정의를 승인한 경우, 커밋 트랜잭션이 성공하고 체인코드 정의에서 동의한 매개변수가 채널에서 구현됨.

  • 피어 수명 주기 체인코드 checkcommitreadiness 명령 : 채널 구성원이 동일한 체인코드 정의를 승인했는지 확인

    • 여기서 사용하는 플래그는 조직의 체인코드를 승인하는 데 사용되는 플래그와 동일
    • but --package-id 플래그를 포함할 필요는x
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --output json
      
    • checkcommitreadiness명령 출력:
      {
          "Approvals": {
              "Org1MSP": true,
              "Org2MSP": true
          }
      }
  • peer lifecycle chaincode commit 명령을 사용하여 체인코드 정의를 채널에 커밋

    • 커밋 명령도 조직 관리자가 제출
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name basic --version 1.0 --sequence 1 --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
    • 결과
      2023-08-09 18:58:19.503 KST 0001 INFO [chaincodeCmd] ClientWait -> txid [3d3b09d80712cdc4a1f128eb5ef800b19f28e72e015e1b6fff7240115173ac5c] committed with status (VALID) at localhost:7051
      2023-08-09 18:58:19.518 KST 0002 INFO [chaincodeCmd] ClientWait -> txid [3d3b09d80712cdc4a1f128eb5ef800b19f28e72e015e1b6fff7240115173ac5c] committed with status (VALID) at localhost:9051
      
  • --peerAddresses 플래그 : Org1에서 peer0.org1.example.com, Org2에서peer0.org2.example.com. 타겟팅

    • commit 트랜잭션은 피어를 운영하는 조직에서 승인한 체인코드 정의를 쿼리하기 위해 채널에 가입한 피어에게 제출됨.
      • 체인코드 배포 정책을 충족하기 위해 충분한 수의 조직에서 피어를 대상으로 지정
      • 승인은 각 조직 내에서 배포되기 때문에 채널 구성원에 속한 모든 피어를 대상
  • 채널 멤버의 체인코드 정의 보증은 주문 서비스에 제출되어 블록에 추가되고 채널에 배포
    -> 채널의 피어는 충분한 수의 조직이 체인코드 정의를 승인했는지 확인

    • peer lifecycle chaincode commit 명령은 응답을 반환하기 전에 피어의 유효성 검사를 기다림.
    • peer lifecycle chaincode querycommitted : 체인코드 정의가 채널에 커밋되었는지 확인
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer lifecycle chaincode querycommitted --channelID mychannel --name basic --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem"
      
    • 성공적인 결과 : querycommitted 명령은 체인코드 정의의 시퀀스 및 버전을 반환
<pre>Committed chaincode definition for chaincode &apos;basic&apos; on channel &apos;mychannel&apos;:
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]
</pre>

체인코드 호출

  • 체인코드 정의가 채널에 커밋되면 체인코드가 설치된 채널에 가입된 피어에서 체인코드가 시작
    • asset-transfer(기본) 체인코드는 이제 클라이언트 애플리케이션에서 호출할 준비가 됨.
  • 다음 명령을 사용하여 원장에 초기 자산 세트를 생성
    • invoke 명령은 체인코드 보증 정책을 충족하기 위해 충분한 수의 피어를 대상으로 함.
    • (CLI는 Fabric Gateway 피어에 액세스하지 않으므로 각 승인 피어를 지정)
      yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}'
      
  • 명령 성공 출력
    2023-08-09 20:01:11.398 KST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 
    
  • 쿼리 함수를 사용하여 체인코드에 의해 생성된 자동차 세트 read
    yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'
    
  • 결과
[{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}]

스마트 계약 업그레이드

  • 동일한 Fabric 체인코드 수명 주기 프로세스를 사용하여 이미 채널에 배포된 체인코드를 업그레이드 가능
  • 체인코드 업그레이드
    • 채널 구성원은 새 체인코드 패키지를 설치 -> 새 패키지 ID, 새 체인코드 버전, 1씩 증가하는 시퀀스 번호로 체인코드 정의 승인 -> 채널에 정의가 커밋 된 후 새로운 체인코드 사용
  • 채널 구성원은 업그레이드 프로세스를 사용하여 새 체인코드 패키지를 설치하지 않고도 체인코드 보증 정책을 변경 가능
  • 방금 배포한 asset-transfer (basic) 체인코드를 Org1과 Org2가 다른 언어로(go언어에서 JavaScript로 변경) 작성된 체인코드 버전을 설치하려고 한다고 가정
    • Fabric 체인코드 수명 주기를 사용하여 체인코드 버전을 업데이트하고 채널에서 활성화되기 전에 두 조직이 새 체인코드를 설치했는지 확인
  • 자산 전송(기본) 체인코드의 JavaScript 버전을 패키징
    • test-network에 체인코드 종속성 설치
    • JavScript 체인코드 패키징, 환경변수 설정
    • Org1 관리자로서 peer 명령어 실행
    • Org1 peer에 새 채인코드 패키지 설치
    • peer 쿼리해서(queryinstalled 명령으로) 새 패키지 ID 찾고
    • 찾은 ID로 새 환경 변수로 저장
    • Org1에서 새 체인코드 정의 승인
      • 이때 시퀀스 번호를 1에서 2로 증가
    • 체인코드 패키지를 설치하고 체인코드를 업그레이드하기 위해 체인코드 정의를 Org2로 승인
    • Org2 peer에 새 체인코드 패키지 설치
    • Org2에 대한 새 체인코드 정의 승인
    • 체인코드는 새 체인코드 정의가 커밋된 후 채널에서 업그레이드
      • 업글 전에는 이전 체인코드가 사용됨
    • init 함수 호출
      자세한 과정 생략 더 알고 싶으면 맨 밑 출처 확인

정리

  • 체인코드 사용을 마치면 다음 명령을 사용하여 Logspout 도구를 제거 가능.

docker stop logspout
docker rm logspout

  • test-network에서 아래 명령을 실행하여 테스트 네트워크를 종료

./network.sh down


신경도 안쓴 로그 확인

yujeong@yujeong-VirtualBox:~$ cd  go/src
yujeong@yujeong-VirtualBox:~/go/src$ ^C fabric-samples/test-network
yujeong@yujeong-VirtualBox:~/go/src$ cd fabric-samples/test-network
yujeong@yujeong-VirtualBox:~/go/src/fabric-samples/test-network$ ./monitordocker.sh fabric_test
Starting monitoring on all containers on the network fabric_test
Unable to find image 'gliderlabs/logspout:latest' locally
latest: Pulling from gliderlabs/logspout
8572bc8fb8a3: Pull complete 
bd801371a862: Pull complete 
58100c398b34: Pull complete 
Digest: sha256:2d81c026e11ac67f7887029dbfd7d36ee986d946066b45c1dabd966278eb5681
Status: Downloaded newer image for gliderlabs/logspout:latest
a6139444d7dc3604282693a4fbd4d64f320e9bb27d02bcc5a10e66a3cc2b05d3
peer0.org1.example.com|2023-08-09 05:25:37.491 UTC 004e INFO [chaincode.externalbuilder.ccaas_builder] waitForExit -> ::Detect command=detect
peer0.org1.example.com|2023-08-09 05:25:37.492 UTC 004f INFO [chaincode.externalbuilder.ccaas_builder] waitForExit -> ::Error: chaincode type not supported: golang command=detect
        cranky_leavitt|go: downloading github.com/hyperledger/fabric-contract-api-go v1.2.1
        cranky_leavitt|go: downloading github.com/hyperledger/fabric-chaincode-go v0.0.0-20230228194215-b84622ba6a7a
        cranky_leavitt|go: downloading github.com/hyperledger/fabric-protos-go v0.3.0
        cranky_leavitt|go: downloading github.com/golang/protobuf v1.5.2
        cranky_leavitt|go: downloading google.golang.org/grpc v1.53.0
        cranky_leavitt|go: downloading github.com/xeipuuv/gojsonschema v1.2.0
        cranky_leavitt|go: downloading github.com/go-openapi/spec v0.20.8
        cranky_leavitt|go: downloading github.com/gobuffalo/packr v1.30.1
        cranky_leavitt|go: downloading google.golang.org/protobuf v1.28.1
        cranky_leavitt|go: downloading github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415
        cranky_leavitt|go: downloading github.com/go-openapi/jsonpointer v0.19.5
        cranky_leavitt|go: downloading github.com/go-openapi/jsonreference v0.20.0
        cranky_leavitt|go: downloading github.com/go-openapi/swag v0.21.1
        cranky_leavitt|go: downloading github.com/gobuffalo/envy v1.10.1
        cranky_leavitt|go: downloading github.com/gobuffalo/packd v1.0.1
        cranky_leavitt|go: downloading golang.org/x/net v0.7.0
        cranky_leavitt|go: downloading google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f
        cranky_leavitt|go: downloading github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
        cranky_leavitt|go: downloading github.com/mailru/easyjson v0.7.7
        cranky_leavitt|go: downloading gopkg.in/yaml.v2 v2.4.0
        cranky_leavitt|go: downloading github.com/joho/godotenv v1.4.0
        cranky_leavitt|go: downloading github.com/rogpeppe/go-internal v1.8.1
        cranky_leavitt|go: downloading golang.org/x/sys v0.5.0
        cranky_leavitt|go: downloading github.com/josharian/intern v1.0.0
        cranky_leavitt|go: downloading golang.org/x/text v0.7.0
        cranky_leavitt|internal/goarch
        cranky_leavitt|internal/unsafeheader
        cranky_leavitt|internal/abi
        cranky_leavitt|internal/cpu
        cranky_leavitt|internal/bytealg
        cranky_leavitt|internal/coverage/rtcov
        cranky_leavitt|internal/goexperiment
        cranky_leavitt|internal/goos
        cranky_leavitt|runtime/internal/atomic
        cranky_leavitt|runtime/internal/math
        cranky_leavitt|runtime/internal/sys
        cranky_leavitt|runtime/internal/syscall
        cranky_leavitt|runtime
        cranky_leavitt|internal/reflectlite
        cranky_leavitt|errors
        cranky_leavitt|internal/race
        cranky_leavitt|sync/atomic
        cranky_leavitt|sync
        cranky_leavitt|io
        cranky_leavitt|unicode
        cranky_leavitt|unicode/utf8
        cranky_leavitt|bytes
        cranky_leavitt|encoding
        cranky_leavitt|math/bits
        cranky_leavitt|math
        cranky_leavitt|internal/itoa
        cranky_leavitt|strconv
        cranky_leavitt|reflect
        cranky_leavitt|encoding/binary
        cranky_leavitt|encoding/base64
        cranky_leavitt|sort
        cranky_leavitt|internal/fmtsort
        cranky_leavitt|internal/oserror
        cranky_leavitt|syscall
        cranky_leavitt|internal/syscall/unix
        cranky_leavitt|time
        cranky_leavitt|internal/poll
        cranky_leavitt|internal/safefilepath
        cranky_leavitt|internal/syscall/execenv
        cranky_leavitt|internal/testlog
        cranky_leavitt|path
        cranky_leavitt|io/fs
        cranky_leavitt|os
        cranky_leavitt|fmt
        cranky_leavitt|strings
        cranky_leavitt|unicode/utf16
        cranky_leavitt|encoding/json
        cranky_leavitt|hash
        cranky_leavitt|crypto
        cranky_leavitt|crypto/internal/alias
        cranky_leavitt|crypto/subtle
        cranky_leavitt|crypto/cipher
        cranky_leavitt|crypto/internal/boring/sig
        cranky_leavitt|crypto/internal/boring
        cranky_leavitt|crypto/aes
        cranky_leavitt|crypto/des
        cranky_leavitt|crypto/internal/randutil
        cranky_leavitt|internal/godebug
        cranky_leavitt|math/rand
        cranky_leavitt|math/big
        cranky_leavitt|crypto/dsa
        cranky_leavitt|crypto/internal/edwards25519/field
        cranky_leavitt|crypto/internal/nistec/fiat
        cranky_leavitt|embed
        cranky_leavitt|crypto/internal/nistec
        cranky_leavitt|crypto/ecdh
        cranky_leavitt|crypto/elliptic
        cranky_leavitt|crypto/internal/bigmod
        cranky_leavitt|crypto/internal/boring/bbig
        cranky_leavitt|crypto/sha512
        cranky_leavitt|encoding/asn1
        cranky_leavitt|vendor/golang.org/x/crypto/cryptobyte/asn1
        cranky_leavitt|vendor/golang.org/x/crypto/cryptobyte
        cranky_leavitt|crypto/ecdsa
        cranky_leavitt|crypto/internal/edwards25519
        cranky_leavitt|crypto/rand
        cranky_leavitt|crypto/ed25519
        cranky_leavitt|crypto/md5
        cranky_leavitt|crypto/rsa
        cranky_leavitt|crypto/sha1
        cranky_leavitt|crypto/sha256
        cranky_leavitt|encoding/hex
        cranky_leavitt|crypto/x509/pkix
        cranky_leavitt|encoding/pem
        cranky_leavitt|context
        cranky_leavitt|vendor/golang.org/x/net/dns/dnsmessage
        cranky_leavitt|internal/nettrace
        cranky_leavitt|internal/singleflight
        cranky_leavitt|internal/intern
        cranky_leavitt|net/netip
        cranky_leavitt|runtime/cgo
        cranky_leavitt|net
        cranky_leavitt|net/url
        cranky_leavitt|path/filepath
        cranky_leavitt|crypto/x509
        cranky_leavitt|bufio
        cranky_leavitt|compress/flate
        cranky_leavitt|hash/crc32
        cranky_leavitt|compress/gzip
        cranky_leavitt|hash/fnv
        cranky_leavitt|google.golang.org/protobuf/internal/detrand
        cranky_leavitt|google.golang.org/protobuf/internal/errors
        cranky_leavitt|google.golang.org/protobuf/encoding/protowire
        cranky_leavitt|google.golang.org/protobuf/internal/pragma
        cranky_leavitt|google.golang.org/protobuf/reflect/protoreflect
        cranky_leavitt|google.golang.org/protobuf/internal/encoding/messageset
        cranky_leavitt|google.golang.org/protobuf/internal/flags
        cranky_leavitt|go/token
        cranky_leavitt|google.golang.org/protobuf/internal/strs
        cranky_leavitt|google.golang.org/protobuf/internal/encoding/text
        cranky_leavitt|google.golang.org/protobuf/internal/genid
        cranky_leavitt|google.golang.org/protobuf/internal/order
        cranky_leavitt|google.golang.org/protobuf/internal/set
        cranky_leavitt|google.golang.org/protobuf/reflect/protoregistry
        cranky_leavitt|google.golang.org/protobuf/runtime/protoiface
        cranky_leavitt|google.golang.org/protobuf/proto
        cranky_leavitt|google.golang.org/protobuf/encoding/prototext
        cranky_leavitt|google.golang.org/protobuf/internal/encoding/defval
        cranky_leavitt|google.golang.org/protobuf/internal/descfmt
        cranky_leavitt|google.golang.org/protobuf/internal/descopts
        cranky_leavitt|google.golang.org/protobuf/internal/filedesc
        cranky_leavitt|google.golang.org/protobuf/internal/encoding/tag
        cranky_leavitt|io/ioutil
        cranky_leavitt|google.golang.org/protobuf/internal/impl
        cranky_leavitt|google.golang.org/protobuf/internal/filetype
        cranky_leavitt|google.golang.org/protobuf/internal/version
        cranky_leavitt|google.golang.org/protobuf/runtime/protoimpl
        cranky_leavitt|google.golang.org/protobuf/types/descriptorpb
        cranky_leavitt|google.golang.org/protobuf/reflect/protodesc
        cranky_leavitt|github.com/golang/protobuf/proto
        cranky_leavitt|github.com/hyperledger/fabric-protos-go/msp
        cranky_leavitt|github.com/hyperledger/fabric-chaincode-go/pkg/attrmgr
        cranky_leavitt|github.com/hyperledger/fabric-chaincode-go/pkg/cid
        cranky_leavitt|container/list
        cranky_leavitt|crypto/hmac
        cranky_leavitt|crypto/rc4
        cranky_leavitt|vendor/golang.org/x/crypto/internal/alias
        cranky_leavitt|vendor/golang.org/x/crypto/chacha20
        cranky_leavitt|vendor/golang.org/x/crypto/internal/poly1305
        cranky_leavitt|vendor/golang.org/x/sys/cpu
        cranky_leavitt|vendor/golang.org/x/crypto/chacha20poly1305
        cranky_leavitt|vendor/golang.org/x/crypto/hkdf
        cranky_leavitt|crypto/tls
        cranky_leavitt|flag
        cranky_leavitt|google.golang.org/protobuf/types/known/timestamppb
        cranky_leavitt|github.com/golang/protobuf/ptypes/timestamp
        cranky_leavitt|github.com/hyperledger/fabric-protos-go/common
        cranky_leavitt|github.com/hyperledger/fabric-protos-go/ledger/rwset
        cranky_leavitt|log
        cranky_leavitt|golang.org/x/net/internal/timeseries
        cranky_leavitt|html
        cranky_leavitt|text/template/parse
        cranky_leavitt|text/template
        cranky_leavitt|html/template
        cranky_leavitt|vendor/golang.org/x/text/transform
        cranky_leavitt|vendor/golang.org/x/text/unicode/bidi
        cranky_leavitt|vendor/golang.org/x/text/secure/bidirule
        cranky_leavitt|vendor/golang.org/x/text/unicode/norm
        cranky_leavitt|vendor/golang.org/x/net/idna
        cranky_leavitt|net/textproto
        cranky_leavitt|vendor/golang.org/x/net/http/httpguts
        cranky_leavitt|vendor/golang.org/x/net/http/httpproxy
        cranky_leavitt|vendor/golang.org/x/net/http2/hpack
        cranky_leavitt|mime
        cranky_leavitt|mime/quotedprintable
        cranky_leavitt|mime/multipart
        cranky_leavitt|net/http/httptrace
        cranky_leavitt|net/http/internal
        cranky_leavitt|net/http/internal/ascii
        cranky_leavitt|net/http
        cranky_leavitt|text/tabwriter
        cranky_leavitt|golang.org/x/net/trace
        cranky_leavitt|google.golang.org/grpc/backoff
        cranky_leavitt|golang.org/x/sys/unix
        cranky_leavitt|google.golang.org/grpc/internal/grpclog
        cranky_leavitt|google.golang.org/grpc/grpclog
        cranky_leavitt|google.golang.org/grpc/connectivity
        cranky_leavitt|google.golang.org/grpc/attributes
        cranky_leavitt|google.golang.org/grpc/internal/credentials
        cranky_leavitt|google.golang.org/grpc/credentials
        cranky_leavitt|google.golang.org/grpc/internal/channelz
        cranky_leavitt|google.golang.org/grpc/channelz
        cranky_leavitt|regexp/syntax
        cranky_leavitt|regexp
        cranky_leavitt|google.golang.org/protobuf/internal/encoding/json
        cranky_leavitt|google.golang.org/protobuf/encoding/protojson
        cranky_leavitt|github.com/golang/protobuf/jsonpb
        cranky_leavitt|google.golang.org/grpc/internal/pretty
        cranky_leavitt|google.golang.org/grpc/serviceconfig
        cranky_leavitt|google.golang.org/grpc/resolver
        cranky_leavitt|google.golang.org/grpc/internal
        cranky_leavitt|google.golang.org/grpc/metadata
        cranky_leavitt|google.golang.org/grpc/balancer
        cranky_leavitt|google.golang.org/grpc/balancer/base
        cranky_leavitt|google.golang.org/grpc/internal/grpcrand
        cranky_leavitt|google.golang.org/grpc/balancer/roundrobin
        cranky_leavitt|google.golang.org/grpc/codes
        cranky_leavitt|google.golang.org/grpc/credentials/insecure
        cranky_leavitt|google.golang.org/grpc/internal/envconfig
        cranky_leavitt|google.golang.org/grpc/internal/grpcutil
        cranky_leavitt|google.golang.org/grpc/encoding
        cranky_leavitt|google.golang.org/grpc/encoding/proto
        cranky_leavitt|google.golang.org/grpc/internal/backoff
        cranky_leavitt|google.golang.org/grpc/internal/balancer/gracefulswitch
        cranky_leavitt|google.golang.org/grpc/internal/balancerload
        cranky_leavitt|google.golang.org/protobuf/types/known/anypb
        cranky_leavitt|github.com/golang/protobuf/ptypes/any
        cranky_leavitt|google.golang.org/protobuf/types/known/durationpb
        cranky_leavitt|github.com/golang/protobuf/ptypes/duration
        cranky_leavitt|github.com/golang/protobuf/ptypes
        cranky_leavitt|google.golang.org/grpc/binarylog/grpc_binarylog_v1
        cranky_leavitt|google.golang.org/genproto/googleapis/rpc/status
        cranky_leavitt|google.golang.org/grpc/internal/status
        cranky_leavitt|google.golang.org/grpc/status
        cranky_leavitt|google.golang.org/grpc/internal/binarylog
        cranky_leavitt|google.golang.org/grpc/internal/buffer
        cranky_leavitt|google.golang.org/grpc/internal/grpcsync
        cranky_leavitt|google.golang.org/grpc/internal/metadata
        cranky_leavitt|google.golang.org/grpc/internal/serviceconfig
        cranky_leavitt|google.golang.org/grpc/internal/resolver
        cranky_leavitt|google.golang.org/grpc/balancer/grpclb/state
        cranky_leavitt|google.golang.org/grpc/internal/resolver/dns
        cranky_leavitt|google.golang.org/grpc/internal/resolver/passthrough
        cranky_leavitt|google.golang.org/grpc/internal/transport/networktype
        cranky_leavitt|google.golang.org/grpc/internal/resolver/unix
        cranky_leavitt|golang.org/x/text/transform
        cranky_leavitt|golang.org/x/text/unicode/bidi
        cranky_leavitt|golang.org/x/text/secure/bidirule
        cranky_leavitt|golang.org/x/text/unicode/norm
        cranky_leavitt|golang.org/x/net/idna
        cranky_leavitt|golang.org/x/net/http/httpguts
        cranky_leavitt|golang.org/x/net/http2/hpack
        cranky_leavitt|golang.org/x/net/http2
        cranky_leavitt|google.golang.org/grpc/internal/syscall
        cranky_leavitt|google.golang.org/grpc/keepalive
        cranky_leavitt|google.golang.org/grpc/peer
        cranky_leavitt|google.golang.org/grpc/stats
        cranky_leavitt|google.golang.org/grpc/tap
        cranky_leavitt|net/http/httputil
        cranky_leavitt|google.golang.org/grpc/internal/transport
        cranky_leavitt|google.golang.org/grpc
        cranky_leavitt|google.golang.org/protobuf/types/known/emptypb
        cranky_leavitt|github.com/hyperledger/fabric-protos-go/peer
        cranky_leavitt|github.com/hyperledger/fabric-chaincode-go/shim/internal
        cranky_leavitt|github.com/hyperledger/fabric-protos-go/ledger/queryresult
        cranky_leavitt|github.com/hyperledger/fabric-chaincode-go/shim
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/contractapi/utils
        cranky_leavitt|internal/saferio
        cranky_leavitt|encoding/gob
        cranky_leavitt|github.com/josharian/intern
        cranky_leavitt|github.com/mailru/easyjson/jlexer
        cranky_leavitt|github.com/mailru/easyjson/buffer
        cranky_leavitt|github.com/mailru/easyjson/jwriter
        cranky_leavitt|gopkg.in/yaml.v2
        cranky_leavitt|github.com/go-openapi/swag
        cranky_leavitt|github.com/go-openapi/jsonpointer
        cranky_leavitt|github.com/go-openapi/jsonreference/internal
        cranky_leavitt|github.com/go-openapi/jsonreference
        cranky_leavitt|github.com/go-openapi/spec
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/internal/types
        cranky_leavitt|github.com/xeipuuv/gojsonpointer
        cranky_leavitt|github.com/xeipuuv/gojsonreference
        cranky_leavitt|net/mail
        cranky_leavitt|github.com/xeipuuv/gojsonschema
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/internal/utils
        cranky_leavitt|os/exec
        cranky_leavitt|github.com/joho/godotenv
        cranky_leavitt|github.com/rogpeppe/go-internal/semver
        cranky_leavitt|github.com/rogpeppe/go-internal/module
        cranky_leavitt|github.com/rogpeppe/go-internal/modfile
        cranky_leavitt|github.com/gobuffalo/envy
        cranky_leavitt|github.com/gobuffalo/packd/internal/takeon/github.com/markbates/errx
        cranky_leavitt|github.com/gobuffalo/packd
        cranky_leavitt|github.com/gobuffalo/packr
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/metadata
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/serializer
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/internal
        cranky_leavitt|github.com/hyperledger/fabric-contract-api-go/contractapi
        cranky_leavitt|github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode
        cranky_leavitt|github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go
        cranky_leavitt|# github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go
        cranky_leavitt|/usr/bin/ld: /tmp/go-link-1139198089/000004.o: in function `_cgo_cbcce81e6342_C2func_getaddrinfo':
        cranky_leavitt|/tmp/go-build/cgo-gcc-prolog:58: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
        cranky_leavitt|Done!
peer0.org1.example.com|2023-08-09 05:26:45.440 UTC 0050 INFO [lifecycle] InstallChaincode -> Successfully installed chaincode with package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578'
peer0.org1.example.com|2023-08-09 05:26:45.441 UTC 0051 INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 67985ms channel= txID=5f72ff16
peer0.org1.example.com|2023-08-09 05:26:45.441 UTC 0052 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:40758 grpc.code=OK grpc.call_duration=1m7.987343868s
peer0.org2.example.com|2023-08-09 05:33:12.788 UTC 0049 INFO [chaincode.externalbuilder.ccaas_builder] waitForExit -> ::Detect command=detect
peer0.org2.example.com|2023-08-09 05:33:12.788 UTC 004a INFO [chaincode.externalbuilder.ccaas_builder] waitForExit -> ::Error: chaincode type not supported: golang command=detect
      inspiring_diffie|go: downloading github.com/hyperledger/fabric-contract-api-go v1.2.1
      inspiring_diffie|go: downloading github.com/hyperledger/fabric-chaincode-go v0.0.0-20230228194215-b84622ba6a7a
      inspiring_diffie|go: downloading github.com/hyperledger/fabric-protos-go v0.3.0
      inspiring_diffie|go: downloading github.com/golang/protobuf v1.5.2
      inspiring_diffie|go: downloading google.golang.org/grpc v1.53.0
      inspiring_diffie|go: downloading github.com/xeipuuv/gojsonschema v1.2.0
      inspiring_diffie|go: downloading github.com/go-openapi/spec v0.20.8
      inspiring_diffie|go: downloading github.com/gobuffalo/packr v1.30.1
      inspiring_diffie|go: downloading google.golang.org/protobuf v1.28.1
      inspiring_diffie|go: downloading github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415
      inspiring_diffie|go: downloading github.com/go-openapi/jsonpointer v0.19.5
      inspiring_diffie|go: downloading github.com/go-openapi/jsonreference v0.20.0
      inspiring_diffie|go: downloading github.com/go-openapi/swag v0.21.1
      inspiring_diffie|go: downloading github.com/gobuffalo/envy v1.10.1
      inspiring_diffie|go: downloading github.com/gobuffalo/packd v1.0.1
      inspiring_diffie|go: downloading golang.org/x/net v0.7.0
      inspiring_diffie|go: downloading google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f
      inspiring_diffie|go: downloading github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb
      inspiring_diffie|go: downloading github.com/mailru/easyjson v0.7.7
      inspiring_diffie|go: downloading gopkg.in/yaml.v2 v2.4.0
      inspiring_diffie|go: downloading github.com/joho/godotenv v1.4.0
      inspiring_diffie|go: downloading github.com/rogpeppe/go-internal v1.8.1
      inspiring_diffie|go: downloading golang.org/x/sys v0.5.0
      inspiring_diffie|go: downloading github.com/josharian/intern v1.0.0
      inspiring_diffie|go: downloading golang.org/x/text v0.7.0
      inspiring_diffie|internal/goarch
      inspiring_diffie|internal/unsafeheader
      inspiring_diffie|internal/abi
      inspiring_diffie|internal/cpu
      inspiring_diffie|internal/bytealg
      inspiring_diffie|internal/coverage/rtcov
      inspiring_diffie|internal/goexperiment
      inspiring_diffie|internal/goos
      inspiring_diffie|runtime/internal/atomic
      inspiring_diffie|runtime/internal/math
      inspiring_diffie|runtime/internal/sys
      inspiring_diffie|runtime/internal/syscall
      inspiring_diffie|runtime
      inspiring_diffie|internal/reflectlite
      inspiring_diffie|errors
      inspiring_diffie|internal/race
      inspiring_diffie|sync/atomic
      inspiring_diffie|sync
      inspiring_diffie|io
      inspiring_diffie|unicode
      inspiring_diffie|unicode/utf8
      inspiring_diffie|bytes
      inspiring_diffie|encoding
      inspiring_diffie|math/bits
      inspiring_diffie|math
      inspiring_diffie|internal/itoa
      inspiring_diffie|strconv
      inspiring_diffie|reflect
      inspiring_diffie|encoding/binary
      inspiring_diffie|encoding/base64
      inspiring_diffie|sort
      inspiring_diffie|internal/fmtsort
      inspiring_diffie|internal/oserror
      inspiring_diffie|syscall
      inspiring_diffie|internal/syscall/unix
      inspiring_diffie|time
      inspiring_diffie|internal/poll
      inspiring_diffie|internal/safefilepath
      inspiring_diffie|internal/syscall/execenv
      inspiring_diffie|internal/testlog
      inspiring_diffie|path
      inspiring_diffie|io/fs
      inspiring_diffie|os
      inspiring_diffie|fmt
      inspiring_diffie|strings
      inspiring_diffie|unicode/utf16
      inspiring_diffie|encoding/json
      inspiring_diffie|hash
      inspiring_diffie|crypto
      inspiring_diffie|crypto/internal/alias
      inspiring_diffie|crypto/subtle
      inspiring_diffie|crypto/cipher
      inspiring_diffie|crypto/internal/boring/sig
      inspiring_diffie|crypto/internal/boring
      inspiring_diffie|crypto/aes
      inspiring_diffie|crypto/des
      inspiring_diffie|crypto/internal/randutil
      inspiring_diffie|internal/godebug
      inspiring_diffie|math/rand
      inspiring_diffie|math/big
      inspiring_diffie|crypto/dsa
      inspiring_diffie|crypto/internal/edwards25519/field
      inspiring_diffie|crypto/internal/nistec/fiat
      inspiring_diffie|embed
      inspiring_diffie|crypto/internal/nistec
      inspiring_diffie|crypto/ecdh
      inspiring_diffie|crypto/elliptic
      inspiring_diffie|crypto/internal/bigmod
      inspiring_diffie|crypto/internal/boring/bbig
      inspiring_diffie|crypto/sha512
      inspiring_diffie|encoding/asn1
      inspiring_diffie|vendor/golang.org/x/crypto/cryptobyte/asn1
      inspiring_diffie|vendor/golang.org/x/crypto/cryptobyte
      inspiring_diffie|crypto/ecdsa
      inspiring_diffie|crypto/internal/edwards25519
      inspiring_diffie|crypto/rand
      inspiring_diffie|crypto/ed25519
      inspiring_diffie|crypto/md5
      inspiring_diffie|crypto/rsa
      inspiring_diffie|crypto/sha1
      inspiring_diffie|crypto/sha256
      inspiring_diffie|encoding/hex
      inspiring_diffie|crypto/x509/pkix
      inspiring_diffie|encoding/pem
      inspiring_diffie|context
      inspiring_diffie|vendor/golang.org/x/net/dns/dnsmessage
      inspiring_diffie|internal/nettrace
      inspiring_diffie|internal/singleflight
      inspiring_diffie|internal/intern
      inspiring_diffie|net/netip
      inspiring_diffie|runtime/cgo
      inspiring_diffie|net
      inspiring_diffie|net/url
      inspiring_diffie|path/filepath
      inspiring_diffie|crypto/x509
      inspiring_diffie|bufio
      inspiring_diffie|compress/flate
      inspiring_diffie|hash/crc32
      inspiring_diffie|compress/gzip
      inspiring_diffie|hash/fnv
      inspiring_diffie|google.golang.org/protobuf/internal/detrand
      inspiring_diffie|google.golang.org/protobuf/internal/errors
      inspiring_diffie|google.golang.org/protobuf/encoding/protowire
      inspiring_diffie|google.golang.org/protobuf/internal/pragma
      inspiring_diffie|google.golang.org/protobuf/reflect/protoreflect
      inspiring_diffie|google.golang.org/protobuf/internal/encoding/messageset
      inspiring_diffie|google.golang.org/protobuf/internal/flags
      inspiring_diffie|go/token
      inspiring_diffie|google.golang.org/protobuf/internal/strs
      inspiring_diffie|google.golang.org/protobuf/internal/encoding/text
      inspiring_diffie|google.golang.org/protobuf/internal/genid
      inspiring_diffie|google.golang.org/protobuf/internal/order
      inspiring_diffie|google.golang.org/protobuf/internal/set
      inspiring_diffie|google.golang.org/protobuf/reflect/protoregistry
      inspiring_diffie|google.golang.org/protobuf/runtime/protoiface
      inspiring_diffie|google.golang.org/protobuf/proto
      inspiring_diffie|google.golang.org/protobuf/encoding/prototext
      inspiring_diffie|google.golang.org/protobuf/internal/encoding/defval
      inspiring_diffie|google.golang.org/protobuf/internal/descfmt
      inspiring_diffie|google.golang.org/protobuf/internal/descopts
      inspiring_diffie|google.golang.org/protobuf/internal/filedesc
      inspiring_diffie|google.golang.org/protobuf/internal/encoding/tag
      inspiring_diffie|io/ioutil
      inspiring_diffie|google.golang.org/protobuf/internal/impl
      inspiring_diffie|google.golang.org/protobuf/internal/filetype
      inspiring_diffie|google.golang.org/protobuf/internal/version
      inspiring_diffie|google.golang.org/protobuf/runtime/protoimpl
      inspiring_diffie|google.golang.org/protobuf/types/descriptorpb
      inspiring_diffie|google.golang.org/protobuf/reflect/protodesc
      inspiring_diffie|github.com/golang/protobuf/proto
      inspiring_diffie|github.com/hyperledger/fabric-protos-go/msp
      inspiring_diffie|github.com/hyperledger/fabric-chaincode-go/pkg/attrmgr
      inspiring_diffie|github.com/hyperledger/fabric-chaincode-go/pkg/cid
      inspiring_diffie|container/list
      inspiring_diffie|crypto/hmac
      inspiring_diffie|crypto/rc4
      inspiring_diffie|vendor/golang.org/x/crypto/internal/alias
      inspiring_diffie|vendor/golang.org/x/crypto/chacha20
      inspiring_diffie|vendor/golang.org/x/crypto/internal/poly1305
      inspiring_diffie|vendor/golang.org/x/sys/cpu
      inspiring_diffie|vendor/golang.org/x/crypto/chacha20poly1305
      inspiring_diffie|vendor/golang.org/x/crypto/hkdf
      inspiring_diffie|crypto/tls
      inspiring_diffie|flag
      inspiring_diffie|google.golang.org/protobuf/types/known/timestamppb
      inspiring_diffie|github.com/golang/protobuf/ptypes/timestamp
      inspiring_diffie|github.com/hyperledger/fabric-protos-go/common
      inspiring_diffie|github.com/hyperledger/fabric-protos-go/ledger/rwset
      inspiring_diffie|log
      inspiring_diffie|golang.org/x/net/internal/timeseries
      inspiring_diffie|html
      inspiring_diffie|text/template/parse
      inspiring_diffie|text/template
      inspiring_diffie|html/template
      inspiring_diffie|vendor/golang.org/x/text/transform
      inspiring_diffie|vendor/golang.org/x/text/unicode/bidi
      inspiring_diffie|vendor/golang.org/x/text/secure/bidirule
      inspiring_diffie|vendor/golang.org/x/text/unicode/norm
      inspiring_diffie|vendor/golang.org/x/net/idna
      inspiring_diffie|net/textproto
      inspiring_diffie|vendor/golang.org/x/net/http/httpguts
      inspiring_diffie|vendor/golang.org/x/net/http/httpproxy
      inspiring_diffie|vendor/golang.org/x/net/http2/hpack
      inspiring_diffie|mime
      inspiring_diffie|mime/quotedprintable
      inspiring_diffie|mime/multipart
      inspiring_diffie|net/http/httptrace
      inspiring_diffie|net/http/internal
      inspiring_diffie|net/http/internal/ascii
      inspiring_diffie|net/http
      inspiring_diffie|text/tabwriter
      inspiring_diffie|golang.org/x/net/trace
      inspiring_diffie|google.golang.org/grpc/backoff
      inspiring_diffie|golang.org/x/sys/unix
      inspiring_diffie|google.golang.org/grpc/internal/grpclog
      inspiring_diffie|google.golang.org/grpc/grpclog
      inspiring_diffie|google.golang.org/grpc/connectivity
      inspiring_diffie|google.golang.org/grpc/attributes
      inspiring_diffie|google.golang.org/grpc/internal/credentials
      inspiring_diffie|google.golang.org/grpc/credentials
      inspiring_diffie|google.golang.org/grpc/internal/channelz
      inspiring_diffie|google.golang.org/grpc/channelz
      inspiring_diffie|regexp/syntax
      inspiring_diffie|regexp
      inspiring_diffie|google.golang.org/protobuf/internal/encoding/json
      inspiring_diffie|google.golang.org/protobuf/encoding/protojson
      inspiring_diffie|github.com/golang/protobuf/jsonpb
      inspiring_diffie|google.golang.org/grpc/internal/pretty
      inspiring_diffie|google.golang.org/grpc/serviceconfig
      inspiring_diffie|google.golang.org/grpc/resolver
      inspiring_diffie|google.golang.org/grpc/internal
      inspiring_diffie|google.golang.org/grpc/metadata
      inspiring_diffie|google.golang.org/grpc/balancer
      inspiring_diffie|google.golang.org/grpc/balancer/base
      inspiring_diffie|google.golang.org/grpc/internal/grpcrand
      inspiring_diffie|google.golang.org/grpc/balancer/roundrobin
      inspiring_diffie|google.golang.org/grpc/codes
      inspiring_diffie|google.golang.org/grpc/credentials/insecure
      inspiring_diffie|google.golang.org/grpc/internal/envconfig
      inspiring_diffie|google.golang.org/grpc/internal/grpcutil
      inspiring_diffie|google.golang.org/grpc/encoding
      inspiring_diffie|google.golang.org/grpc/encoding/proto
      inspiring_diffie|google.golang.org/grpc/internal/backoff
      inspiring_diffie|google.golang.org/grpc/internal/balancer/gracefulswitch
      inspiring_diffie|google.golang.org/grpc/internal/balancerload
      inspiring_diffie|google.golang.org/protobuf/types/known/anypb
      inspiring_diffie|github.com/golang/protobuf/ptypes/any
      inspiring_diffie|google.golang.org/protobuf/types/known/durationpb
      inspiring_diffie|github.com/golang/protobuf/ptypes/duration
      inspiring_diffie|github.com/golang/protobuf/ptypes
      inspiring_diffie|google.golang.org/grpc/binarylog/grpc_binarylog_v1
      inspiring_diffie|google.golang.org/genproto/googleapis/rpc/status
      inspiring_diffie|google.golang.org/grpc/internal/status
      inspiring_diffie|google.golang.org/grpc/status
      inspiring_diffie|google.golang.org/grpc/internal/binarylog
      inspiring_diffie|google.golang.org/grpc/internal/buffer
      inspiring_diffie|google.golang.org/grpc/internal/grpcsync
      inspiring_diffie|google.golang.org/grpc/internal/metadata
      inspiring_diffie|google.golang.org/grpc/internal/serviceconfig
      inspiring_diffie|google.golang.org/grpc/internal/resolver
      inspiring_diffie|google.golang.org/grpc/balancer/grpclb/state
      inspiring_diffie|google.golang.org/grpc/internal/resolver/dns
      inspiring_diffie|google.golang.org/grpc/internal/resolver/passthrough
      inspiring_diffie|google.golang.org/grpc/internal/transport/networktype
      inspiring_diffie|google.golang.org/grpc/internal/resolver/unix
      inspiring_diffie|golang.org/x/text/transform
      inspiring_diffie|golang.org/x/text/unicode/bidi
      inspiring_diffie|golang.org/x/text/secure/bidirule
      inspiring_diffie|golang.org/x/text/unicode/norm
      inspiring_diffie|golang.org/x/net/idna
      inspiring_diffie|golang.org/x/net/http/httpguts
      inspiring_diffie|golang.org/x/net/http2/hpack
      inspiring_diffie|golang.org/x/net/http2
      inspiring_diffie|google.golang.org/grpc/internal/syscall
      inspiring_diffie|google.golang.org/grpc/keepalive
      inspiring_diffie|google.golang.org/grpc/peer
      inspiring_diffie|google.golang.org/grpc/stats
      inspiring_diffie|google.golang.org/grpc/tap
      inspiring_diffie|net/http/httputil
      inspiring_diffie|google.golang.org/grpc/internal/transport
      inspiring_diffie|google.golang.org/grpc
      inspiring_diffie|google.golang.org/protobuf/types/known/emptypb
      inspiring_diffie|github.com/hyperledger/fabric-protos-go/peer
      inspiring_diffie|github.com/hyperledger/fabric-chaincode-go/shim/internal
      inspiring_diffie|github.com/hyperledger/fabric-protos-go/ledger/queryresult
      inspiring_diffie|github.com/hyperledger/fabric-chaincode-go/shim
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/contractapi/utils
      inspiring_diffie|internal/saferio
      inspiring_diffie|encoding/gob
      inspiring_diffie|github.com/josharian/intern
      inspiring_diffie|github.com/mailru/easyjson/jlexer
      inspiring_diffie|github.com/mailru/easyjson/buffer
      inspiring_diffie|github.com/mailru/easyjson/jwriter
      inspiring_diffie|gopkg.in/yaml.v2
      inspiring_diffie|github.com/go-openapi/swag
      inspiring_diffie|github.com/go-openapi/jsonpointer
      inspiring_diffie|github.com/go-openapi/jsonreference/internal
      inspiring_diffie|github.com/go-openapi/jsonreference
      inspiring_diffie|github.com/go-openapi/spec
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/internal/types
      inspiring_diffie|github.com/xeipuuv/gojsonpointer
      inspiring_diffie|github.com/xeipuuv/gojsonreference
      inspiring_diffie|net/mail
      inspiring_diffie|github.com/xeipuuv/gojsonschema
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/internal/utils
      inspiring_diffie|os/exec
      inspiring_diffie|github.com/joho/godotenv
      inspiring_diffie|github.com/rogpeppe/go-internal/semver
      inspiring_diffie|github.com/rogpeppe/go-internal/module
      inspiring_diffie|github.com/rogpeppe/go-internal/modfile
      inspiring_diffie|github.com/gobuffalo/envy
      inspiring_diffie|github.com/gobuffalo/packd/internal/takeon/github.com/markbates/errx
      inspiring_diffie|github.com/gobuffalo/packd
      inspiring_diffie|github.com/gobuffalo/packr
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/metadata
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/serializer
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/internal
      inspiring_diffie|github.com/hyperledger/fabric-contract-api-go/contractapi
      inspiring_diffie|github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode
      inspiring_diffie|github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go
      inspiring_diffie|# github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go
      inspiring_diffie|/usr/bin/ld: /tmp/go-link-4085013870/000004.o: in function `_cgo_cbcce81e6342_C2func_getaddrinfo':
      inspiring_diffie|/tmp/go-build/cgo-gcc-prolog:58: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
      inspiring_diffie|Done!
peer0.org2.example.com|2023-08-09 05:34:37.921 UTC 004b INFO [lifecycle] InstallChaincode -> Successfully installed chaincode with package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578'
peer0.org2.example.com|2023-08-09 05:34:37.921 UTC 004c INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 85149ms channel= txID=7af380e4
peer0.org2.example.com|2023-08-09 05:34:37.921 UTC 004d INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:54216 grpc.code=OK grpc.call_duration=1m25.152027105s
peer0.org2.example.com|2023-08-09 05:45:13.162 UTC 004e INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 1ms channel= txID=5aafb1de
peer0.org2.example.com|2023-08-09 05:45:13.162 UTC 004f INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:59736 grpc.code=OK grpc.call_duration=2.456688ms
peer0.org2.example.com|2023-08-09 05:55:21.386 UTC 0050 INFO [lifecycle] ApproveChaincodeDefinitionForOrg -> Successfully endorsed chaincode approval with name 'basic', package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578', on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: ()}
peer0.org2.example.com|2023-08-09 05:55:21.386 UTC 0051 INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 5ms channel=mychannel txID=31dfb0e4
peer0.org2.example.com|2023-08-09 05:55:21.390 UTC 0052 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:52842 grpc.code=OK grpc.call_duration=10.79962ms
   orderer.example.com|2023-08-09 05:55:23.403 UTC 003b INFO [orderer.consensus.etcdraft] propose -> Created block [3], there are 0 blocks in flight channel=mychannel node=1
   orderer.example.com|2023-08-09 05:55:23.410 UTC 003c INFO [orderer.consensus.etcdraft] writeBlock -> Writing block [3] (Raft index: 5) to ledger channel=mychannel node=1
peer0.org2.example.com|2023-08-09 05:55:23.427 UTC 0053 INFO [gossip.privdata] StoreBlock -> Received block [3] from buffer channel=mychannel
peer0.org1.example.com|2023-08-09 05:55:23.424 UTC 0053 INFO [gossip.privdata] StoreBlock -> Received block [3] from buffer channel=mychannel
peer0.org1.example.com|2023-08-09 05:55:23.436 UTC 0054 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [3] in 5ms
peer0.org2.example.com|2023-08-09 05:55:23.438 UTC 0054 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [3] in 10ms
peer0.org2.example.com|2023-08-09 05:55:23.442 UTC 0055 INFO [gossip.privdata] RetrievePvtdata -> Successfully fetched (or marked to reconcile later) all 1 eligible collection private write sets for block [3] (0 from local cache, 1 from transient store, 0 from other peers) channel=mychannel
peer0.org1.example.com|2023-08-09 05:55:23.463 UTC 0055 INFO [kvledger] commit -> [mychannel] Committed block [3] with 1 transaction(s) in 22ms (state_validation=0ms block_and_pvtdata_commit=13ms state_commit=4ms) commitHash=[6f1967298e705a865006906f25bab925e7dd2349d29434ee4225172a6b725fc4]
peer0.org2.example.com|2023-08-09 05:55:23.470 UTC 0056 INFO [kvledger] commit -> [mychannel] Committed block [3] with 1 transaction(s) in 26ms (state_validation=0ms block_and_pvtdata_commit=13ms state_commit=3ms) commitHash=[6f1967298e705a865006906f25bab925e7dd2349d29434ee4225172a6b725fc4]
   orderer.example.com|2023-08-09 05:55:23.480 UTC 003d WARN [orderer.common.broadcast] Handle -> Error reading from 172.18.0.1:55914: rpc error: code = Canceled desc = context canceled
   orderer.example.com|2023-08-09 05:55:23.480 UTC 003e INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=172.18.0.1:55914 error="rpc error: code = Canceled desc = context canceled" grpc.code=Canceled grpc.call_duration=2.098570428s
peer0.org2.example.com|2023-08-09 05:55:23.483 UTC 0057 INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=protos.Deliver grpc.method=DeliverFiltered grpc.request_deadline=2023-08-09T05:55:51.393Z grpc.peer_address=172.18.0.1:52850 error="context finished before block retrieved: context canceled" grpc.code=Unknown grpc.call_duration=2.090130644s
peer0.org1.example.com|2023-08-09 09:38:06.078 UTC 0056 INFO [lifecycle] ApproveChaincodeDefinitionForOrg -> Successfully endorsed chaincode approval with name 'basic', package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578', on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: ()}
peer0.org1.example.com|2023-08-09 09:38:06.079 UTC 0057 INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 3ms channel=mychannel txID=fe9259ac
peer0.org1.example.com|2023-08-09 09:38:06.086 UTC 0058 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:48786 grpc.code=OK grpc.call_duration=10.687797ms
   orderer.example.com|2023-08-09 09:38:08.092 UTC 003f INFO [orderer.consensus.etcdraft] propose -> Created block [4], there are 0 blocks in flight channel=mychannel node=1
   orderer.example.com|2023-08-09 09:38:08.104 UTC 0040 INFO [orderer.consensus.etcdraft] writeBlock -> Writing block [4] (Raft index: 6) to ledger channel=mychannel node=1
peer0.org2.example.com|2023-08-09 09:38:08.112 UTC 0058 INFO [gossip.privdata] StoreBlock -> Received block [4] from buffer channel=mychannel
peer0.org1.example.com|2023-08-09 09:38:08.115 UTC 0059 INFO [gossip.privdata] StoreBlock -> Received block [4] from buffer channel=mychannel
peer0.org2.example.com|2023-08-09 09:38:08.132 UTC 0059 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [4] in 10ms
peer0.org1.example.com|2023-08-09 09:38:08.134 UTC 005a INFO [committer.txvalidator] Validate -> [mychannel] Validated block [4] in 10ms
peer0.org1.example.com|2023-08-09 09:38:08.137 UTC 005b INFO [gossip.privdata] RetrievePvtdata -> Successfully fetched (or marked to reconcile later) all 1 eligible collection private write sets for block [4] (0 from local cache, 1 from transient store, 0 from other peers) channel=mychannel
peer0.org1.example.com|2023-08-09 09:38:08.182 UTC 005c INFO [kvledger] commit -> [mychannel] Committed block [4] with 1 transaction(s) in 41ms (state_validation=1ms block_and_pvtdata_commit=28ms state_commit=6ms) commitHash=[52b410b175d947976576b1390edda5eceb73793907d1e95b320ac5fa70c6c082]
peer0.org2.example.com|2023-08-09 09:38:08.191 UTC 005a INFO [kvledger] commit -> [mychannel] Committed block [4] with 1 transaction(s) in 52ms (state_validation=4ms block_and_pvtdata_commit=30ms state_commit=4ms) commitHash=[52b410b175d947976576b1390edda5eceb73793907d1e95b320ac5fa70c6c082]
   orderer.example.com|2023-08-09 09:38:08.198 UTC 0041 WARN [orderer.common.broadcast] Handle -> Error reading from 172.18.0.1:44444: rpc error: code = Canceled desc = context canceled
   orderer.example.com|2023-08-09 09:38:08.198 UTC 0042 INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=172.18.0.1:44444 error="rpc error: code = Canceled desc = context canceled" grpc.code=Canceled grpc.call_duration=2.124032921s
peer0.org1.example.com|2023-08-09 09:38:08.200 UTC 005d INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=protos.Deliver grpc.method=DeliverFiltered grpc.request_deadline=2023-08-09T09:38:36.096Z grpc.peer_address=172.18.0.1:48788 error="context finished before block retrieved: context canceled" grpc.code=Unknown grpc.call_duration=2.103690209s
peer0.org1.example.com|2023-08-09 09:45:10.840 UTC 005e INFO [lifecycle] CheckCommitReadiness -> Successfully checked commit readiness of chaincode name 'basic' on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: (<nil>)}
peer0.org1.example.com|2023-08-09 09:45:10.841 UTC 005f INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 1ms channel=mychannel txID=39dc1ef2
peer0.org1.example.com|2023-08-09 09:45:10.842 UTC 0060 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:57060 grpc.code=OK grpc.call_duration=3.45275ms
peer0.org1.example.com|2023-08-09 09:58:17.408 UTC 0061 INFO [lifecycle] CheckCommitReadiness -> Successfully checked commit readiness of chaincode name 'basic' on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: (<nil>)}
peer0.org1.example.com|2023-08-09 09:58:17.408 UTC 0062 INFO [lifecycle] CommitChaincodeDefinition -> Successfully endorsed commit for chaincode name 'basic' on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: (<nil>)}
peer0.org1.example.com|2023-08-09 09:58:17.410 UTC 0063 INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 2ms channel=mychannel txID=3d3b09d8
peer0.org1.example.com|2023-08-09 09:58:17.410 UTC 0064 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:55862 grpc.code=OK grpc.call_duration=3.76187ms
peer0.org2.example.com|2023-08-09 09:58:17.417 UTC 005b INFO [lifecycle] CheckCommitReadiness -> Successfully checked commit readiness of chaincode name 'basic' on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: (<nil>)}
peer0.org2.example.com|2023-08-09 09:58:17.420 UTC 005c INFO [lifecycle] CommitChaincodeDefinition -> Successfully endorsed commit for chaincode name 'basic' on channel 'mychannel' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: (<nil>)}
peer0.org2.example.com|2023-08-09 09:58:17.420 UTC 005d INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 3ms channel=mychannel txID=3d3b09d8
peer0.org2.example.com|2023-08-09 09:58:17.422 UTC 005e INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:53146 grpc.code=OK grpc.call_duration=5.939229ms
   orderer.example.com|2023-08-09 09:58:19.426 UTC 0043 INFO [orderer.consensus.etcdraft] propose -> Created block [5], there are 0 blocks in flight channel=mychannel node=1
   orderer.example.com|2023-08-09 09:58:19.432 UTC 0044 INFO [orderer.consensus.etcdraft] writeBlock -> Writing block [5] (Raft index: 7) to ledger channel=mychannel node=1
peer0.org1.example.com|2023-08-09 09:58:19.441 UTC 0065 INFO [gossip.privdata] StoreBlock -> Received block [5] from buffer channel=mychannel
peer0.org2.example.com|2023-08-09 09:58:19.443 UTC 005f INFO [gossip.privdata] StoreBlock -> Received block [5] from buffer channel=mychannel
peer0.org2.example.com|2023-08-09 09:58:19.447 UTC 0060 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [5] in 3ms
peer0.org1.example.com|2023-08-09 09:58:19.450 UTC 0066 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [5] in 5ms
peer0.org1.example.com|2023-08-09 09:58:19.452 UTC 0067 INFO [lifecycle] update -> Updating cached definition for chaincode 'basic' on channel 'mychannel'
peer0.org2.example.com|2023-08-09 09:58:19.458 UTC 0061 INFO [lifecycle] update -> Updating cached definition for chaincode 'basic' on channel 'mychannel'
peer0.org2.example.com|2023-08-09 09:58:19.460 UTC 0062 INFO [lifecycle] update -> Chaincode with package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578' now available on channel mychannel for chaincode definition basic:1.0
peer0.org1.example.com|2023-08-09 09:58:19.461 UTC 0068 INFO [lifecycle] update -> Chaincode with package ID 'basic_1.0:fa7da118f496cd4a3deb4e43c77f9af4f3265b7555942c74c9810557fa5c6578' now available on channel mychannel for chaincode definition basic:1.0
peer0.org1.example.com|2023-08-09 09:58:19.478 UTC 0069 INFO [cceventmgmt] HandleStateUpdates -> Channel [mychannel]: Handling deploy or update of chaincode [basic]
peer0.org2.example.com|2023-08-09 09:58:19.479 UTC 0063 INFO [cceventmgmt] HandleStateUpdates -> Channel [mychannel]: Handling deploy or update of chaincode [basic]
peer0.org1.example.com|2023-08-09 09:58:19.499 UTC 006a INFO [kvledger] commit -> [mychannel] Committed block [5] with 1 transaction(s) in 48ms (state_validation=28ms block_and_pvtdata_commit=8ms state_commit=6ms) commitHash=[87a12b89927c4d246fb326f72959cc2f372da0a5ab0ce01fba8eb7af248e2a07]
   orderer.example.com|2023-08-09 09:58:19.525 UTC 0045 WARN [orderer.common.broadcast] Handle -> Error reading from 172.18.0.1:39486: rpc error: code = Canceled desc = context canceled
   orderer.example.com|2023-08-09 09:58:19.525 UTC 0046 INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=172.18.0.1:39486 error="rpc error: code = Canceled desc = context canceled" grpc.code=Canceled grpc.call_duration=2.110307788s
peer0.org2.example.com|2023-08-09 09:58:19.517 UTC 0064 INFO [kvledger] commit -> [mychannel] Committed block [5] with 1 transaction(s) in 66ms (state_validation=30ms block_and_pvtdata_commit=8ms state_commit=20ms) commitHash=[87a12b89927c4d246fb326f72959cc2f372da0a5ab0ce01fba8eb7af248e2a07]
peer0.org2.example.com|2023-08-09 09:58:19.600 UTC 0065 INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=protos.Deliver grpc.method=DeliverFiltered grpc.request_deadline=2023-08-09T09:58:47.427Z grpc.peer_address=172.18.0.1:53154 error="context finished before block retrieved: context canceled" grpc.code=Unknown grpc.call_duration=2.17212258s
peer0.org1.example.com|2023-08-09 09:58:19.594 UTC 006b INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=protos.Deliver grpc.method=DeliverFiltered grpc.request_deadline=2023-08-09T09:58:47.426Z grpc.peer_address=172.18.0.1:55876 error="context finished before block retrieved: context canceled" grpc.code=Unknown grpc.call_duration=2.168257296s
peer0.org1.example.com|2023-08-09 10:15:01.271 UTC 006c INFO [lifecycle] QueryChaincodeDefinition -> Successfully queried chaincode name 'basic' with definition {sequence: 1, endorsement info: (version: '1.0', plugin: 'escc', init required: false), validation info: (plugin: 'vscc', policy: '12202f4368616e6e656c2f4170706c69636174696f6e2f456e646f7273656d656e74'), collections: ()},
peer0.org1.example.com|2023-08-09 10:15:01.272 UTC 006d INFO [endorser] callChaincode -> finished chaincode: _lifecycle duration: 1ms channel=mychannel txID=78344a6d
peer0.org1.example.com|2023-08-09 10:15:01.282 UTC 006e INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:41988 grpc.code=OK grpc.call_duration=11.973938ms
peer0.org2.example.com|2023-08-09 11:01:11.385 UTC 0066 INFO [endorser] callChaincode -> finished chaincode: basic duration: 2ms channel=mychannel txID=b2969bcc
peer0.org1.example.com|2023-08-09 11:01:11.390 UTC 006f INFO [endorser] callChaincode -> finished chaincode: basic duration: 2ms channel=mychannel txID=b2969bcc
peer0.org2.example.com|2023-08-09 11:01:11.391 UTC 0067 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:59452 grpc.code=OK grpc.call_duration=9.470456ms
peer0.org1.example.com|2023-08-09 11:01:11.392 UTC 0070 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:52526 grpc.code=OK grpc.call_duration=5.491763ms
   orderer.example.com|2023-08-09 11:01:11.402 UTC 0047 WARN [orderer.common.broadcast] Handle -> Error reading from 172.18.0.1:45160: rpc error: code = Canceled desc = context canceled
   orderer.example.com|2023-08-09 11:01:11.402 UTC 0048 INFO [comm.grpc.server] 1 -> streaming call completed grpc.service=orderer.AtomicBroadcast grpc.method=Broadcast grpc.peer_address=172.18.0.1:45160 error="rpc error: code = Canceled desc = context canceled" grpc.code=Canceled grpc.call_duration=15.37168ms
   orderer.example.com|2023-08-09 11:01:13.396 UTC 0049 INFO [orderer.consensus.etcdraft] propose -> Created block [6], there are 0 blocks in flight channel=mychannel node=1
   orderer.example.com|2023-08-09 11:01:13.406 UTC 004a INFO [orderer.consensus.etcdraft] writeBlock -> Writing block [6] (Raft index: 8) to ledger channel=mychannel node=1
peer0.org2.example.com|2023-08-09 11:01:13.417 UTC 0068 INFO [gossip.privdata] StoreBlock -> Received block [6] from buffer channel=mychannel
peer0.org1.example.com|2023-08-09 11:01:13.418 UTC 0071 INFO [gossip.privdata] StoreBlock -> Received block [6] from buffer channel=mychannel
peer0.org1.example.com|2023-08-09 11:01:13.422 UTC 0072 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [6] in 1ms
peer0.org2.example.com|2023-08-09 11:01:13.426 UTC 0069 INFO [committer.txvalidator] Validate -> [mychannel] Validated block [6] in 6ms
peer0.org1.example.com|2023-08-09 11:01:13.443 UTC 0073 INFO [kvledger] commit -> [mychannel] Committed block [6] with 1 transaction(s) in 15ms (state_validation=0ms block_and_pvtdata_commit=9ms state_commit=3ms) commitHash=[346f9ac883c581b799341b3b483764991c468095a66a44c25439274303f5b078]
peer0.org2.example.com|2023-08-09 11:01:13.445 UTC 006a INFO [kvledger] commit -> [mychannel] Committed block [6] with 1 transaction(s) in 16ms (state_validation=0ms block_and_pvtdata_commit=9ms state_commit=3ms) commitHash=[346f9ac883c581b799341b3b483764991c468095a66a44c25439274303f5b078]
peer0.org1.example.com|2023-08-09 11:04:24.101 UTC 0074 INFO [endorser] callChaincode -> finished chaincode: basic duration: 2ms channel=mychannel txID=ea174cf0
peer0.org1.example.com|2023-08-09 11:04:24.103 UTC 0075 INFO [comm.grpc.server] 1 -> unary call completed grpc.service=protos.Endorser grpc.method=ProcessProposal grpc.peer_address=172.18.0.1:50998 grpc.code=OK grpc.call_duration=4.446394ms
curl: (18) transfer closed with outstanding read data remaining
profile
인생 살자.

0개의 댓글