Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築して、チェーンコードの実装をしていて気になったのでメモ。
検証環境
ローカル
下記を参考に構築したfabric-sampleのbasic-network。
Hyperledger FabricのバージョンはAmazon Managed Blockchainに合わせるため、下記コマンドでv1.2.1
を利用しました。
> curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.1 1.2.1 0.4.10
Hyperledger Fabricを動かしてみよう (v1.4/v1.3/v1.2.1対応版) – Qiita
https://qiita.com/miki110/items/7f4ef59b43c63aa7b754
Amazon Managed Blockchain
下記を参考に構築したネットワークタイプが「starter」のネットワーク。
Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた – Qiita
https://cloudpack.media/46963
検証で利用したコード
TypeScriptで実装。実装方法は下記を参考ください。
Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた – Qiita
https://cloudpack.media/46963
import { Shim, ChaincodeInterface, ChaincodeStub, ChaincodeResponse, } from 'fabric-shim'; class Chaincode implements ChaincodeInterface { async Init(stub: ChaincodeStub): Promise<ChaincodeResponse> { return Shim.success(); } async Invoke(stub: ChaincodeStub): Promise<ChaincodeResponse> { let ret = stub.getFunctionAndParameters(); const {fcn, params} = stub.getFunctionAndParameters(); const method = (this as any)[fcn]; if (!method) { throw new Error('Received unknown function ' + ret.fcn + ' invocation'); } try { let payload = await method(stub, params); return Shim.success(payload); } catch (err) { return Shim.error(err); } } async queryHoge(stub: ChaincodeStub, args: string[]): Promise<Buffer> { if (args.length != 1) { throw new Error('Incorrect number of arguments'); } let key = args[0]; let valueAsBytes = await stub.getState(key); if (!valueAsBytes || valueAsBytes.toString().length <= 0) { throw new Error(key + ' does not exist: '); } return valueAsBytes; } async saveHoge(stub: ChaincodeStub, args: string[]): Promise<void> { if (args.length != 1) { throw new Error('Incorrect number of arguments'); } let hoge = JSON.parse(args[0]); await stub.putState(hoge.key, Buffer.from(JSON.stringify(hoge))); } async deleteHoge(stub: ChaincodeStub, args: string[]): Promise<void> { if (args.length != 1) { throw new Error('Incorrect number of arguments.'); } let key = args[0]; await stub.deleteState(key); } }; Shim.start(new Chaincode());
動作確認
動作確認するとローカルのネットワークだとdeleteHoge
で呼び出しているstub.deleteState(key);
でステートDBの指定したキーの情報が削除されました。
Amazon Managed Blockchainのネットワークだと、stub.deleteState(key);
を呼び出すと正常終了するものの、ステートDBの指定したキーの情報が削除されずそのままとなります。
Amazon Managed BlockchainのネットワークでPeerノードのストレージ容量が枯渇する問題を抱えてたりするので、なにかしら環境に問題があると信じたいところです。。。
新しい情報が得られたら追記予定です。
参考
Hyperledger Fabricを動かしてみよう (v1.4/v1.3/v1.2.1対応版) – Qiita
https://qiita.com/miki110/items/7f4ef59b43c63aa7b754
Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた – Qiita
https://cloudpack.media/46963
元記事はこちら
「Amazon Managed Blockchainで構築したブロックチェーンネットワークで'deleteState'が機能してない?」