最近は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上で作るコントラクトで解決できたよ、という話でした。
手続きは以下の通り
-
Aliceがコントラクトを発行し、同時に有効期限も定める。その時に必要金額全部を送金する。(0.001ETHを100回送る予定なら0.1ETHをコントラクトアドレスへ。
-
Bobはそれを確認し、ちゃんとETHがあるとわかる。
-
BobがTweetしたのを確認したら、Aliceは自分の秘密鍵で0.001ETHを送るメッセージ付きで署名してBobへ送る(コントラクトを経由せず、別の方法で良い)
-
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の実装が待たれるところです。