CLI를 사용하여 체인코드 테스트

체인코드가 네트워크에서 실행 중인 경우 생성된 메소드를 테스트할 수 있습니다. 또한 체인코드 개발 중에 executeQuery 메소드를 생성하도록 선택한 경우 체인코드가 Oracle Blockchain Platform 네트워크에 배포된 경우 SQL 리치 쿼리를 실행할 수 있습니다.

로컬 Hyperledger Fabric 네트워크에서 체인코드 테스트

체인코드 프로젝트가 로컬 네트워크에서 실행되면 테스트할 수 있습니다.

새 셸을 열고 프로젝트 디렉토리로 이동하여 체인코드와 상호 작용합니다. 체인코드를 설치하고 배포한 후 ochain invokeochain query 명령을 사용하여 체인코드 내의 함수에 트랜잭션을 제출할 수 있습니다.

ochain invoke

사용법: ochain invoke <methodName> <methodArguments>

다음은 ochain invoke 명령에서 사용하는 인수 및 옵션입니다.
my-mac:TSProject myname$ ochain invoke -h 
Usage: invoke [options] <methodName> [...args] 
Invoke a Chaincode transaction

Arguments :
    <methodName>  (required) Name of chaincode method to invoke.
    [...args]     (optional) Chaincode method input parameters if any. Parameters should be space separated strings/JSON strings for objects.

Options:
    -h, --help                output command usage information
    -D, --debug               enable debug logging
    -P, --project <path>      (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -c, --channel <channel>   (optional) Blockchain Channel to deploy chaincode to. If not specified, it defaults to the 'default' channel.
    -u, --username <username> (optional, if -r option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.
    -s, --sign <password>     (optional) Password to authenticate user.
    -r, --url <url>           (required) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain invoke <method>
(without chaincode initial arguments)  
$> ochain invoke <method> '{"manufacturerId":"m01","rawMaterialAvailable":9,"productsAvailable":4,"completionDate":"05-26-2020"}'
(for a single parameter)
$> ochain invoke <method> 's01' 's10'
$> ochain invoke <method> 's01' '{"manufacturerId":"m01","rawMaterialAvailable":9,"productsAvailable":4,"completionDate":"05-26-2020"}'
(for multiple parameters)
$> ochain invoke <method> 's01' 's10' -r <url of the remote OBP instance> -u <username> -s <password>
(for remote invocation)

Mac OSX 및 Linux

메소드가 하나의 인수를 사용하는 경우 문자열로 입력합니다. 예:
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
또 다른 예제는 다음과 같습니다.
ochain invoke getSupplierDetails 's01'
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
메소드가 둘 이상의 인수를 사용하는 경우 공백으로 구분해야 합니다. 예:
ochain invoke getSupplierByRange 's01' 's03'
포함된 주소 자산을 사용하는 직원 자산과 같이 체인코드에 자산을 포함시킨 경우:
name: employee
  properties:
     name: employeeId
     type: string
     mandatory: true
     id: true

     name: firstName
     type: string
     validate: max(30)
     mandatory: true

     name: lastName
     type: string
     validate: max(30)
     mandatory: true

     name: age
     type: number
     validate: positive(),min(18)

     name: address
     type: address
name: address

type: embedded

properties:
   name: street
   type: string

   name: city
   type: string

   name: state
   type: string

   name: country
   type: string
다음과 유사한 항목을 사용하여 체인 코드를 호출합니다.
ochain invoke createEmployee '{"employeeID":"e01", "firstName":"John", "lastName":"Doe", 
"age":35, "address":{"street":"Elm Ave", "city":"LA", "state":"California", "country":"US"}}'

Windows 명령 프롬프트는 작은 따옴표(')를 허용하지 않으므로 모든 인수는 큰 따옴표(")로 묶어야 합니다. 큰 따옴표를 포함하는 인수는 이스케이프해야 합니다.

예:
ochain invoke createSupplier
"{\"supplierId\":\"s01\",\"rawMaterialAvailable\":5,\"license\":\"valid
supplier\",\"expiryDate\":\"2020-05-30\",\"active\":true}"
메소드가 둘 이상의 인수를 사용하는 경우 공백으로 구분해야 합니다. 예:
ochain invoke getSupplierByRange "s01" "s03"
위에 표시된 대로 포함된 주소 자산을 사용하는 직원 자산과 같이 체인코드에 자산을 포함시킨 경우 다음과 유사한 기능을 사용하여 체인코드를 호출할 수 있습니다.
ochain invoke createEmployee "{\"employeeID\":\"e01\", \"firstName\":\"John\", 
\"lastName\":\"Doe\", \"age\":35, \"address\":{\"street\":\"Elm Ave\", \"city\":\"LA\", 
\"state\":\"California\", \"country\":\"US\"}}"

평가

지정 파일에 지정된 검증에 대해 메소드 인수가 검증됩니다. 검증이 실패하면 오류가 출력에 나열됩니다.

성공적으로 호출되면 다음과 유사한 로그가 표시됩니다.
========== Started Invoke Chaincode ==========
[2020-06-23T18:37:54.563] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-06-23T18:37:56.619] [INFO default - The chaincode invoke transaction has been committed on peer localhost:7051
[2020-06-23T18:37:56.619] [INFO] default - The chaincode invoke transaction was valid.
[2020-06-23T18:37:56.620] [INFO default - Successfully sent transaction to the orderer.
[2020-06-23T18:37:56.620] [INFO] default - Successfully invoked method "createSupplier" on chaincode "TSProject" on channel "mychannel"
[2020-06-23T18:37:56.620] [INFO] default - 
========== Finished Invoke Chaincode ==========

ochain query

사용법: ochain query <methodName> <methodArguments>

다음은 ochain query 명령에서 사용하는 인수 및 옵션입니다.
my-mac:TSProject myname$ ochain query -h 
Usage: query [options] <methodName> [...args] 
Invoke a Chaincode Query.

Arguments :
    <methodName>     (required) Name of chaincode method to invoke.
    [...args]        (optional) Chaincode method input parameters if any. Parameters should be space separated strings/JSON strings for objects.

Options:
    -h, --help                output command usage information
    -D, --debug               enable debug logging
    -P, --project <path>      (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -c, --channel <channel>   (optional) Blockchain Channel to deploy chaincode to. If not specified, it defaults to the 'default' channel.
    -u, --username <username> (optional, if -r option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.
    -s, --sign <password>     (optional) Password to authenticate user.
    -r, --url <url>           (required) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain query <method>
(without chaincode initial arguments)
$> ochain query <method> s01
(for a single parameter)
$> ochain query <method> 's01' 's10'
$> ochain query <method> 's01' '{"manufacturerId":"m01"}'
(for multiple parameters)
$> ochain query <method> 's01' 's10' -r <url of the remote OBP instance> -u <username> -s <password>
(for remote query)
ochain query 명령은 ochain invoke와 동일한 <methodName><methodArguments> 전달 규칙을 따릅니다.
  • Mac OSX 및 Linux에서는 작은 따옴표를 사용할 수 있으며 인수 내에서 따옴표를 이스케이프할 필요가 없습니다.
  • Windows에서는 모든 인수가 큰 따옴표로 묶어야 하며 인수 내의 모든 따옴표는 이스케이프되어야 합니다.

로컬로 여러 토큰 사용자 테스트

로컬에서 여러 사용자가 있는 토큰 프로젝트를 테스트하려면 tokenUser 속성을 사용하여 각 트랜잭션의 호출자를 변경할 수 있습니다. 모든 스캐폴드 체인코드 프로젝트에는 체인코드의 메타데이터를 저장하는 .ochain.json 파일이 포함됩니다. .ochain.json 파일에서 tokenUser 필드의 값을 업데이트하여 호출자를 변경합니다.

{
  "name": "digiCurrCC",
  "description": "Chaincode package for digiCurrCC",
  "chaincodeName": "digiCurrCC",
  "chaincodeType": "node",
  "configFileLocation": "/Users/user1/token.yml",
  "appBuilderVersion": "21.2.3",
  "nodeVersion": "v12.18.1",
  "tokenUser": "admin"
}

프로젝트가 스캐폴딩되면 tokenUser 등록 정보가 로컬 네트워크의 기본 admin 사용자로 설정됩니다. 트랜잭션의 호출자를 변경하려면 tokenUser 속성을 createAccount(TypeScript) 또는 CreateAccount(Go) 메소드가 호출될 때 계정이 생성될 때 설정된 user_id 속성과 일치하도록 변경합니다.

업데이트 후 자동 설치 및 배포

체인코드를 업데이트할 때마다 변경 사항이 로컬 네트워크에 배포될 때 자동으로 컴파일, 설치 및 배포됩니다. 로컬 네트워크를 제거하거나 다시 가져올 필요가 없습니다. 모든 프로젝트는 모든 변경 사항에 따라 자동으로 컴파일되고 배포됩니다.

원격 Oracle Blockchain Platform 네트워크에서 체인코드 테스트

체인코드 프로젝트가 원격 Oracle Blockchain Platform 네트워크에 성공적으로 배포된 후 Test Your Chaincode on a Local Hyperledger Fabric Network에 설명된 대로 테스트할 수 있습니다.

블록체인 앱 작성기를 사용하는 대신 수동으로 체인코드를 배포한 경우 체인코드를 테스트하기 전에 init 함수를 수동으로 호출해야 합니다.

동일한 ochain invokeochain query 명령을 사용하여 원격 Oracle Blockchain Platform Cloud 또는 Enterprise Edition 네트워크에서 모든 메소드 트랜잭션을 수행할 수 있습니다. 로컬 네트워크에서 지원되는 모든 항목은 원격 네트워크에서도 지원됩니다. 원격 Oracle Blockchain Platform 인스턴스(-r), 사용자 이름(-u) 및 비밀번호(-s) 옵션의 URL을 명령에 전달합니다.

ochain invoke createSupplier 
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid 
supplier","expiryDate":"2020-05-30","active":true}' -r 
[https://%3cblockchain-instance-url%3e:7443/]https://<blockchain-instance-url>:7443/ 
-u idcqa -s password

원격 Oracle Blockchain Platform 네트워크에서 토큰 프로젝트 테스트

블록체인 앱 빌더, Oracle Blockchain Platform REST 프록시 또는 Hyperledger Fabric SDK를 사용하여 토큰과 함께 작동하는 체인코드 프로젝트를 테스트할 수 있습니다.

블록체인 앱 작성기

블록체인 앱 빌더 CLI를 사용하여 여러 사용자와 트랜잭션을 호출하여 토큰 체인코드를 테스트할 수 있습니다.

여러 유저로 테스트하려면 invoke 및 query 명령의 권한 부여 파라미터(유저 이름 및 암호 옵션)를 변경합니다.

Oracle Blockchain Platform REST 프록시

Oracle Blockchain Platform의 REST 프록시를 사용하여 원격 Oracle Blockchain Platform 네트워크에서 토큰 체인코드를 실행할 수 있습니다. 모든 REST 프록시 클라이언트(예: Postman REST 클라이언트)를 사용하여 체인코드 프로젝트를 테스트합니다.

여러 사용자를 테스트하려면 REST 클라이언트에서 권한 부여 매개변수(사용자 이름 및 비밀번호)를 변경하거나 다른 Oracle Blockchain Platform 인스턴스에 접속하십시오.

Berkeley DB SQL Rich Query 실행

체인코드 개발 중에 executeQuery 메소드를 생성하도록 선택한 경우 체인코드가 Oracle Blockchain Platform 네트워크에 배포된 경우 SQL 리치 쿼리를 실행할 수 있습니다.

사양 파일의 customMethods 섹션에서 executeQuery를 사용한 경우 해당 executeQuery 메소드가 컨트롤러에 생성됩니다.

사양 파일:
customMethods:
    - executeQuery
    - "fetchRawMaterial(supplierid: string, rawMaterialSupply: number)"
    - "getRawMaterialFromSupplier(manufacturerId: string, supplierld: string, rawMaterialSupply: number)"
    - "createProducts(manufacturerId: string, rawMaterialConsumed: number, productsCreated: number)"
    - "sendProductsToDistribution()"
컨트롤러 파일:
**
*
* BDB sql rich queries can be executed in OBP CS/EE.
* This method can be invoked only when connected to remote OBP CS/EE network.
*
*/
@Validator(yup.string())
public async executeQuery(query: string) {
    const result = await this.query(query);
    return result;
}

이 메소드를 호출하여 Oracle Blockchain Platform 네트워크에서 Berkeley DB SQL 서식 있는 질의를 실행할 수 있습니다. 그러면 -r, -u-s 옵션을 사용하여 각각 원격 Oracle Blockchain Platform 인스턴스 URL, 사용자 이름 및 비밀번호를 지정할 수 있습니다.

TypeScript에 대한 예제 질의:
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, '$.rawMaterialAvailable') = 4" -r 
[https://%3cblockchain-instance-url%3e:7443/]https://<blockchain-instance-url>:7443/ 
-u idcqa -s password
Go에 대한 예제 질의:
ochain query  executeQuery "SELECT key, valueJson FROM <STATE> WHERE 
json_extract(valueJson, \"$.rawMaterialAvailable\") = 4" -r 
[https://%3cblockchain-instance-url%3e:7443/]https://<blockchain-instance-url>:7443/ 
-u idcqa -s password

전체 SQL query가 인수에서 수행되므로 즉시 query를 변경할 수 있습니다. 구문은 TypeScript 및 Go 체인 코드와 다릅니다. 이전 예제에 표시된 것처럼 Go query는 query 파라미터에 작은 따옴표 대신 큰 따옴표를 사용합니다. 큰따옴표 앞에 백슬래시 문자가 와야 합니다.