update.今回作成するものガチャンと壊すタイプのETH貯金箱を作成する。完成品https://github.com/kotaroo0/eth-piggy-box※画像はイメージです。最新版とは異なります。目標額をこえるまでは出金できず、出金すると貯金箱は壊れる。1つのアドレスを1ユーザとし、異なるアドレスを持つ人は異なるユーザとみなす。目標額をいれて、貯金箱を作成する。1ユーザは複数の貯金箱を作成できる。自分の貯金箱に額を指定して貯金ができる。出金は目標額はこえた場合おこなえて、全て引き出される。出金がおわった貯金箱には入金できない。他人の貯金箱には入金できない。テストは余力があればで良い。実装方針として、2通りを思いついた。全ての貯金箱で1コントラクト結論から言うと、私は最初愚直に1で実装していた。これではデプロイ時にかかるgasが大きい。そのため、1つのコントラクトで完結するように変更する。}}この実装では、リストで貯金箱を保持している。そのため、depositやdestroyする際にいちいちループを回して貯金箱を探索している。これはハッシュ構造にして保持した方が賢いと思われる。フロントエンドからハッシュを扱うのがややこしいと思ったりした関係で、リストで実装した。結果的に、ハッシュでよかったと思う。貯金箱を破壊する場合はリエントラントに注意して実装する必要がある。DAO事件でも用いられた。被攻撃コントラクトと攻撃コントラクト間で再帰的に処理が行われる。具体的にはetherを引き出すような処理を行うとき、その処理が終わる前に再帰的にその処理が呼ばれることによって無限にetherが引き出される。対策としては、ロックフラグのようなものを用いることが考えられる。非攻撃コントラクトの処理を呼び出す時、ロックフラグによってその処理を再帰的に呼び出せないようにすることでリエントラントを防ぐことができる。false;残高やisActiveを0にする前に、etherを送金してしまうと再帰的に呼び出されコントラクトのetherをむしりとられてしまう可能性がある。https://medium.com/@yuyasugano/%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%A9%E3%83%B3%E3%83%88-%E5%86%8D%E5%85%A5%E5%8F%AF%E8%83%BD-%E5%86%8D%E8%80%83-a194c80f131fこの記事などわかりやすく解説してある。upLoginユーザーは見つかりませんでした。