Visual Studio 코드를 사용하여 체인 코드 배포Deploy your chaincode using Visual Studio Code

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

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

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

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

블록체인 앱 빌더 체인코드 배포는 Hyperledger Fabric 기본 네트워크, 기타 서비스를 시작하고, 체인코드를 설치 및 배포합니다.

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

체인코드 배포가 완료되면 출력 콘솔에 지정된 채널에 성공적으로 설치 및 배포된 것으로 표시됩니다.

문제 해결

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

Go 권한 누락
로컬 네트워크에 Go 체인코드 프로젝트를 설치하는 동안 Output 콘솔에서 다음과 유사한 오류가 표시될 수 있습니다.
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 인스턴스에 대한 접속 구성 생성

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

  1. Visual Studio 코드 환경 창에서 환경 생성 아이콘을 누릅니다.
  2. 환경 세부정보 마법사에서 다음을 수행합니다.
    • 원격 환경의 이름을 입력합니다.
    • 설명을 입력합니다.
    • 원격 URL에 원격 Oracle Blockchain Platform 인스턴스의 URL을 입력합니다.
    • ADMIN 또는 REST_CLIENT 롤이 있는 Oracle Blockchain Platform 사용자의 Oracle Identity Cloud Service 사용자 이름 및 비밀번호를 입력합니다. 체인 코드를 호출하려면 REST_CLIENT 역할만 필요합니다. 체인코드를 배치하거나 업그레이드하려면 IDCS 사용자에게도 ADMIN 롤이 지정되어야 합니다. 사용자 및 롤에 대한 자세한 내용은 사용자 및 응용 프로그램 롤 설정을 참조하십시오.
  3. 생성을 눌러 환경을 저장합니다. 사용자 이름과 암호는 로컬 Visual Studio Code 세션에 임시로 저장됩니다. Visual Studio Code를 닫고 새 Visual Studio Code 세션을 시작하는 경우 사용자 이름과 암호를 다시 입력해야 합니다.If you close Visual Studio Code and then start a new Visual Studio Code session, you must enter the user name and password again.

체인코드 배포

  1. 체인코드 창에서 배치할 체인코드 프로젝트를 선택합니다.
  2. 체인코드 세부정보 창에서 배치를 선택합니다.
  3. 배치 마법사에서 체인 코드 프로젝트의 이름을 미리 채워야 합니다.
    • 대상 환경 선택 - 원격 배포를 위해 이전에 설정한 Oracle Blockchain Platform 환경을 선택합니다.
    • 배포할 채널의 이름을 입력합니다.
    • 필요한 초기 매개변수를 선택적으로 설정합니다.
  4. 배치를 누릅니다.
체인코드가 원격 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는 선택 사항에 따라 체인 코드 인프라를 패키지화합니다.

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