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 기본 네트워크, 기타 서비스를 시작하고, 체인코드를 설치 및 배포합니다.
- 체인코드 세부정보 창에서 배치를 선택합니다.
- 배치 마법사에서 다음을 수행합니다.
- 올바른 체인 코드 이름이 선택되었는지 확인하십시오.
- 대상 환경 선택 - 로컬 배치에 대해 로컬 환경을 선택합니다.
- 배치하고자 하는 채널을 선택하십시오. "
mychannel
"라는 채널은 기본적으로 확장 기능의 설치로 생성되며 테스트에 사용할 수 있습니다. - 필요한 초기 파라미터를 선택적으로 입력합니다.
- 토큰 프로젝트의 경우 처음 배포할 때 토큰 관리자 목록을 매개변수로 입력해야 합니다. 이 목록은 토큰 관리자를 지정하는
{user_id, org_id}
정보의 배열입니다. 로컬 Hyperledger Fabric 네트워크의 경우org_id
필드에Org1MSP
값을 사용합니다. NFT 체인코드의 경우adminList
매개변수의 키는 TypeScript의 경우userId
,orgId
, Go의 경우UserId
, Go의 경우OrgId
입니다. 처음 배치한 후adminList
매개변수에 대해 빈 배열을 제공하거나adminList
매개변수를 사용하여 토큰 관리자를 추가할 수 있습니다. 첫번째 배치자가 아닌 다른 배치자는adminList
매개변수에 대해 빈 배열을 제공해야 합니다. 이렇게 하려면 배포 창에서Init
매개변수 목록을 열고 빈 배열을 선택하는adminList
매개변수 옆에 있는 빼기 기호(-) 단추를 누릅니다.
- 배치를 누릅니다.
체인코드 배포가 완료되면 출력 콘솔에 지정된 채널에 성공적으로 설치 및 배포된 것으로 표시됩니다.
문제 해결
로컬 네트워크에서 체인코드 프로젝트를 실행할 때 다음 문제가 발생할 수 있습니다.
- 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
- 배치 실패
- 배치 실패, 손상된 배치, 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 인스턴스가 작동되어 실행 중이어야 합니다.
- Visual Studio 코드 환경 창에서 환경 생성 아이콘을 누릅니다.
- 환경 세부정보 마법사에서 다음을 수행합니다.
- 원격 환경의 이름을 입력합니다.
- 설명을 입력합니다.
- 원격 URL에 원격 Oracle Blockchain Platform 인스턴스의 URL을 입력합니다.
ADMIN
또는REST_CLIENT
롤이 있는 Oracle Blockchain Platform 사용자의 Oracle Identity Cloud Service 사용자 이름 및 비밀번호를 입력합니다. 체인 코드를 호출하려면REST_CLIENT
역할만 필요합니다. 체인코드를 배치하거나 업그레이드하려면 IDCS 사용자에게도ADMIN
롤이 지정되어야 합니다. 사용자 및 롤에 대한 자세한 내용은 사용자 및 응용 프로그램 롤 설정을 참조하십시오.
- 생성을 눌러 환경을 저장합니다. 사용자 이름과 암호는 로컬 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.
체인코드 배포
- 체인코드 창에서 배치할 체인코드 프로젝트를 선택합니다.
- 체인코드 세부정보 창에서 배치를 선택합니다.
- 배치 마법사에서 체인 코드 프로젝트의 이름을 미리 채워야 합니다.
- 대상 환경 선택 - 원격 배포를 위해 이전에 설정한 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_modules
및 test
폴더는 포함되지 않습니다. 배포를 위해 이 아카이브 파일을 Oracle Blockchain Platform에 수동으로 업로드할 수 있습니다.
- 체인코드 창에서 체인코드 프로젝트를 선택합니다.
- 마우스 오른쪽 단추를 누르고 패키지를 선택합니다.
- 패키지를 저장할 위치를 선택하고 출력 폴더 선택을 누릅니다.
소프트웨어 필요 조건에 대한 변경 사항으로 인해 TypeScript 체인 코드에 대해 패키지 함수를 실행할 때 패키지를 생성할 Oracle Blockchain Platform 인스턴스의 프로비전 날짜를 묻는 메시지가 표시됩니다. Blockchain App Builder에서 만든 TypeScript 체인코드는 기본 인프라를 변경하지 않고 이전 버전의 Oracle Blockchain Platform과 호환되지 않습니다. Blockchain App Builder는 선택 사항에 따라 체인 코드 인프라를 패키지화합니다.
명령이 성공적으로 완료되면 패키지 위치가 반환됩니다.