Ethereumの入金検知はツラいよ?

これは ビットバンク株式会社 Advent Calendar 2020 の 25 日目の記事です。

はじめに

どうも、ビットバンクのチーフビットコインオフィサーのジョナサンです。

ビットコインが肩書に入っているにも関わらず、ビットコイン以外の通貨のシステムに関わることが多々あります。
今回は入金検知システム全体の刷新に伴い、Ethereumの入金検知システムも作り直しました。
その一部始終及びその過程の上で考えたEthereumの改善について話します。
(2020/12/23の現時点ではまだシステムの移行自体は行っておりません。移行時はサービス面にて予めアナウンスさせて頂きます!)

入金検知ツラたん

痛いほど分かってきたことがある。

Ethereumは仕組みとしてスマートコントラクト無しでの入金検知に向いていません。

ま…そりゃそうだろ、と思う方もいるはずだ。

しかし、皆さんがDeFiや次のスマコン革命に想いを馳せている横で、大量の取引所間送金が邪魔をしている。

その大きな原因を考えよう。

100人のユーザーがいて、それぞれ1回ずつETHを入金してきたとする。
殆どの入金システムはホットウォレットを作り、ユーザーごとにアカウント(EOA)を発行し表示する。
入金を検知すれば、それを中央的な(コールドウォレット)アカウントにまた転送する。
最善のケースでも、各ユーザーの入金に2.1万gas、転送にまた2.1万gas…4.2万gas X 100人 = 420万gasの負担がネットワークにかかっている。
もちろん、同一ユーザーが一日に数回入金している場合、すぐには転送せずに数回入金してきたらまとめて転送するという仕組みも取れるが、ホットウォレットにユーザー資産を長く置いておくのは望ましくない。

それに加え、ビットバンクでは「入金アドレスは必ず一番安全なコールドにする」というルールがあり、現状のイーサリアムの入金システムでは、コールド署名者のかけている労力が他の通貨と比べて非常に高い。
(バッチ処理するにも、何十万ものアドレスの残高を集金する取引を署名するのに時間がかかるし、伝搬するタイミングが混雑時だとgas priceの設定がツラい)

そこで多岐に渡る問題を解決すべく、Ethereumの入金検知が楽になる方法をいくつか考えた。

アイデア① 取引データにメモ欄を追加 (Best)

ハードフォークが必要だが、XRP / XLM などにある「宛先タグ」、「メモ欄」の機能が追加できれば、一つのコールドウォレットに最初からユーザーに送金してもらうことができる。
ERC20などのトークンも、イベント検知⇒getTransaction⇒メモ欄を見る、という流れにすれば対応が簡単である。

しかし、提案しても反応は薄かった。
ETHの単純送金がどうとか、取引所の都合がどうとかを考えている人は少なく、次のDeFiの発想を膨らますことに集中している様子だった。
DeFiのための空きgasスペースの確保に繋がるのに、残念に思う。

アイデア② バグの隙が少ない汎用性高めのDepositコントラクトを定義する

EIP2876として提案した。
詳細はEIPにて。

要約すると、XRPで言う宛先タグ的なものをアドレスとくっつけてエンコードすると、その中に含まれるアカウントがあるインターフェースを満たすコントラクトであり、そこに対してアドレスに含まれるidを引数として渡すことで、入金検知が楽になる。

ただし、新しいアドレスフォーマットであるため、様々なウォレットへのアダプションが難航していて、正直啓蒙活動する時間が取れていない。

アイデア③ スマートコントラクトで入金を管理し、即座に転送するシステムを構築する

弊社エンジニアのadrenaline0206が丁寧に解説してくれたシステムを実装した。

詳細は上記の記事にて、もしくはこちらのリポジトリを見るべし。

とはいえスマートコントラクトはバグの温床なので、EVMレベルから正しく理解し、Solidity及び関連ツールのソースを熟読した上に設計した上で更にConsenSysにてauditをしてもらった。

スマートコントラクト自体にお金を長期的に保有することも無いという点を考慮すると、ある程度の安全性は確保できており、少なくとも「入金アドレスがホットウォレット」よりは安全であるはず。

ConsenSysのaudit結果はこちら

願望

アイデア①⇒②⇒③の順に
・「欲しい順」
・「難易度順」
・「巻き込まないといけないコミュニティーの割合順」

でも、少なくとも②さえ普及してしまえばgas負担が殆ど無いうえに、BTCPayのような「代理ペイメントプロセッサー」が作れるので非常に期待したいところである。

③の欠点は「システムコスト」(ユーザーあたりの入金アドレス発行に 66834 gasかかる)だが、転送する回数次第ではこのシステムの方が安上がりである。

是非、競合他社にも①②③のどれかの恩恵が受けられるように、努力してまいりたいと思っているので、ETH取扱の取引所様にも普及活動のご協力をお願い申し上げます。

Bitcoinの話はしないの?w

ビットコインは安定しすぎて、寧ろビットコインに関わる開発が少ないという現象がある…

とはいえ最近ライトn(ry

以上

expand_less