Visual Studio 코드를 사용하여 체인코드 배포

체인코드 프로젝트가 생성되면 자동으로 생성된 Hyperledger Fabric 네트워크에 로컬로 배포하거나 Oracle Blockchain Platform Cloud 또는 Enterprise Edition에 원격으로 배포할 수 있습니다. Oracle Blockchain Platform에 수동으로 배포하기 위한 체인코드 프로젝트를 패키지화할 수도 있습니다.

로컬 Hyperledger Fabric 네트워크에 체인 코드 배포

체인코드 프로젝트를 만든 후에는 로컬 Hyperledger Fabric 기본 네트워크에서 테스트할 수 있습니다.

VS Code용 Blockchain App Builder 확장을 설치하면 단일 채널로 Hyperledger Fabric 네트워크가 자동으로 생성됩니다. 환경 창에 Local Environment으로 나열됩니다. 이 환경은 삭제하거나 수정할 수 없습니다. 체인코드를 배포하고 제대로 작동이 중지되면 재구축할 수 있습니다.

Blockchain App Builder를 설치할 때 생성되는 테스트 네트워크는 Hyperledger Fabric v2.5.7 및 Hyperledger Fabric CA v1.5.9를 실행합니다.

Blockchain App Builder 체인코드 배포는 Hyperledger Fabric 기본 네트워크 및 기타 서비스를 시작하고 체인코드를 설치 및 배포합니다.

  1. 체인 코드 세부정보 창에서 배치를 선택합니다.
  2. Deployment Wizard에서 다음을 수행합니다.
    • 올바른 체인코드 이름이 선택되었는지 확인하십시오.
    • 대상 환경을 선택합니다. 로컬 배치의 경우 로컬 환경을 선택합니다.
    • 배치할 채널을 선택하십시오. "mychannel"이라는 채널은 기본적으로 확장 기능 설치와 함께 생성되며 테스트에 사용할 수 있습니다.
    • 선택적으로 필요한 초기 매개변수를 입력합니다.
    • 토큰 프로젝트의 경우 처음 배치할 때 토큰 관리자 목록을 매개변수로 입력해야 합니다. 목록은 토큰 관리자를 지정하는 {user_id, org_id} 정보의 배열입니다. 로컬 Hyperledger Fabric 네트워크의 경우 org_id 필드에 Org1MSP 값을 사용합니다. NFT 체인코드의 경우 adminList 매개변수에 대한 키는 userId, orgId(TypeScript), UserId(OrgId)입니다. 처음 배치한 후 adminList 매개변수에 빈 배열을 제공하거나 adminList 매개변수를 사용하여 토큰 관리자를 추가할 수 있습니다. 최초 배치자가 아닌 다른 배치자는 adminList 매개변수에 대해 빈 배열을 제공해야 합니다. 이렇게 하려면 배치 창에서 Init 매개변수 목록을 열고 빈 배열을 선택하는 adminList 매개변수 옆에 있는 빼기 기호(–) 단추를 누릅니다.
  3. 배치를 누릅니다.

체인코드 배치가 완료되면 출력 콘솔에 제공된 채널에 성공적으로 설치 및 배치되었음을 알립니다.

문제 해결

로컬 네트워크에서 체인코드 프로젝트를 실행할 때 다음 문제가 발생할 수 있습니다.

실행 권한 누락
로컬 네트워크에 Go 체인코드 프로젝트를 설치하는 동안 출력 콘솔에 다음과 유사한 오류가 표시될 수 있습니다.
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1
실행 권한이 누락되었기 때문입니다. 이 오류는 Mac OS에서만 나타납니다. 이는 알려진 문제입니다:
해결 방법: $GOROOT의 권한을 변경하고 다시 배치해 보십시오.
sudo chmod -R 777 /usr/local/go
배치 실패
배포 실패, 손상된 배포, Docker 피어 컨테이너가 가득 찼거나 로컬 네트워크에서 Docker 피어가 종료되어 다음과 유사한 오류가 표시될 수 있습니다.
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
피어 컨테이너가 다시 제대로 시작되지 않기 때문입니다.
해결 방법: 환경 창에서 로컬 환경을 선택하고 마우스 오른쪽 단추를 누르고 로컬 환경 재구축을 선택하여 런타임을 재구축합니다. 다시 배포를 시도합니다.
환경 재생성 필요
다음과 유사한 오류가 표시될 수 있습니다.
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
로컬 환경을 재구축해야 합니다. 애플리케이션 작성기 환경 창에서 로컬 환경을 마우스 오른쪽 단추로 누르고 로컬 환경 재구축을 선택합니다.

원격 Oracle Blockchain Platform 네트워크에 체인코드 배포

로컬 네트워크에서 체인코드 프로젝트를 배포하고 테스트하여 설계대로 작동하는지 확인한 후 Oracle Blockchain Platform에 배포할 수 있습니다.

Oracle Blockchain Platform 인스턴스에 대한 연결 구성 생성

이 단계를 완료하려면 Oracle Blockchain Platform 인스턴스가 작동되어 실행 중이어야 합니다.

  1. Visual Studio 코드 환경 창에서 환경 생성 아이콘을 누릅니다.
  2. 환경 세부정보 마법사에서 다음을 수행합니다.
    • 원격 환경의 이름을 입력합니다.
    • 설명을 입력합니다.
    • REST 프록시 URL에 원격 Oracle Blockchain Platform 인스턴스의 REST 프록시 URL을 입력합니다.
    • ADMIN 또는 REST_CLIENT 롤이 있는 Oracle Blockchain Platform 사용자에 대한 Oracle Identity Cloud Service 사용자 이름과 비밀번호를 입력합니다. 체인 코드를 호출하려면 REST_CLIENT 롤만 필요합니다. 체인코드를 배치하거나 업그레이드하려면 IDCS 사용자에게도 ADMIN 롤이 지정되어야 합니다. 사용자 및 롤에 대한 자세한 내용은 Oracle Blockchain Platform Enterprise Edition 관리에서 사용자 및 애플리케이션 롤 설정을 참조하십시오.
  3. 생성을 눌러 환경을 저장합니다. 사용자 이름과 암호는 로컬 Visual Studio Code 세션에 임시로 저장됩니다. Visual Studio Code를 닫고 새 Visual Studio Code 세션을 시작하는 경우 사용자 이름과 비밀번호를 다시 입력해야 합니다.

체인코드 배포

  1. 체인코드 창에서 배포할 체인코드 프로젝트를 선택합니다.
  2. 체인 코드 세부정보 창에서 배치를 선택합니다.
  3. 배치 마법사에서 체인코드 프로젝트의 이름을 미리 채워야 합니다.
    • 대상 환경을 선택합니다. 원격 배치의 경우 이전에 설정한 Oracle Blockchain Platform 환경을 선택합니다.
    • 배포할 채널의 이름을 입력합니다.
    • 선택적으로 필요한 초기 파라미터를 설정합니다.
  4. 배치를 누릅니다.
체인코드가 원격 Oracle Oracle Blockchain Platform에 성공적으로 배포된 후 콘솔 로그에 다음 이벤트가 발생했음을 표시합니다.
  • Oracle Blockchain Platform 세부정보가 성공적으로 인출되었습니다.
  • 피어 목록을 성공적으로 인출했습니다.
  • 체인코드 프로젝트가 성공적으로 설치되었습니다.
  • 체인코드 프로젝트가 성공적으로 승인 및 커밋되었습니다.
  • 체인코드가 각 피어 및 채널에 성공적으로 배치되었습니다.

여러 조직이 있는 환경에서 참가자 인스턴스를 통해 동일한 채널에 체인코드를 재배포하려면 콘솔을 사용하여 체인코드를 배포합니다.

체인코드 프로젝트 업그레이드

체인코드 업그레이드는 Blockchain App Builder에서 자동으로 처리됩니다. 체인코드를 변경한 후 다시 배포하면 프로젝트가 자동으로 업그레이드됩니다. 업그레이드 프로세스를 실행할 때 adminList 매개변수에 대해 빈 배열을 전달하거나 adminList 매개변수를 사용하여 토큰 관리자를 추가할 수 있습니다. 최초 배치자가 아닌 경우 adminList 매개변수에 대해 빈 배열을 제공해야 합니다. adminList 매개변수에 대해 빈 배열을 전달하려면 배치 창에서 Init 매개변수 목록을 연 다음 adminList 매개변수 옆에 있는 빼기 기호(–) 단추를 눌러 빈 배열을 선택합니다.

업그레이드가 성공하면 로그에 다음 이벤트가 발생했음을 표시합니다.
  • Oracle Blockchain Platform 세부정보가 성공적으로 인출되었습니다.
  • 피어 목록을 성공적으로 인출했습니다.
  • 체인코드 프로젝트가 이미 설치되어 있는지 여부를 확인하기 위한 검사가 수행되었으며, 설치된 경우 버전이 인출되었습니다.
  • 체인코드 버전이 성공적으로 업그레이드되었습니다(예: 버전 1.0에서 2.0으로 업그레이드).

여러 조직이 있는 환경에서 체인코드를 업그레이드하려면 콘솔을 사용하고 참가자의 체인코드를 수동으로 승인하십시오.

Oracle Blockchain Platform에 수동 배포를 위한 체인코드 프로젝트 패키지화

Oracle Blockchain Platform Cloud 또는 Enterprise Edition에 수동으로 배포하기 위해 체인코드 프로젝트를 패키지화할 수 있습니다.

패키지 함수는 빌드 및 배포 파일만 포함하는 아카이브 파일을 만듭니다. 체인코드 프로젝트의 binary, libs, node_modulestest 폴더는 포함되지 않습니다. 배포를 위해 이 아카이브 파일을 Oracle Blockchain Platform에 수동으로 업로드할 수 있습니다.

  1. 체인코드 창에서 체인코드 프로젝트를 선택합니다.
  2. 마우스 오른쪽 단추를 누르고 패키지를 선택합니다.
  3. 패키지를 저장할 위치를 선택한 후 출력 폴더 선택을 누릅니다.

소프트웨어 필요 조건에 대한 변경 사항으로 인해 TypeScript 체인 코드에 대해 패키지 함수를 실행하면 패키지를 생성할 Oracle Blockchain Platform 인스턴스의 프로비저닝 날짜를 묻는 메시지가 표시됩니다. Blockchain App Builder에서 생성된 TypeScript 체인코드는 기본 인프라를 변경하지 않고 이전 버전의 Oracle Blockchain Platform과 호환되지 않습니다. Blockchain App Builder는 선택에 따라 체인 코드 인프라를 패키지화합니다.

명령이 성공적으로 완료되면 패키지의 위치가 반환됩니다.