13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

nemAdvent Calendar 2020

Day 14

俺が昔xymを送金した"alice"は今の"alice"と同一人物ではないのかもしれない

Last updated at Posted at 2020-12-13

※ この記事で書かれている団体、サービス、会社等の名称は架空のものです。実在の人物や団体などとは関係ありません。

TL;DR

  • symbolについての話です
  • namespaceとアドレスをリンクしておけばトランザクション発行時にアドレスをnamespaceで指定できる
  • しかしnamespaceは所有者が変わり得るので昔のtxに記載された送り元、送り先のnamespaceが今現在の所有者と同じであるとは限らない
  • namespaceによって指定されたアドレスが、その当時どのアドレスに結びついていたのかという情報は、トランザクションと一緒にブロックの中に保存されている。その名前を レシート という。
  • レシートには名前解決情報(namespaceの変換情報)の他、ブロック報酬やモザイクの期限切れを知らせる情報など、暗に決定される情報を記録している。これがあるおかげで、過去の情報を調べるのにブロックを最初から順番に検証して当時のブロックチェーンの状態を復元する必要がない。

namespaceは誰のものか、誰のもの"だった"のか

symbolにはnamespaceと呼ばれる仕組みがあり、手数料を支払えばsymbolというネットワーク内に自分だけのネームタグのようなものを得ることが出来る。これは自分が手放すまで他人は同じ名前のnamespaceを取得することは出来ない。

このネームタグはアドレスやモザイクに付けることができ、くっつけたもののIDの代わりに利用することが出来る。

アドレス(例えばTDBYUUZIEU5HDUSRKCDFXQWYJ25ULC6EB7HEUTY)や、モザイクID(例えば5A7EC8C8FC195289)は人間が覚えるには難しい。しかし、namespaceを使うことでそられにsymbolネットワーク上で使える名前を付けることが出来る。そしてそれらはnamespaceが付いたものの代わり(アドレスやモザイク)として利用できる。

これらはちょうど、IPアドレスとドメインの関係と同じようなものだ。

余談
namespaceの有用性は単に可読性の話だけではない。例えばとあるサービス (仮に名前を cryptoAdventure とする) が crypto_adventure というnamespaceを取得したとする。そしてこのサービスは入金アドレスとして顧客にアドレスではなくて crypto_adventure に送金するようお願いしたとする。

ある日、サービス側が入金アドレスを資金管理の関係上変更したくなるとする、通常、アドレスを入金先として直接指定していたら入金アドレスの変更はなかなか出来ない。顧客に入金アドレスの変更をお願いするのはトラブルの元だ。しかし、ネームスペースによってアドレスに付けられた エイリアス(要は別名) を顧客に伝えておけば、入金アドレスの変更はネームスペースのリンク先の変更で済む。しかも、リンクの解除と再リンクはアグリゲートトランザクションを使うことで単一ブロック中に解決することが出来る。

ドメインのようにして使えるnamespaceだが、ドメイン同様、管理者が手放すと他の人が取得することが出来る。

これが何を意味するのかというと、 同じnamespaceでも今のnamespace管理者と昔のnamespace管理者が異なることが起こり得る ということを意味する。

例えば、1年前に送り先が alice のトランザクションがあったとする。そして、今、その alice というネームスペースは TCBSK2HYE7LFMFJN5TRBQOJWXANN4SPPCC4RTEA が所持していて、TCBSK2HYE7LFMFJN5TRBQOJWXANN4SPPCC4RTEA にリンクしていたとする。

この時、1年前に送り先がaliceとあったトランザクションの送金先は、今aliceにリンクしているTCBSK2HYE7LFMFJN5TRBQOJWXANN4SPPCC4RTEAだろうか?

結論から言うと"異なる可能性がある"(現時点での情報を信用してはいけない)。1年前のトランザクションなので、それまでの間にnamespacealiceの管理者が変わった可能性もあるし、管理者が変わっていなかったとしてもリンク先のアドレスが変わっている可能性がある。

では、どうすれば1年前に送り先がaliceとあったトランザクションの本当の送金先を調べることができるだろうか。

名前解決の記録はトランザクションと一緒にブロックに残っている

Webの場合、ドメインからIPアドレスを探すことを"名前解決"と呼ぶが、symbolではnamespaceによってつけたれたエイリアスからリンクされたアドレスを探すことをアドレス解決、エイリアスからリンクされたモザイクを探すことを"モザイク解決"と呼んでいる。

このアドレス、モザイク解決の結果は、 レシート と呼ばれる構造体に記録され、名前解決が必要なトランザクションと一緒にブロックに収められている。現時点での状態が信用できないものは、このレシートを確認することで信用できる情報を参照できる。
20201201qiita.png

他にレシートになっているもの

上記を確認すれば分かるが、ブロック生成の報酬や、期限切れしたLockHashTransactionの自動送金執行など、トランザクションとして発行されないブロックチェーン上の状態の変化が記録されている。

レシートに類する機能が無い場合に過去の情報を調べようとするとどうなるか

symbolのようなアカウントベースのブロックチェーンでレシートに類する機能が無い場合に過去の情報を調べようとする場合、その当時のブロックチェーンの状態を復元する必要があるので、一番最初に戻ってひとつずつブロックを検証、データベースを構築していく必要がある。

特定ブロックごとにチェックポイントを設けて当時のデータベースの情報を丸々保管していたとしても、結局のところそこからブロックを辿らないといけなくなるなど、レシートに類する機能が無い場合は大変な仕事になることでしょう、

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?