0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

(WIP) Hyperledger Fabric でチェーンコードを呼ぶときの引数の扱い (Function, Args など)

0
Last updated at Posted at 2019-11-13

取り急ぎ忘れないように、書きかけです。

peer chaincode invoke (query) で呼ぶとき

-c オプションでJSON文字列を指定。
このJSONにはプロパティ Function (メソッド名) と Args (引数) を指定できる。

例えばメソッド f を引数 arg1 および arg2 で呼びたいならこうする:

peer chaincode invoke \
  -o orderer.example.com:7050 \
  -C mychannel \
  -n mycc \
  -c '{"Function":"f", "Args":["arg1","arg2"]}' \
  --waitForEvent

実は、内部ではメソッド名は引数の一部として処理されているので、これと等価である。

peer chaincode invoke \
  -o orderer.example.com:7050 \
  -C mychannel \
  -n mycc \
  -c '{"Args":["f","arg1","arg2"]}' \
  --waitForEvent

基本的には、引数はバイト列の配列としてチェーンコードに渡されるが、文字列の配列として受け取るメソッドなどが用意されている。
なお、プロパティ名はcase insensitiveのようで、Function の代わりに function でも動くことは確認した。
(Args はやってない)

Node.js のクライアント (Hyperledger Fabric SDK for Node.js) で呼ぶとき

古いAPIと新しいのがあるが、ここでは新しいほうの場合を紹介。

ここでは、チェーンコードの実装側は Contract インタフェースを実装して作られていると仮定する。

fabric-network で呼ぶとき

このとき、呼ぶ側は

const response = await contract.evaluateTransaction('f', 'arg1', 'arg2')

とする。いずれも文字列を与える。JSのオブジェクトをそのまま渡せるかと思ったら失敗したので stringify してから渡そう。

このとき、受け取る側はメソッド名に対応するメソッドが自動的に呼ばれる (これは例外的。Goでチェーンコード書いたりしたときは、特に自動ではディスパッチしてくれない。メソッド名は単なる第0引数)
マニュアルには引数は JSON.parse されると書いてあるように自分には読めたが、実際にはただの文字列として渡されるので自分でparseしよう。

ちなみに、上記の Contract を使うチェーンコードではメタデータを渡せて、そこで引数のシグネチャをJSONスキーマで指定できる。
スキーマを指定し、かつそこに object と型が書かれている時には JSON.parse されるらしいが、未確認である。

fabric-client で呼ぶとき

ちょっと忘れたので思い出したら書く

peer chaincode instantiate で指定したとき

最近知ったのだが、Contract ベースで実装したときに呼ぶ初期化メソッドを -c で指定できる。
この場合、-c で指定したメソッド (と引数) が初期化メソッドとしてinstantiate直後に呼ばれることが確認できた。
(instantiateトランザクションと同じトランザクションか別なのかは未確認)

なお、Goで書いたり Chaincode ベースで書いたチェーンコードをinstantiateする場合には、-c で指定した内容が init()Init() に、そのまま配列として渡される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?