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
> 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問合せ全体が引数で取得されるため、問合せを即時に変更できます。