先日スマートコントラクトの勉強をしたので、今度は実際のネットワーク上で動くDappを作成してみました。
まず最初に考えたのが、ダウトゲームのようなもの。
カードを置く度にetherをbetしていき、ダウトを当てた人がbetしたetherを総取りするようなイメージです。
不正できないから、decentralizedな一度始めたら勝者が決まるまでやめられないゲームになるのではないかと。
ところが、実際にスマートコントラクトを作成してみると、以下の問題に直面し、まともに動くものが作れそうではありませんでした。
- ユーザー毎に予測不能なランダムの手札(数字の配列)をsolidityでは作ることができない。(擬似的なものは作れる)
- 誰もダウトしないorダウトが成立しなかった場合にはシステム側で勝者をブロックチェーンに記録しなければならないが、コントラクト側で自動に記録することができない(誰かgasを支払う必要があるため)。また手動で記録する場合には、勝者を記録する人のインセンティブがないので不正ができてしまう。
- ループが増えてしまい、gas limitに引っかかっているからなのかデプロイできない
- 手数料が高騰しているため、betする度に手数料を払うのが厳しい。
コントラクト側ではあまり複雑なことはさせるべきではないのかもしれません。
なので、シンプルに情報を記述、参照するだけのアプリケーションを作ることとしました。
実際に作成したのがこちら。
http://ether-profiles.tanakas.org/
Testnet上でEthereumのアドレスにプロフィールを紐づけてBlockchain上に記録することで、このアドレスは自分のものだぜ!と主張するだけのDappです。
フロント側はAngular5を使用し、SPAとしました。
今回Dappを作るにあたり、データを書き込み、参照をする際には自身で立てたnodeを経由するのではなくMetamaskを利用しましたが、Metamaskを利用していない一般ユーザがサイトに訪問した場合でも、ブロックチェーン上のデータを参照できるようにEthereumホスティングサービスであるInfuraというサービスを使っています。
https://infura.io
自身でnodeを立てる必要がないのでとても便利です。
Truffleでコンパイル、デプロイするときにもInfuraが使えます。
http://truffleframework.com/tutorials/using-infura-custom-provider
テストネットにデプロイしたら、動作確認する為にテストネットワークのコインが必要になるので、各テストネットワークのコインの取得方法はqiitaにまとめておきました。
https://qiita.com/biga816/items/ac762faf5d9334aeeabd
テストネットのコインを取得して、ぜひ使ってみてください。
Akihiro Tanaka
In 2013, I met Bitcoin and started to work on blockchain-related development in 2018, developing an entertainment DApp for underground idols, a blockchain analysis tool, and an STO platform.
Currently, I am working as a Smart Contract Engineer at Secured Finance, developing a DeFi product.
WEB: https://tanakas.org/
最新記事 by Akihiro Tanaka (全て見る)
- Euler Financeハッキング事件はなぜ起きたのか - 2023-04-19
- Upgradeableなスマートコントラクトは分散化していると言えるのか - 2022-12-01
- ERC1167(Minimal Proxy Contract)で実装するERC20のFacrotyコントラクト - 2020-01-02