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
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、ユーザー名およびパスワードを指定できます。
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
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問合せでは、一重引用符ではなく、問合せパラメータに二重引用符を使用します。二重引用符の前にバックスラッシュ文字を付ける必要があります。