LoginSignup
13
3

More than 5 years have passed since last update.

EthereumのコントラクトでPayment Channelを実装してる記事について

Last updated at Posted at 2017-06-28

最近はBitcoinも送金手数料が高くなっているらしく、当初言われていたような「マイクロペイメントに使える!!」も無効化されそうな勢い。

Ethereumも高騰しているので、何回も何回も送金してたら手数料がかかりまくる。

PaymentChannelはビットコイン用に考案されてマイクロペイメントの技術だが、Ethereumにも適用されようとして開発が進んでいるらしい。(Raidenネットワーク)

とは言え、そんなの作らなくてもPaymentChannel作れるよ、と言う記事があった。

Ethereum Payment Channel in 50 Lines of Code – Matthew Di Ferrante – Medium

Mediumのこの記事が面白そうだったので読んでみた。コードもわかりやすかった

Githubに全部載ってる

GitHub - mattdf/payment-channel: Ethereum Payment Channel in 50 lines of code

コードは50行ほどで難しくはないのですが、全部解説みたいのが面倒くさかったのでだいたいの流れをまとめてみます。

最初

[目的]
AliceがBobに1Tweetごとに0.001ETHを贈りたい。だけど毎回確認して送金してると手数料がバカにならない。
また、Bobも、Tweetしたらちゃんと貰えるのかわからないので不安

という問題が長らく暗号通貨の世界の信頼性問題としてありました。サードパーティーの企業や個人を仲介するやり方はありますが、それではブロックチェーンのtrustless(信用しなくても信頼できるプロトコル)の理念に反します。

今回はこの問題が、Ethereum上で作るコントラクトで解決できたよ、という話でした。

手続きは以下の通り

  1. Aliceがコントラクトを発行し、同時に有効期限も定める。その時に必要金額全部を送金する。(0.001ETHを100回送る予定なら0.1ETHをコントラクトアドレスへ。

  2. Bobはそれを確認し、ちゃんとETHがあるとわかる。

  3. BobがTweetしたのを確認したら、Aliceは自分の秘密鍵で0.001ETHを送るメッセージ付きで署名してBobへ送る(コントラクトを経由せず、別の方法で良い)

  4. BobがさらにTweetをし続けたら、Aliceは0.002ETHに署名,0.003ETHに署名、と署名付きメッセージを更新してBobへ送信する。

出金方法

・Bobは任意の時点で出金できる。(Aliceにもらった署名付きメッセージとBob自身の署名をコントラクトに送信する。)

ただし、出金できる量はAliceが署名した時のETHの量までなので、0.001ETHに対してしか署名していなければ0.001ETHしか得られない。

・Aliceは任意の時点で出金はできないが。最初に定めたコントラクトの有効期限を超えた場合には残っている分を全額出金できる。

メモ

以上のやりとりがマイクロペイメントチャネルと同じっぽいので、Ethereum上で実装できたと言えばそうであるような気がする。

マイクロペイメントチャネルの解説はこちらが詳しい
Layer2解説 第1回 マイクロペイメントチャネル - 25歳海外駐在員の暗号通貨ルポ

Bitcoinでの2-of-2マルチシグ、LocktimeなどをEthereumコントラクト上で実現できているわけですね。

ただ、より低レイヤーのクライアントソフトレベルでやれるようにしたほうが効率やセキュリティの面でいいのかもしれない。(不明)

ともかくも、早くLightning NetworkやRaiden Networkの実装が待たれるところです。

13
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
13
3