EthereumのコントラクトでPayment Channelを実装してるやーつについて
久々の技術ネタ
最近は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
AliceがBobに1Tweetごとに0.001ETHを贈りたい。だけど毎回確認して送金してると手数料がバカにならない。
Bobも、Tweetしたらちゃんと貰えるのかわからないので不安
という問題が、コントラクトで解決できたよ、という話でした。
手続きは以下の通り
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上で実装できたと言えばそうであるような気がする。
ただ、より低レイヤーのクライアントソフトレベルでやれるようにしたほうが効率やセキュリティの面でいいのかもしれない。(不明)