TL;DR
ブロックチェーンを利用したDappsの開発を勉強中です。
一度サンプルアプリケーションを作ってみたかったので作りました。
とりあえずざっくり作りたかったのでいろいろ適当です。
サービス概要
サービス名は「IRead」としました。
いろいろ勉強で本を読むのですが、読むだけで終わってしまい、読んで得た知見・学んだことを共有できずにいました。
そこでIReadを使って本を読んだ感想文をブロックチェーン上に記録することで、学びの証跡を残せ、それを自分の公開鍵で自分の学びであることを証明できます。
解説
GitHub
使用した技術
- Truffle
- solidity
- react(Next.js)
工夫した点
solidity
肝となるコントラクトコードについてはERC721の規格を継承しています。
OpenZeppelinのコードを継承する形ですね。
このERC721に準拠したsolidityのコードを書く正解がちょっと分かりませんでした。
同じように他の方のERC721トークンの実装を見ると継承しているものの、コントラクトの属性を継承した子のフィールドに直接もってやり取りしているようだったので、それだとonlyOwner制約などの恩恵を受けられないのではと思いました。
なので今回はアプリケーションの属性についてはトークンのメタ情報(tokenURI)にJSON形式で保持することにしました。
実装方針が正しいかどうかは不明なので詳しい方がいれば教えてください。
react
reactについてはてんで素人で書いたので間違い・不正があれば突っ込んでください笑
一点だけ、全トークンを表示するときに、トークンがburnされているとトークンlengthが合わなくなって全件取得できなかったので、
burnされたトークン含め過去発行されたトークンの総数の取得をTrensferイベントから取得しています。
(burnされるとtotalSupply関数で取得されるトークン数も-1される)