LoginSignup
2

More than 3 years have passed since last update.

posted at

【Solidity】tx.originとmsg.senderの違い

はじめに

Truffleのチュートリアルtx.originに出会った。

tx.originとmsg.senderの違い

addressには、人間のEthereumアカウントアドレスとコントラクトアドレスの2種類があるが、
msg.senderはその両方が入りうる。tx.originは人間のアカウントアドレスしか入り得ない。という違いがあるらしい。

例えば、アカウントAからコントラクトBを呼び出し、コントラクトBから別のコントラクトCを呼び出したとき、
コントラクトC内でmsg.senderはコントラクトBを指し、tx.originはアカウントAを指す。

しかし、こちらで、Serenityではtx.originの使用を避けるべき旨が言及されている。
どうしてもコントラクトCでtx.originに相当するアドレスが必要な場合は、コントラクトBにtx.originに相当するアドレスを伝搬させるような仕組みを実装して対応できるが、簡単にだますことができる上、Cに届いたアドレスが本当にtx.originと一致するかを確認する術がないため、セキュリティ的には問題があるようだ。

参考

What's the difference between 'msg.sender' and 'tx.origin'?

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
What you can do with signing up
2