-
bitcoin $78074.098354 USD
1.89% -
ethereum $2299.014391 USD
2.17% -
tether $0.998449 USD
0.01% -
bnb $700.460149 USD
1.26% -
xrp $1.273048 USD
1.81% -
usd-coin $0.999762 USD
0.01% -
solana $92.929882 USD
1.25% -
tron $0.321666 USD
0.30% -
zcash $1272.523101 USD
12.65% -
hyperliquid $84.856242 USD
1.58% -
monero $637.212844 USD
3.50% -
dogecoin $0.074680 USD
1.23% -
unus-sed-leo $9.292529 USD
-0.02% -
chainlink $11.063098 USD
-0.05% -
cardano $0.190385 USD
1.97%
msg.senderとtx.originの違いは何ですか?
In Ethereum smart contracts, `msg.sender` identifies the immediate caller, while `tx.origin` traces back to the original transaction initiator, each serving distinct security and logic purposes.
2025/07/23 18:28
Ethereumスマートコントラクトの実行の基本を理解する
Ethereumブロックチェーンでは、スマートコントラクトは、トランザクションや関数呼び出しを通じて、ユーザーやその他の契約と対話します。 Solidityを使用してスマートコントラクトを開発または分析する場合、 MSG.SenderとTx.Originの違いを理解することが不可欠です。どちらも、契約の実行中に住所情報を取得するために使用されるグローバル変数ですが、それらは異なる目的を果たし、さまざまなコンテキストで異なる動作をします。
MSG.Senderは、現在の関数の直接の発信者を指します。これは、外部所有のアカウント(EOA)または別の契約です。これは、契約との現在の相互作用を誰が開始したかを決定するために最も一般的に使用される変数です。
一方、 Tx.Originは、何回の中間呼び出しが発生したかに関係なく、トランザクションの元の送信者を表します。トランザクションチェーンを開始したEOAにまでさかのぼります。
MSG.Senderがスマートコントラクトでどのように機能するか
堅牢性契約の関数が呼び出されると、 msg.sender変数が関数を直接呼び出したアドレスに設定されます。これにより、アクセス制御または許可ベースのロジックで即時発信者を識別するための信頼できるソースになります。
例えば:
pragma solidity ^0.8.0;契約例{address public owner; constructor() { owner = msg.sender; } function changeOwner(address newOwner) public { require(msg.sender == owner, 'Only the owner can change ownership'); owner = newOwner; }}
この契約では、 MSG.Senderは、現在の所有者のみがchangeOwner関数を呼び出すことができることを保証します。別の契約が他の誰かに代わってこの関数を呼び出す場合、 MSG.Senderは元のユーザーではなくその契約になります。
Tx.Originがスマートコントラクトでどのように機能するか
Tx.Origin変数は、複数の契約呼び出しが行われたとしても、トランザクション全体を開始した外部所有アカウント(EOA)を常に指しています。これは、特に複雑な契約相互作用において、トランザクションの背後にある元のユーザーを知る必要がある場合に役立ちます。
その動作を説明する例は次のとおりです。
pragma solidity ^0.8.0;契約{function callB(B _b) public { _b.checkOrigin(); }}
契約B {
function checkOrigin() public { emit LogOrigin(msg.sender, tx.origin); }}
このシナリオでは、EOAが契約AからcallBを呼び出す場合、次のとおりです。
- MSG.SENDER INSIND
checkOrigin()は契約Aのアドレスになります。 - Tx.Originは、トランザクションを開始したEOAになります。
この区別は、中間契約ではなく元のユーザーを知ることに依存するロジックを設計する場合に重要です。
Tx.originを使用することのセキュリティへの影響
Tx..originを使用すると、特定の状況でセキュリティリスクを導入できます。主な懸念事項の1つはフィッシング攻撃です。そこでは、悪意のある契約により、ユーザーは元の送信者に基づいて機密アクションを実行する関数を呼び出すようになります。
例えば:
function transferFromUser(address to, uint amount) public {if (tx.origin == trustedUser) { // Perform transfer }
}
悪意のある契約により、 trustedUserこの関数を呼び出すトランザクションを開始し、攻撃者がTx.Originに依存するチェックをバイパスできるようになります。
したがって、 Tx.Originを使用する特定の理由がない限り、アクセス制御にMSG.Senderを使用することを一般的に推奨します。
MSG.SENDERおよびTX.ORIGINの実用的なユースケース
MSG.Senderは、所有権チェック、アクセス制御、トークン転送などの標準的な契約関数で広く使用されていますが、 Tx.Originにはより多くのニッチアプリケーションがあります。
msg.senderを使用する場合:
- 誰が現在の関数を呼んだかを知る必要があります。
-
onlyOwnerようなアクセス修飾子を実装しています。 - 不正な契約が契約と対話するのを防ぎたいです。
tx.originを使用して:
- トランザクションを開始する元のユーザーを特定する必要があります。
- 他の契約によってトリガーされるべきではないロジックを実装しています。
- 紹介プログラムや、直接ユーザーインタラクションを必要とするエアドロップなどのシステムを構築しています。
ただし、フィッシング攻撃に対する誤用と脆弱性の可能性があるため、 Tx.Originには常に慎重になります。
ベストプラクティスと推奨事項
スマートコントラクトを開発するときは、これらのベストプラクティスに従って、一般的な落とし穴を避けてください。
- 特に魅力的な理由がない限り、 tx.originよりもmsg.senderを好む。
- 契約のコールフローと、実行中のMSG.SENDERとTX.ORIGINがどのように変化するかを理解してください。
- 元の俳優がEOAであることを確認する必要があるシナリオでのみTx.Originを使用してください。
- Tx.originを使用するためにコードを監査し、不必要なリスクをもたらすかどうかを評価します。
MSG.SenderとTx.Originの間のニュアンスを理解することにより、開発者はより安全で予測可能なスマートコントラクトを書くことができます。
よくある質問
Q:msg.senderは契約アドレスになることができますか?はい、 msg.senderは、誰が関数を呼んだかに応じて、外部所有のアカウント(EOA)または契約アドレスのいずれかです。契約が別の契約で関数を呼び出す場合、 MSG.Senderは呼び出し契約のアドレスになります。
Q:tx.originは常にEOAですか?はい、 Tx.Originは常にトランザクションを開始した外部所有アカウント(EOA)です。複数の契約がコールチェーンに関与している場合でも、 Tx.Originは元のユーザーアドレスのままです。
Q:tx.originを操作できますか? Tx.Originは直接偽造できませんが、フィッシング攻撃で悪用される可能性があります。たとえば、悪意のある契約により、ユーザーは意図しないアクションを実行するトランザクションをトリガーし、 TX.ORIGIN Checkに依存して承認を得ることができます。
Q:契約でtx.originの使用を避けるべきですか?絶対に必要な場合を除き、 Tx.originの使用を避ける方が一般的に安全です。セキュリティを妥協する方法で使用できるため、多くのベストプラクティスは、アクセス制御および状態を変える機能にMSG.Senderを使用することを推奨しています。
免責事項:info@kdj.com
提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。
このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。
- DarkSword 攻撃ツールが iOS の脆弱性を悪用し、仮想通貨ウォレットのセキュリティに大きな脅威をもたらす
- 2026-11-05 04:45:02
- フランス銀行の仮想通貨損失:ZachXBTがCrédit Mutuel Arkéaでの1億3,300万ドル強盗疑惑を発掘
- 2026-11-04 16:55:01
- 民主党が米国下院支配を確保、中間選挙のさなか議会に新時代の到来を告げる
- 2026-11-04 16:45:01
- 米国中間選挙、予測市場、仮想通貨レース: ワシントンの将来に対する一か八かの賭け
- 2026-11-04 04:30:22
- デジタル資産、グローバル金融、AI: DavosWeb3 以降の次のフロンティアをナビゲートする
- 2026-11-04 04:30:22
- 広範な市場苦境の中でAVAX価格が雪崩式に下落。機関の関心は依然として強い
- 2026-11-03 12:35:02
関連知識
BTCUSDT先物ポジションを保有する総コストの計算方法
2026-10-26 04:06:35
BTCUSDT先物ポジションの総コスト構成要素1. BTCUSDT 先物ポジションを保持するための総コストには、明示的な料金と暗黙的な料金の両方が含まれます。明示的なコストは取引開始手数料と終了手数料で構成されますが、暗黙的なコストは主に、長期にわたる資金調達率の支払いまたは受け取りによって発生しま...
XRPSDT の資金調達レートと建玉を一緒に監視する方法
2026-10-20 18:39:42
XRPUSDT 無期限契約の資金調達率の仕組み1. XRPUSDT 無期限スワップの資金調達率は、XRP と USDT 建て融資市場の間のプレミアム インデックスと金利差を使用して 8 時間ごとに計算されます。 2. Binance、Bybit、OKX などの取引所は、デリバティブ API エンドポ...
SOLUSDT 無期限先物で損益分岐点ストップロスを設定する方法
2026-10-23 09:34:18
損益分岐点とストップロスの仕組みを理解する1. 損益分岐点ストップロスは、ポジションが有利に動くにつれて上方に調整され、約定時に純損失がゼロになるように固定する動的な注文です。 2. 取引が事前に定義された利益しきい値 (通常、初期リスクまたはエントリー手数料の 1 倍から 2 倍) に達した場合に...
ETHUSDT取引にBinance Futures Calculatorを使用する方法
2026-10-21 02:00:11
Binance Futures Calculator インターフェイスを理解する1. 計算機は Binance Futures 取引インターフェイス内に直接組み込まれており、注文入力パネルの ETHUSDT 無期限契約ページからアクセスできます。 2. ユーザーがポジションサイズ、エントリー価格、レ...
先物清算前にBTCUSDTマーク価格を確認する方法
2026-10-26 12:20:18
BTCUSDT 先物におけるマーク価格を理解する1. マーク価格は、市場環境が不安定な場合に不当清算を防止するために取引所が使用する計算値です。 2. 指標価格や調達率など、複数の情報源から導き出された公正かつ安定した参照価格を反映しています。 3. 前回の取引価格とは異なり、マーク価格には操作リス...
TRUMPUSDT 無期限契約のレバレッジを調整する方法
2026-10-30 22:19:37
TRUMPUSDT の無期限契約の仕組みを理解する1. TRUMPUSDT は、複数の Tier-1 デリバティブ取引所に上場されているテーマ別無期限先物契約であり、資産の基礎となるファンダメンタルズではなく、米国の政治的物語を中心とした価格センチメントを追跡するように設計されています。 2. プラ...
BTCUSDT先物ポジションを保有する総コストの計算方法
2026-10-26 04:06:35
BTCUSDT先物ポジションの総コスト構成要素1. BTCUSDT 先物ポジションを保持するための総コストには、明示的な料金と暗黙的な料金の両方が含まれます。明示的なコストは取引開始手数料と終了手数料で構成されますが、暗黙的なコストは主に、長期にわたる資金調達率の支払いまたは受け取りによって発生しま...
XRPSDT の資金調達レートと建玉を一緒に監視する方法
2026-10-20 18:39:42
XRPUSDT 無期限契約の資金調達率の仕組み1. XRPUSDT 無期限スワップの資金調達率は、XRP と USDT 建て融資市場の間のプレミアム インデックスと金利差を使用して 8 時間ごとに計算されます。 2. Binance、Bybit、OKX などの取引所は、デリバティブ API エンドポ...
SOLUSDT 無期限先物で損益分岐点ストップロスを設定する方法
2026-10-23 09:34:18
損益分岐点とストップロスの仕組みを理解する1. 損益分岐点ストップロスは、ポジションが有利に動くにつれて上方に調整され、約定時に純損失がゼロになるように固定する動的な注文です。 2. 取引が事前に定義された利益しきい値 (通常、初期リスクまたはエントリー手数料の 1 倍から 2 倍) に達した場合に...
ETHUSDT取引にBinance Futures Calculatorを使用する方法
2026-10-21 02:00:11
Binance Futures Calculator インターフェイスを理解する1. 計算機は Binance Futures 取引インターフェイス内に直接組み込まれており、注文入力パネルの ETHUSDT 無期限契約ページからアクセスできます。 2. ユーザーがポジションサイズ、エントリー価格、レ...
先物清算前にBTCUSDTマーク価格を確認する方法
2026-10-26 12:20:18
BTCUSDT 先物におけるマーク価格を理解する1. マーク価格は、市場環境が不安定な場合に不当清算を防止するために取引所が使用する計算値です。 2. 指標価格や調達率など、複数の情報源から導き出された公正かつ安定した参照価格を反映しています。 3. 前回の取引価格とは異なり、マーク価格には操作リス...
TRUMPUSDT 無期限契約のレバレッジを調整する方法
2026-10-30 22:19:37
TRUMPUSDT の無期限契約の仕組みを理解する1. TRUMPUSDT は、複数の Tier-1 デリバティブ取引所に上場されているテーマ別無期限先物契約であり、資産の基礎となるファンダメンタルズではなく、米国の政治的物語を中心とした価格センチメントを追跡するように設計されています。 2. プラ...
すべての記事を見る














