Amazon Managed Blockchainで構築したブロックチェーンネットワークで`deleteState` が機能してない？

Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築して、チェーンコードの実装をしていて気になったのでメモ。

## 検証環境

### ローカル

下記を参考に構築したfabric-sampleのbasic-network。
Hyperledger FabricのバージョンはAmazon Managed Blockchainに合わせるため、下記コマンドで`v1.2.1` を利用しました。

```console
> 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://qiita.com/kai_kou/items/e02e34dd9abb26219a7e


## 検証で利用したコード

TypeScriptで実装。実装方法は下記を参考ください。

Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた - Qiita
https://qiita.com/kai_kou/items/e02e34dd9abb26219a7e


```ts
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://qiita.com/kai_kou/items/e02e34dd9abb26219a7e

Amazon Managed BlockchainでHyperledger Fabricのブロックチェーンネットワークを構築してみた - Qiita
https://qiita.com/kai_kou/items/e02e34dd9abb26219a7e