7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

知っている限りでは、イーサリアムのスマートコントラクトのトリガーとして考えられるのは

  • 外部アカウントから発動するトランザクション
  • スマートコントラクトのオーナーが直接にスマートコントラクトの関数を呼び出す

ぐらいしかない。

そうでしたら、よく言われている指定の日時になったら、残高をAアカウントに送金する ようなことをどう実現できるかを考えてみます。

「2017/12/01 00:00にアドレスAに10 ETHを送信する」ことを課題とします。

論理的に考えてみる

  • 普通のシステム上でこうしたい時は、あるサーバーに何かしらの手段でタイマーを設定し、2017/12/01 00:00になると、アドレスAに 10 ETH送信するプログラムを実行する流れになる
  • ブロックチェーンの場合は、P2Pネットワークに参加している各ノードが任意のタイミングでネットワークに参加・退出できるので、どのノードに任せるかは全く特定できない
  • 特定できないのもよいので、1つではなく複数個たとえば100個のノードに任せるのはどうでしょう
    • まず100個のノードに任せようとしても、2017/12/01 00:00になった時その100個のノードがどれもネットワークにない可能性は、ゼロではない
    • また、現状の各クライアントアプリは、P2Pネットワークに参加しデータ同期することと、同期できたブロックチェーンのデータとやり取りするAPIを公開することしかやってない

なので、論理上はできないように思います。

スマートコントラクトで考えてみる

  • コントラクトXを作成しておく、コントラクトXの内容は
    • 「2017/12/01 00:00-01:00」の1分間の間、最初にコントラクトXのYメソッドを呼び出すアドレスに 0.5 ETH を送信する
    • Yメソッドが呼び出されたら、アドレスAに 10 ETH を送信する
  • コントラクトXのアドレスに 10.5 ETH送金しておく

のように料金を払う形であれば、「2017/12/01 00:00-01:00の間Yメソッドの呼び出す」約束を守ってくれる可能性が高くなりますが、と言っても、祈っているにすぎない

個人の結論

  • 現状は、分かってないだけかもしれませんが、イーサリアムのスマートコントラクトで 指定日時に、あるアドレスに送金する ようなことは、まだ実現できないようです。
  • もちろん、自分のサーバまたはAWSのラムダを使って、指定日時にあるアドレスに送金するとか、指定日時にコントラクトのメソッドを呼び出すとか、の方法であればできると思いますが、スマートコントラクトだけ でできないことは、ちょっと意外でした。

参考

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?