如何获取支付 gas 的地址(发送交易)?
How to get the address who is paying the gas (Sending the transaction)?
我有一个用例来奖励实际发送交易并为交易支付 gas 的用户。
我们知道 msg.sender returns 调用的地址,但是,当从另一个合约调用合约时, msg.sender returns 被调用的合约地址。但在这种情况下,我需要实际发送交易的用户的地址。
mapping(address=>uint256) public txSender;
function test() public {
address _txSender = getTxSender();
txSender[_txSender]++;
}
function getTxSender() public view returns(address) {
return msg.sender;
}
getTxSender 并不总是 returns 签署 tx 的实际用户。
您可以在 tx.origin
全局变量中访问原始发件人。
请注意,使用此变量进行授权被视为 vulnerability。
因此,如果您需要使用原始发件人地址进行授权,您应该将 msg.sender
从第一个合约 - 通过内部交易链 - 传递到接收信息的最终合约。
我有一个用例来奖励实际发送交易并为交易支付 gas 的用户。 我们知道 msg.sender returns 调用的地址,但是,当从另一个合约调用合约时, msg.sender returns 被调用的合约地址。但在这种情况下,我需要实际发送交易的用户的地址。
mapping(address=>uint256) public txSender;
function test() public {
address _txSender = getTxSender();
txSender[_txSender]++;
}
function getTxSender() public view returns(address) {
return msg.sender;
}
getTxSender 并不总是 returns 签署 tx 的实际用户。
您可以在 tx.origin
全局变量中访问原始发件人。
请注意,使用此变量进行授权被视为 vulnerability。
因此,如果您需要使用原始发件人地址进行授权,您应该将 msg.sender
从第一个合约 - 通过内部交易链 - 传递到接收信息的最终合约。