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 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

メソッドが1つの引数を使用する場合は、文字列として入力します。たとえば次のようにします。
ochain invoke createSupplier
'{"supplierId":"s01","rawMaterialAvailable":5,"license":"valid supplier","expiryDate":"2020-05-30","active":true}'
もう1つ例を示します。
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コマンドは、<methodName>および<methodArguments>ochain invokeとして渡す場合と同じルールに従います。
  • 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ネットワークに正常にデプロイされたら、「ローカルHyperledger Fabricネットワークでのチェーンコードのテスト」の説明に従ってテストできます。

ブロックチェーン・アプリケーション・ビルダーを使用するかわりに、チェーンコードを手動でデプロイした場合は、チェーンコードをテストする前に、init関数を手動でコールする必要があります。

同じochain invokeおよびochain 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ネットワークでトークン・チェーンコードを実行できます。Postman RESTクライアントなどの任意のRESTプロキシ・クライアントを使用して、チェーンコード・プロジェクトをテストします。

複数のユーザーをテストするには、RESTクライアントの認可パラメータ(ユーザー名とパスワード)を変更するか、Oracle Blockchain Platformの別のインスタンスに接続します。

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 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問合せ全体が引数で取得されるため、問合せを即時に変更できます。構文は、TypeScriptおよびGoチェーンコードによって異なります。前の例に示すように、Go問合せでは、一重引用符ではなく、問合せパラメータに二重引用符を使用します。二重引用符の前にバックスラッシュ文字を付ける必要があります。