cryptocurrencyDataBaseJavaScriptMySQLnode.jsRootADAプログラム

Node.jsでBlockchainを作成

コードは酒井潤氏のUdemyの講座のpythonのコードをnodejsに書き換えたものなので、もしエラーが発生したとしましたら、私の書き換えたコードに問題があります。また著作権は酒井さんにあるので、コードについての質問は答えられませんのでご理解の程よろしくお願いいたします。

フレームワークはexpressを使用。テンプレートエンジンにはpugを使用。walletのUIにはbootstrap4、ほかJSライブラリを使いました。pythonで使用していたライブラリはnodejsではsemaphoreはAsyncLockを使用、暗号化に関してはcrypto、elliptic、base-58、ripemd160。requestsはrequest、サーバー起動時の入力引数処理にargparseを使用しました。

またcacheやtransaction_poolは簡単なmongoDBを使おうと思いましたが、データの保全性やトランザクション処理を考えてMySQLを使用しました。サーバー負荷を考えchainにはtransaction情報を別テーブルで作成し数値で紐づけしました。これは本来のブロックチェーンの使用法とは違うのでサーバー負荷を見ながら後にchainテーブルに統合させます。

他にもallメソッドはeveryで代用しましたし、pythonとjavascriptではエラー処理が違うところがありpythonで使用していたtry構文が使用できないところがあります。

calculateと所有コインが0以下の場合の処理、p2pは未実装です。calculate時間を見つけて実装していきます。所有コイン0以下の処理は実装すると試しに何もできなくなるのでしばらくはこのままいきます。p2pに関してはサーバーを借りなければいけないので金銭的に余裕が出来てからの実装か、クライアントアプリでの実装になるので、時間がかかりますが実装していきたいと思います。

上記のように多々違う点がありますのでエラーが発生するかもしれませんが、私の勉強不足によるものなのでご了承くださいませ。nodejsですと同期処理に手間がかかるのと、酒井さんのコードはエラーなく動きますので初学者さんはpythonを使った方が良いでしょう。

ちなみに同期処理にはasync-awaitではなく慣れ親しんだreturn new Promiseを多用したのでコードが読みにくくなりました。これは時間を見つけてasync-awaitに置き換えていきます。

今後の予定と致しまして、秘密鍵からのwalletの復元。transactionテーブルをchainのtransactionカラムに統合。サーマル木の追加。POSに移行。p2p。簡易疑似取引所などを実装していきたいと思います。これは現時点での自分のスキル不足もありますので、時間をかけて取り組んでいきたいと考えております。

告知無しにアップデートやサーバー保守の為、頻繁にメンテナンス状態になりますが、サイトこちらになります。

コメントを残す