-
Bitcoin
$118500
0.82% -
Ethereum
$3693
-0.03% -
XRP
$3.477
0.30% -
Tether USDt
$1.000
0.00% -
BNB
$794.9
4.79% -
Solana
$200.2
0.51% -
USDC
$0.9998
-0.01% -
Dogecoin
$0.2615
-1.16% -
Cardano
$0.8738
-0.04% -
TRON
$0.3176
2.58% -
Hyperliquid
$44.40
1.67% -
Stellar
$0.4687
2.42% -
Sui
$3.965
2.11% -
Chainlink
$19.30
0.97% -
Hedera
$0.2687
1.17% -
Avalanche
$25.31
-0.74% -
Bitcoin Cash
$524.6
1.06% -
Litecoin
$117.8
2.22% -
Shiba Inu
$0.00001506
-0.08% -
UNUS SED LEO
$8.979
-0.07% -
Toncoin
$3.297
1.19% -
Polkadot
$4.454
1.43% -
Uniswap
$10.58
1.39% -
Ethena USDe
$1.001
0.01% -
Monero
$324.5
1.37% -
Pepe
$0.00001390
0.22% -
Bitget Token
$4.816
0.51% -
Dai
$0.0000
0.01% -
Aave
$302.9
-2.70% -
Bittensor
$446.7
2.73%
msg.senderとtx.originの違いは何ですか?
Ethereum Smart Contractsでは、「MSG.Sender」が直接の発信者を識別し、「Tx.Origin」は元のトランザクションイニシエーターに戻り、それぞれが明確なセキュリティとロジックの目的を果たします。
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) までご連絡ください。速やかに削除させていただきます。
- H100グループのビットコインベット:暗号通貨の未来への大胆な動き
- 2025-07-24 00:30:13
- エフサン:暗号エコシステムの未来を投資プラットフォームとして開拓する
- 2025-07-24 00:30:13
- Sui Price、Open Interest、および4ドルのブレイクアウト:Sui Surgeはいますか?
- 2025-07-23 22:50:13
- ブロックダッグ、XRP、およびドット:ウォールストリートプロのように暗号波に乗る
- 2025-07-23 23:10:13
- Dogecoin、Hedera、およびPayfi:2025年にAltcoinsが加熱されます
- 2025-07-23 23:50:12
- NFT Penguins Rally:Pengu's RiseとCryptobatz Bounce
- 2025-07-23 23:10:13
関連知識

なぜ私のビットスタンプ先物の位置が清算されているのですか?
2025-07-23 11:08:15
ビットスタンプでの先物の清算を理解するビットスタンプでの先物取引には、資金を借りてレバレッジされたポジションを開くことが含まれ、潜在的な利益とリスクの両方を増幅します。マージンバランスが必要なメンテナンスのしきい値を下回ると、BitStampは借りた金額をカバーする清算プロセスを開始します。これは、...

BitStampは逆契約を提供しますか?
2025-07-23 13:28:52
暗号通貨取引における逆契約の理解暗号通貨デリバティブの領域では、逆契約は、定住と担保が、スタブコインやフィアット通貨ではなく、 BTCやETHなどの基本的な暗号通貨で宗派されている特定のタイプの未来または永続的な契約です。これは、トレーダーが逆契約でポジションを開くと、彼らの利益と損失(P&L)が基...

あなたのビットスタンプ先物の取引履歴を見つける方法は?
2025-07-23 08:07:56
ビットスタンプと先物取引の可用性を理解するBitStampのサービス提供の現在の状態の時点で、 BitStampが先物取引をサポートしていないことを明確にすることが重要です。このプラットフォームは、主にスポット暗号通貨交換として機能し、ユーザーがBitcoin、イーサリアム、その他の主要な暗号通貨な...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-23 13:42:32
暗号通貨取引におけるトレーリングストップの理解トレーリングストップは、資産の価格が好ましい方向に移動すると自動的に調整される動的なタイプのストップロス順序です。設定された価格レベルに固定された標準のストップロスとは異なり、後部の停留所は、指定された割合またはドルの金額で市場価格に従います。これにより...

BitStamp契約の最小貿易規模はどれくらいですか?
2025-07-23 19:14:52
ビットスタンプとその契約の提供を理解するBitStampは、2011年に設立された最も長く存在する暗号通貨交換の1つであり、セキュリティ、規制のコンプライアンス、ユーザーのアクセシビリティに焦点を当てていることで知られています。 BitStampは主にスポット取引プラットフォームとして運営されていま...

BitStampでETHパーペチュアルを交換する方法は?
2025-07-23 03:28:57
ETHの永続的な契約を理解するETH永久契約は、基礎となる資産を所有することなく、トレーダーがイーサリアムの価格を推測できるようにするデリバティブ製品です。従来の先物とは異なり、これらの契約には有効期限がなく、トレーダーが無期限にポジションを保持できるようになりました。 BitStampは、レバレッ...

なぜ私のビットスタンプ先物の位置が清算されているのですか?
2025-07-23 11:08:15
ビットスタンプでの先物の清算を理解するビットスタンプでの先物取引には、資金を借りてレバレッジされたポジションを開くことが含まれ、潜在的な利益とリスクの両方を増幅します。マージンバランスが必要なメンテナンスのしきい値を下回ると、BitStampは借りた金額をカバーする清算プロセスを開始します。これは、...

BitStampは逆契約を提供しますか?
2025-07-23 13:28:52
暗号通貨取引における逆契約の理解暗号通貨デリバティブの領域では、逆契約は、定住と担保が、スタブコインやフィアット通貨ではなく、 BTCやETHなどの基本的な暗号通貨で宗派されている特定のタイプの未来または永続的な契約です。これは、トレーダーが逆契約でポジションを開くと、彼らの利益と損失(P&L)が基...

あなたのビットスタンプ先物の取引履歴を見つける方法は?
2025-07-23 08:07:56
ビットスタンプと先物取引の可用性を理解するBitStampのサービス提供の現在の状態の時点で、 BitStampが先物取引をサポートしていないことを明確にすることが重要です。このプラットフォームは、主にスポット暗号通貨交換として機能し、ユーザーがBitcoin、イーサリアム、その他の主要な暗号通貨な...

ビットスタンプ先物でトレーリングストップを使用できますか?
2025-07-23 13:42:32
暗号通貨取引におけるトレーリングストップの理解トレーリングストップは、資産の価格が好ましい方向に移動すると自動的に調整される動的なタイプのストップロス順序です。設定された価格レベルに固定された標準のストップロスとは異なり、後部の停留所は、指定された割合またはドルの金額で市場価格に従います。これにより...

BitStamp契約の最小貿易規模はどれくらいですか?
2025-07-23 19:14:52
ビットスタンプとその契約の提供を理解するBitStampは、2011年に設立された最も長く存在する暗号通貨交換の1つであり、セキュリティ、規制のコンプライアンス、ユーザーのアクセシビリティに焦点を当てていることで知られています。 BitStampは主にスポット取引プラットフォームとして運営されていま...

BitStampでETHパーペチュアルを交換する方法は?
2025-07-23 03:28:57
ETHの永続的な契約を理解するETH永久契約は、基礎となる資産を所有することなく、トレーダーがイーサリアムの価格を推測できるようにするデリバティブ製品です。従来の先物とは異なり、これらの契約には有効期限がなく、トレーダーが無期限にポジションを保持できるようになりました。 BitStampは、レバレッ...
すべての記事を見る
