“IOTA宇宙”という奇妙な解釈-シードとアドレスを空間軸から考える-

IOTAとの出会い

今年の初め、アルトコインの技術について目を向け始めた時、IOTAのホワイトペーパーに遭遇した。今までも少し数学が出てきたりするホワイトペーパーはいくつかあったが、IOTAのには数学が溢れている。そして、格段に高度である。やっとBlockchainについて何となく理解出来たところなのにDAGだTangleだ、と見たこともない概念から説明が始まる。新しい分散型台帳なんだなと、何となく掴んだが、数学パートは意味不明なのでとりあえず飛ばし、早速ウォレットを使ってみようとインストール。そして、ぶち当たるのはシード。そう3進数だ。正確にはBalanced Ternary、平衡三進法と呼ぶものらしい。まず、奇数進数なんて試験でしか見たことなかった。そんな驚きも束の間、量子耐性暗号、ランダムウォーク、3進数チップ、などなど途方も無い理論と技術の数々。結局、IOTAについて理解できたことはシード、アドレス、トランザクションがTangle上でどう振る舞うかのエンジニアリング的側面のみ。それを支える理論や技術は未だブラックボックスの中である。

そんな私だが、本記事はファンサイトの年末企画ということで、堅苦しい話は一旦置いて、少し奇妙な解釈でなるべく専門用語を使わずにIOTAが何をやっているのかをイメージできるようなお話をしたいと思う。

ただ、一つ注意していただきたいのはこれはあくまでイメージである。単純化しすぎたためIOTAの完璧なアナロジーになっていない点もあるのでご了承願いたい。

シードとはアイデンティティだ

まずシードだ。AからZと数字の9、計27種の文字をランダムに81文字並べて生成される。このシードはあなた自身のアイデンティティである。シードは27の81乗通りある。これは観測可能な宇宙に存在する原子の数およそ10の80乗を遥かに凌ぐ。IOTAのSlack上でシードの衝突に対する安全性に疑問を持つ質問者に対しての返答に、「宇宙で適当に選んだ二つの原子が出会う確率より低い。」と言うものがあった。

シードはあくまでアイデンティティ。ここで勘違いして欲しくないのはシードはアドレスではない。アドレスというのは実際に送金や受金がなされるメモリー上の残高の置き場である。

さて、ではシードとアドレスの違いを説明するために下のような空間を想像していただきたい。

まず、単純化するためにシードが3通りしか存在しないと考える。

そのシードを3通りのベクトル、a(1,0,0)、b(0,1,0)、c(0,0,1)とする。

ここで三人のIOTA利用者A,B,Cがそれぞれ被らずにシードを生成した時点でシード空間上に下のような図で三つのシードは黒色のベクトルで図示されると考えられる。

Aさんは赤いX軸、Bさんは緑のY軸、Cさんは青のZ軸上に、それぞれが軸に沿ってプラス方向へ向いたベクトルである。

この例え話で使われるハッシュ関数は

\({\rm Hash(seed,\ index)}=k \times {\rm index} \times {\rm seed}\)

但し
\({\rm index}\)は自然数、\(k\)は1より大きい実数の定数
とする。

このただの掛け算のハッシュ関数を成り立たせるために、世の中に割り算はないと仮定する。

新しいアドレス生成とは、このindexを+1した後、ハッシュ関数にシードと一緒に通すことである。

新アドレス\(= {\rm Hash(seed,\ 次のindex)}\)

図で言うとアドレスを生成すればするほど、indexは大きくなっていき、それにつれてA,B,Cの軸上で示される座標(=アドレス)が原点Oから遠くなっていく。

アドレスの再解釈-空間上の軸から考える-

これを踏まえるとシードとアドレスを今までとは違った見方で解釈できるかもしれない。

さて、IOTAではシードはアイデンティティと先ほど述べた。これを言い換えると、

シードを選ぶと言うのは空間上のどの軸を選ぶかという事である。アドレスはその軸上のどこかを表している。

実際のIOTAではもっと軸がたくさんある。

上記の図では3本で3次元(x,y,z)だったが、栗のイガイガや、ウニのようにたくさん(27の81乗次元の)軸が存在する。そして、その軸上でアドレス生成(indexが+1)のたびに、+無限大に向かってアドレス座標が原点Oから離れていく。まるでビッグバン後の宇宙のようにIOTA宇宙も膨張していく。

もし、関係のない二人の人間が同じシードを選ぶ、もしくはシードが他人に洩れるということは、あなただけが歩むことのできた軸上に誰かを招き入れてしまうということだ。それはあなただけがアクセスできた座標(=アドレス)にその人のアクセスを許すこと。つまり、お金が奪われるのと同じことである。シードはしっかり保管しよう。

このように最初に選んだ軸(シード)によって全未来のアドレス生成が決められる仕組みをDeterministic(決定論的、運命は決まっている)と呼ぶ。

ウォレットのアップデートの時、残高がゼロになった際の対処法で、ひたすらアドレスを生成した事がある人も多いと思う。その作業は、indexを+1していくことで、だんだん遠くのアドレス座標を参照していき、途中途中に置かれている残高を回収していくことをやっていた。完全な残高を取り戻すためには、もうこれ以上は行ったことのない距離まで確認しなければならない。

IOTAではトランザクションごとにどこのアドレスからどこのアドレスへ何iota移動したかといった取引情報がTangleに保存される。

IOTAはPre-Minedなので最初に全ての通貨を発行した。(2,779,530,283 MIOTA)

アドレス間送金の原理

次の例ではその最初に発行された通貨量を100 として、アドレスAに保管されたとする。そして、アドレスAからアドレスBへ100、アドレスBからアドレスCへ50の通貨移動を行った計2つのトランザクションが発生したとする。この場合の図は下のようになる。

この時点で、Aさんの残高は0。Bさんは50。Cさんは50になる。

さて、複雑な取引がいくつか行われた様子も見てみよう。

IOTAのトランザクションでは、送金する時お釣りが出た場合は、お釣りを次のアドレスに送金する。オレンジの矢印はその次のアドレスへ送金する取引を表している。例えば、下記の図のアドレスBは100あるうち50だけをアドレスCに送金した(黒矢印B-C)。この時50がお釣りとして残る。このお釣りをアドレスBに残すのではなく、Bさんの軸上の次のアドレスB2に送金する(橙矢印B-B2)。

これらの取引が行われた後、Aさんは60、Bさんは10、Cさんは30の通貨を最終的に保有する。(実際に図を見ながら確認してみよう。)IOTAでは採掘が行われないため、最初に発行された100 という合計金額は変化しない。これを通貨量保存の法則と呼ぶ(ことにしよう)。

上の例のように、空間上に2つのアドレス座標を結ぶ矢印(=トランザクション)を追加することを送金と呼ぶ。また矢印を1つ追加する際には必ず2つ別の矢印を承認しなければならない

どの矢印(トランザクション)がどの2つの別の矢印(トランザクション)を承認したかの承認関係の連鎖を繋げて作られる構造体をTangleと呼ぶ。

どんどん矢印が増えていくため、必要なくなった古い矢印(原点Oに近く、残高ゼロのもう必要ないアドレスに関連するもの)は削除されていく。そのようなTangle上のデータ量のダイエット作業をスナップショットと呼ぶ。

終わりに代えて

最後にこの奇妙な方法でIOTAの姿を上手く説明できたか不安が残る。さらにこの記事が言っている事は昔のQiitaの記事で説明したことの二番煎じとも言える。では、どうしてわざわざこのような例えで説明しなおしたのか。

それは昔からIOTAの公式Slackにて「シードってなに?」、「IDとパスワードの方が分かりやすい。」、「アドレス生成って何なの?」と言った意見、質問が途絶えないからだ。そういう方々にシード、アドレス生成が何を意味しているかだけでもこの記事で伝わったら嬉しい。また、呼び方がシードの代わりにプライベートキーや秘密鍵となるだけで、実は多くの仮想通貨が似たような仕組みで動いている。(IOTAはむしろ後発だ。)そのためこの考え方を頭に置いておくだけでも仮想通貨のウォレット作りは少し気が楽になるかもしれない。

しかし、わざわざ何でこんな複雑な仕組みを採用しているのかの利点については、暗号化やセキュリティなどの専門知識が必要になるため説明できなかった事は反省している。

何はともあれ今年はすごい一年だった。IOTAの魅力は何と言っても手数料無料でスケール可能の分散型決済ネットワークを作ろうという試みである。手数料無料を実現するためには、報酬付きのマイナーを置かず、有志によるフルノードにシステム維持を頼らざるを得ない。しかし、この世知辛い時代にもフルノードになる人は存在し、また、日夜Slackに投げられる疑問、質問に丁寧に答えてくれる人も世界中にいる。そんな光景を目の当たりにできるだけでもIOTAに参加する意味を見いだせる。また、IOTAの目指す未来は技術者にも社会にも夢をもたらしえる壮大なものであるのは確かだ。そんなIOTAに出会えたことに感謝し、来年以降もコミュニティの役に立てたら幸いである。

筆者の関連記事

  • IOTA:【技術解説】トランザクション大解剖!ウォレットは裏で何をやっているか。
  • IOTA:【メモ】ペンディングに負けるな。
  • IOTAの署名とその承認の仕組み:ハッシュ関数 Curl
  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    ABOUTこの記事をかいた人

    ABmushi

    IOTAを理解したい。10年後ビックリしたい。 記事が気に入りいましたら寄付をお願いします! BTC: 1ACGpgpAMgaAKbGpPq2sDa467MnRNdW4wX IOTA: KWIEEQHAJBJTDPE9WEDILKMVQCJPZSF9CXALYQTULCGNPLIIKJLFYHCWSJNXDALKHAOOTELQUIXWIOFVDPQNXMLBZB