CLIを使用したチェーンコードのテスト

チェーンコードがネットワーク上で実行されている場合は、生成されたメソッドをテストできます。また、チェーンコードの開発中にexecuteQueryメソッドの作成を選択した場合、チェーンコードがOracle Blockchain Platformネットワークにデプロイされていれば、SQLリッチ問合せを実行できます。

ローカルHyperledger Fabricネットワークでのチェーンコードのテスト

チェーンコード・プロジェクトがローカル・ネットワークで実行されたら、それをテストできます。

新しいシェルを開き、チェーンコードと連携するプロジェクト・ディレクトリに移動します。チェーンコードをインストールしてインスタンス化した後、ochain invokeおよびochain 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 array of JSON strings or a string for single parameter.

Options:
    -h, --help               output command usage information
    -D, --debug              enable debug logging
    -P, --project            (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -d, --obp-dev-package    (optional) Path to the downloaded and unzipped Oracle Blockchain Development Package. If not specified, it defaults to 'CURRENT_DIRECTORY/obp'.
    -c, --channel            (optional) Blockchain Channel to deploy chaincode too. If not specified, it defaults to the 'default' channel.
    -u, --username           (optional, if -d option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.

Examples:
$> ochain invoke <method>
without chaincode initial arguments
$> ochain invoke <method> {"manufacturerld":"m01","rawMaterialAvailable":9,"productsAvailable":4,"completionDate":-05-26-2020"}'
for a single parameter
$> ochain invoke <method> ['s01','sl0']
for multiple parameters

Mac OSXおよびLinux

メソッドが1つの引数を使用する場合は、文字列として入力します。例:
> 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

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 array of JSON strings or a string for single parameter.

Options:
    -h, --help               output command usage information
    -D, --debug              enable debug logging
    -P, --project            (optional) Path to Chaincode project to deploy. If not specified, it defaults to current directory.
    -d, --obp-dev-package    (optional) Path to the downloaded and unzipped Oracle Blockchain Development Package. If not specified, it defaults to 'CURRENT_DIRECTORY/obp'.
    -c, --channel            (optional) Blockchain Channel to deploy chaincode too. If not specified, it defaults to the 'default' channel.
    -u, --username           (optional, if -d option is applied) A user name that has install chaincode privileges. Contact your administrator for more details.

Examples:
$> ochain query <method>
without chaincode initial arguments
$> ochain query <method> s01
for a single parameter
$> ochain query <method> 's01','{"manufacturerId":"m01"}'
for multiple parameters
ochain queryコマンドは、<methodName>および<methodArguments>ochain invokeとして渡す場合と同じルールに従います。
  • Mac OSXおよびLinuxでは、一重引用符を使用でき、引数内で引用符をエスケープする必要はありません。
  • Windowsでは、すべての引数を二重引用符で囲み、引数内の引用符をエスケープする必要があります。

更新後の自動インストールおよびインスタンス化

チェーンコードを更新するたびに、変更はローカル・ネットワークにデプロイされるときに自動的にコンパイル、インストールおよびインスタンス化されます。ローカル・ネットワークを削除したり、再度起動したりする必要はありません。すべてのプロジェクトは、変更のたびに自動的にコンパイルおよびデプロイされます。

リモートOracle Blockchain Platformネットワークでのチェーンコードのテスト

チェーンコード・プロジェクトがリモートOracle Blockchain Platformネットワークに正常にデプロイされたら、「ローカルHyperledger Fabricネットワークでのチェーンコードのテスト」の説明に従ってテストできます。

同じochain invokeおよびochain queryコマンドを使用して、リモートのOracle Blockchain Platform CloudまたはEnterprise Editionネットワークですべてのメソッド・トランザクションを実行できます。ローカル・ネットワークでサポートされているすべてのトランザクションもリモート・ネットワークでサポートされています。Oracle Blockchain Platform接続プロファイルをオプション(-d)としてコマンドに渡すだけです。

> ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid
supplier","expiryDate":"2020-05-30","active":true}' -d
/Blockchain/DevTools/bp1/oraclebp1-instance-info

Berkeley DB SQLリッチ問合せの実行

チェーンコードの開発中に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 OchainController.query(query); 
    return result;
}

このメソッドを呼び出して、Oracle Blockchain Platformネットワーク上でBerkeley DB SQLリッチ問合せを実行し、-dオプションを使用してダウンロード済接続プロファイルの場所を指定します。

例:
> ochain query executeQuery "SELECT key, valueJson FROM <STATE> WHERE
json_extract(valueJson, '$.rawMaterialAvailable') = 4" -d
/Blockchain/DevTools/bp1/oraclebp1-instance-info

SQL問合せ全体が引数で取得されるため、問合せを即時に変更できます。