-
Bitcoin
$118200
-0.90% -
Ethereum
$3661
-0.97% -
XRP
$3.358
-4.70% -
Tether USDt
$1.000
-0.01% -
BNB
$789.5
3.27% -
Solana
$193.4
-4.22% -
USDC
$0.9999
0.00% -
Dogecoin
$0.2495
-6.23% -
TRON
$0.3135
0.00% -
Cardano
$0.8359
-4.61% -
Hyperliquid
$43.41
-3.32% -
Stellar
$0.4474
-3.39% -
Sui
$3.835
-2.65% -
Chainlink
$18.50
-3.54% -
Hedera
$0.2562
-4.11% -
Avalanche
$24.48
-4.17% -
Bitcoin Cash
$519.3
-0.11% -
Litecoin
$114.6
-0.52% -
Shiba Inu
$0.00001439
-4.83% -
UNUS SED LEO
$8.994
0.20% -
Toncoin
$3.226
-5.48% -
Polkadot
$4.258
-3.71% -
Ethena USDe
$1.001
0.00% -
Uniswap
$10.14
-3.01% -
Monero
$324.0
-0.51% -
Pepe
$0.00001334
-3.68% -
Bitget Token
$4.704
-3.16% -
Dai
$1.000
0.03% -
Aave
$294.7
-5.19% -
Bittensor
$432.6
-0.46%
Was ist der Unterschied zwischen msg.sender und tx.origin?
In Ethereum Smart Contracts identifiziert "Msg.Sender" den unmittelbaren Anrufer, während "Tx.origin" auf den ursprünglichen Transaktionsinitiator zurückgibt und jeweils unterschiedliche Sicherheits- und Logikzwecke dient.
Jul 23, 2025 at 06:28 pm

Verständnis der Grundlagen der Smart -Vertragsausführung von Ethereum
In der Ethereum -Blockchain interagieren Smart Contracts mit Benutzern und anderen Verträgen durch Transaktionen und Funktionsaufrufe. Bei der Entwicklung oder Analyse intelligenter Verträge mit Solidität ist es wichtig, den Unterschied zwischen MSG.Sender und Tx.origin zu verstehen. Beide sind globale Variablen , die zum Abrufen von Adressinformationen während der Vertragsausführung verwendet werden, dienen jedoch unterschiedlichen Zwecken und verhalten sich in verschiedenen Kontexten unterschiedlich.
MSG.Sender bezieht sich auf den unmittelbaren Anrufer der aktuellen Funktion. Dies könnte ein externes Konto (EOA) oder ein anderer Vertrag sein. Es ist die am häufigsten verwendete Variable, um zu bestimmen, wer die aktuelle Wechselwirkung mit dem Vertrag eingeleitet hat.
TX.ORIGIN hingegen repräsentiert den ursprünglichen Absender der Transaktion, unabhängig davon, wie viele Zwischenaufrufe aufgetreten sind. Es zeichnet auf die EOA zurück, die die Transaktionskette initiierte.
Wie msg.sender in intelligenten Verträgen arbeitet
Wenn eine Funktion in einem Soliditätsvertrag aufgerufen wird, wird die MSG.Sender -Variable auf die Adresse gesetzt, die die Funktion direkt aufgerufen hat. Dies macht es zu einer zuverlässigen Quelle für die Identifizierung des unmittelbaren Anrufers in der Zugriffskontrolle oder im Berechtigungslogik.
Zum Beispiel:
pragma solidity ^0.8.0;
Vertragsbeispiel {address public owner; constructor() { owner = msg.sender; } function changeOwner(address newOwner) public { require(msg.sender == owner, 'Only the owner can change ownership'); owner = newOwner; }
}
In diesem Vertrag stellt der MSG.Sender sicher, dass nur der derzeitige Eigentümer die changeOwner
aufrufen kann. Wenn ein anderer Vertrag diese Funktion im Namen einer anderen Person anruft, ist MSG.Sender dieser Vertrag, nicht der ursprüngliche Benutzer.
Wie tx.origin in intelligenten Verträgen funktioniert
Die Variable der TX.ORIGIN zeigt immer auf das externe Konto (EOA), das die gesamte Transaktion eingeleitet hat, auch wenn zwischen dazwischen mehrere Vertragsanrufe getätigt werden. Es ist nützlich, wenn Sie den ursprünglichen Benutzer hinter einer Transaktion kennen müssen, insbesondere in komplexen Vertragsinteraktionen.
Hier ist ein Beispiel, um sein Verhalten zu veranschaulichen:
pragma solidity ^0.8.0;
Vertrag a {{function callB(B _b) public { _b.checkOrigin(); }
}
Vertrag b {
function checkOrigin() public { emit LogOrigin(msg.sender, tx.origin); }
}
In diesem Szenario: Wenn ein EOA callB
von Vertrag A anruft, dann:
- MSG.Sender im Inside
checkOrigin()
ist die Adresse des Vertrags A. - TX.Origin wird die EOA sein, die die Transaktion begonnen hat.
Diese Unterscheidung ist entscheidend bei der Gestaltung der Logik, die davon abhängt, den ursprünglichen Benutzer und nicht den Zwischenvertrag zu kennen.
Sicherheitsauswirkungen der Verwendung von Tx.origin
Die Verwendung von TX.Origin kann in bestimmten Situationen Sicherheitsrisiken einführen. Eines der Hauptanliegen ist Phishing -Angriffe , bei denen ein böswilliger Vertrag Benutzer dazu verleitet, eine Funktion aufzurufen, die sensible Aktionen basierend auf dem ursprünglichen Absender ausführt.
Zum Beispiel:
function transferFromUser(address to, uint amount) public {
if (tx.origin == trustedUser) { // Perform transfer }
}
Ein böswilliger Vertrag könnte trustedUser
dazu bringen, eine Transaktion zu initiieren, die diese Funktion aufruft, sodass der Angreifer Schecks umgehen kann, die auf TX.ORIGIN angewiesen sind.
Daher wird im Allgemeinen empfohlen, MSG.Sender für die Zugriffskontrolle zu verwenden, es sei denn, Sie haben einen bestimmten Grund, TX.origin zu verwenden.
Praktische Anwendungsfälle für MSG.Sender und Tx.originin
Während MSG.Sender in Standardvertragsfunktionen wie Eigentümerprüfungen, Zugangskontrolle und Token -Transfers häufig verwendet wird, verfügt Tx.origin über mehr Nischenanwendungen.
Verwenden Sie msg.sender , wenn:
- Sie müssen wissen, wer die aktuelle Funktion nennt.
- Sie implementieren Zugriffsmodifikatoren wie
onlyOwner
. - Sie möchten verhindern, dass nicht autorisierte Verträge mit Ihrem Vertrag interagieren.
Verwenden Sie Tx.origin , wenn:
- Sie möchten den ursprünglichen Benutzer identifizieren, der die Transaktion initiiert.
- Sie implementieren eine Logik, die nicht durch andere Verträge ausgelöst werden sollte.
- Sie erstellen Systeme wie Überweisungsprogramme oder Airdrops, die eine direkte Benutzerinteraktion erfordern.
Seien Sie jedoch immer vorsichtig mit Tx.origin , da er Missbrauch und Anfälligkeit für Phishing -Angriffe ermöglicht.
Best Practices und Empfehlungen
Befolgen Sie bei der Entwicklung intelligenter Verträge diese Best Practices, um gemeinsame Fallstricke zu vermeiden:
- Bevorzugen Sie MSG.Sender gegenüber TX.ORIGIN , es sei denn, Sie haben einen überzeugenden Grund, etwas anderes zu tun.
- Verstehen Sie den Anruffluss Ihrer Verträge und wie sich MSG.Sender und TX.ORIGIN während der Ausführung ändern.
- Verwenden Sie TX.ORIGIN nur in Szenarien, in denen Sie sicherstellen müssen, dass der ursprüngliche Schauspieler ein EOA ist.
- Prüfen Sie Ihren Code auf die Verwendung von Tx.origin und beurteilen Sie, ob er ein unnötiges Risiko einführt.
Durch das Verständnis der Nuancen zwischen MSG.Sender und TX.Origin können Entwickler sicherere und vorhersehbare intelligente Verträge schreiben.
Häufig gestellte Fragen
F: Kann MSG.Sender eine Vertragsadresse sein?
Ja, MSG.Sender kann entweder ein externes Konto (EOA) oder eine Vertragsadresse sein, je nachdem, wer die Funktion bezeichnet hat. Wenn ein Vertrag in einem anderen Vertrag eine Funktion aufgreift, ist der MSG.Sender die Adresse des Anrufvertrags.
F: Ist Tx.origin immer ein EOA?
Ja, Tx.origin ist immer das externe Konto (EOA), das die Transaktion initiierte. Auch wenn in der Call -Kette mehrere Verträge beteiligt sind, bleibt TX.Origin die ursprüngliche Benutzeradresse.
F: Kann Tx.origin manipuliert werden?
Während TX.Origin nicht direkt gefälscht werden kann, kann es bei Phishing -Angriffen ausgenutzt werden. Beispielsweise kann ein böswilliger Vertrag einen Benutzer dazu bringen, eine Transaktion auszulösen, die eine unbeabsichtigte Aktion ausführt und sich auf die TX.origin -Prüfung zur Autorisierung stützt.
F: Sollte ich es vermeiden, tx.origin in meinen Verträgen zu verwenden?
Es ist im Allgemeinen sicherer, Tx.origin zu vermeiden, sofern dies nicht unbedingt erforderlich ist. Da es so verwendet werden kann, dass die Sicherheit gefährdet, empfehlen viele Best Practices, MSG.Sender für Zugriffskontroll- und Zustandsveränderungsfunktionen zu verwenden.
Haftungsausschluss:info@kdj.com
Die bereitgestellten Informationen stellen keine Handelsberatung dar. kdj.com übernimmt keine Verantwortung für Investitionen, die auf der Grundlage der in diesem Artikel bereitgestellten Informationen getätigt werden. Kryptowährungen sind sehr volatil und es wird dringend empfohlen, nach gründlicher Recherche mit Vorsicht zu investieren!
Wenn Sie glauben, dass der auf dieser Website verwendete Inhalt Ihr Urheberrecht verletzt, kontaktieren Sie uns bitte umgehend (info@kdj.com) und wir werden ihn umgehend löschen.
-
SPK
$0.1505
102.70%
-
SAHARA
$0.1488
75.99%
-
GP
$4.2
35.18%
-
NEWT
$0.4379
29.18%
-
ARDR
$0.1234
26.75%
-
STRK
$15
26.28%
- Bitcoin -Wette der H100 -Gruppe: Ein mutiger Wechsel in die Zukunft der Kryptowährung
- 2025-07-24 00:30:13
- Efsane: Pionierarbeit in der Zukunft des Krypto -Ökosystems als Investitionsplattform
- 2025-07-24 00:30:13
- Sui Preis, offene Zinsen und der 4 -Dollar -Breakout: Wird Sui steigen?
- 2025-07-23 22:50:13
- Blockdag, XRP und Punkt: Fahren Sie mit der Kryptowelle wie ein Wall Street Pro
- 2025-07-23 23:10:13
- Dogecoin, Hedera und Payfi: Altcoins erhitzen sich 2025
- 2025-07-23 23:50:12
- NFT Penguins Rally: Pengus Aufstieg und der Cryptobatz springen
- 2025-07-23 23:10:13
Verwandtes Wissen

Warum wird meine Bitstamp -Futures -Position liquidiert?
Jul 23,2025 at 11:08am
Verständnis der Futures Liquidation bei Bitstamp Der Futures -Handel mit Bitstamp beinhaltet das Ausleihen von Fonds für offene Hebelpositionen, was s...

Bietet Bitstamp inverse Verträge an?
Jul 23,2025 at 01:28pm
Verständnis inverser Verträge im Kryptowährungshandel Im Bereich der Kryptowährungsderivate sind inverse Verträge eine bestimmte Art von Futures oder ...

Wie finde ich Ihre Bitstamp -Futures -Handelsgeschichte?
Jul 23,2025 at 08:07am
Verständnis der Verfügbarkeit von Bitstamp und Futures Trading Zum Zeitpunkt des aktuellen Standes des Bitstamps -Serviceangebots ist es wichtig zu kl...

Kann ich einen nachfolgenden Stopp bei Bitstamp -Futures verwenden?
Jul 23,2025 at 01:42pm
Verständnis von nachverfolgenden Stopps im Kryptowährungshandel Ein nachverfolgender Stopp ist eine dynamische Art von Stop-Loss-Reihenfolge, die sich...

Was ist die Mindesthandelsgröße für Bitstamp -Verträge?
Jul 23,2025 at 07:14pm
Bitstamp und seine Vertragsangebote verstehen Bitstamp ist einer der am längsten anstehenden Kryptowährungsbörsen, das 2011 eingerichtet wurde und für...

Wie man Eth Perpetuals im Bitstamp handelt?
Jul 23,2025 at 03:28am
Eth -Perpetual Contracts verstehen ETH Perpetual Contracts sind Derivatprodukte, mit denen Händler über den Preis von Ethereum spekulieren können, ohn...

Warum wird meine Bitstamp -Futures -Position liquidiert?
Jul 23,2025 at 11:08am
Verständnis der Futures Liquidation bei Bitstamp Der Futures -Handel mit Bitstamp beinhaltet das Ausleihen von Fonds für offene Hebelpositionen, was s...

Bietet Bitstamp inverse Verträge an?
Jul 23,2025 at 01:28pm
Verständnis inverser Verträge im Kryptowährungshandel Im Bereich der Kryptowährungsderivate sind inverse Verträge eine bestimmte Art von Futures oder ...

Wie finde ich Ihre Bitstamp -Futures -Handelsgeschichte?
Jul 23,2025 at 08:07am
Verständnis der Verfügbarkeit von Bitstamp und Futures Trading Zum Zeitpunkt des aktuellen Standes des Bitstamps -Serviceangebots ist es wichtig zu kl...

Kann ich einen nachfolgenden Stopp bei Bitstamp -Futures verwenden?
Jul 23,2025 at 01:42pm
Verständnis von nachverfolgenden Stopps im Kryptowährungshandel Ein nachverfolgender Stopp ist eine dynamische Art von Stop-Loss-Reihenfolge, die sich...

Was ist die Mindesthandelsgröße für Bitstamp -Verträge?
Jul 23,2025 at 07:14pm
Bitstamp und seine Vertragsangebote verstehen Bitstamp ist einer der am längsten anstehenden Kryptowährungsbörsen, das 2011 eingerichtet wurde und für...

Wie man Eth Perpetuals im Bitstamp handelt?
Jul 23,2025 at 03:28am
Eth -Perpetual Contracts verstehen ETH Perpetual Contracts sind Derivatprodukte, mit denen Händler über den Preis von Ethereum spekulieren können, ohn...
Alle Artikel ansehen
