今一度ブロックチェーン使って何か出来ないか考えてみた


アウトプット強化週間！ - ショートカット(6)

生き恥晒してがんばって吐き出してきましたが今日で一旦ストップ。

<hr>

#### あらすじ

[Dappを作ってアプリケーションの側面からブロックチェーンのメリットを考えてみた](https://qiita.com/ykato/items/78870ad2e6e70b531526)

(もう一年強前なのか。振り返るとこの頃より実装力はめちゃ上がったような気がする。)

これを書いた後はとんとDappとかスマートコントラクトを作るのからは遠ざかっていた。PlasmaとかOracleとかテクノロジー関係の情報は読んでいたけど、(個人的には)先の記事でやりきっちゃった感があって。
Ethereum使うとマイニング必須になるので、どうしても社内ツールとかプライベートチェーンに使うと「アカウント作ってあげたらとりあえず100年分トークン配っておけばいいかー」みたいな適当な運用になるのがキモいし、あとKVS以上の使い道が浮かんでこなかったのもあって。

#### それからどうした

それからだいぶ時間が経ったところでたまたまHyperLedgerでポイント制のRedmine的な実装をみて、**お、これなら使えそう！**ってなった。

 - マイニングが要らないので各自の端末にgethとかmetamaskとかEthereum用の環境作らなくていい。
 - CochDBが入っているのでKVSよりもっとDBぽい使い方が出来る。トランザクションもはええ

それで何を作ろうかって思ったんだけど、やっぱ本来じゃない使い方のExcelで何とかしているやつを何とかしようと。~~僕はスタンスとしていっつもそればっかりね~~

日報とか作業工数管理をスマートにやるの、思いついたんだ

#### で、作った

![k1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/6cd13b34-fe11-09e5-68d0-ff2625712a57.png)

![k2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189193/d0dcbd31-25b6-2717-d8d2-b9d5cd85c978.png)

うわ中央集権－－－！って部分は一旦おいといて。

強引すぎんですけど、fabric-sampleのコードにexpressを挟んでちょっと弄るとAPI化できるもんで、複数ノード化してAPIの口だけ空けとけば堅牢なDBとして使える！すばらしい！！

```
const express = require("express");
const bodyParser = require("body-parser");
const app = express();

(元のfabric-sampleのコード)

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
  next();
});

app.options('*', (req, res) => {
  res.sendStatus(200);
});

app.use(bodyParser.json());

app.post("/input", (req, res) => {
    const input = req.body;

    console.log(`[${new Date()}] request = [${JSON.stringify(input)}]`);

    const Make   = input.Make;
    const Model  = input.Model;
    const Colour = input.Colour;
    const Owner  = input.Owner;
    const Key    = input.Key;

    console.log(input);

    invoke(Key, Make, Model, Colour, Owner);
    
    res.json("invoke!");
});

app.listen(3000);
```

~~そもそも、なんで分散管理台帳じゃなきゃならないかは答えられないとして~~

GUI画面は

https://github.com/asticode/go-astilectron

で作りました。html書いてデバックして配置すればElectronでWindows/Linuxとクロスコンパイルしてアプリが作れるので大変便利です！

https://github.com/ImVexed/muon

これも良さそう。今度ためしてみる。

他の記事にもあるけどChaincodeをアップデートしたり、うまく動かなかった時に再起動かけるような時はゴッソリ消しこみしないとうまくいかない事が多いのでご注意です。Ethereumと違ってセキュリティ的に気をつける点を除けばがんがんデプロイできるよ！な開発はできないかも。

そもそも、ど下手コーディングでエラー＆トライ開発しかできないのが問題なんだが・・

```
docker rm -f $(docker ps -aq) && docker rmi -f $(docker images | grep dev | awk '{print $3}') && docker volume prune

rm -rf ~/.hfc-key-store ; rm -rf ./hfc-key-store ; rm -rf ./hfc-key-store2 ; cd /root/fabric-samples/first-network ; ./byfn.sh down; cd /root/fabric-samples/fabcar; docker rm -f $(docker ps -aq) ; docker network prune; docker image list | grep fabcar | awk '{print $3}' | xargs docker rmi -
```

あと調べても解消できないエラーで動かないときはdockerとgoのバージョンアップをしてみるといいかもです。僕の環境は以下でちょっと古いとかでも動かなかったです。

```
# docker version
Client: Docker Engine - Community
 Version:           19.03.0-rc3

# go version
go version go1.12.7 linux/amd64
```

<hr>

アウトプットだけでも何かの価値があると思ってたけどそうでもなかったような。Qiitaのソーシャル化が進んだからかなのかなー。いいぞ！って言ってる人みたいなものは見つけられなかった。
(僕の魅せ方が下手なのが一番の要因ですが！！)

とはいえ個人開発上でノウハウ出しするのは継続していきたいなと思う。
折角、ノウハウ全く無いの突破したのにどこにも載せないとかもったいないからね。