問題一覧に戻る
中級実践的な機能
問題67: Txオブジェクト
Solidityのtxグローバルオブジェクトを学習します - トランザクションレベル情報へのアクセスです。tx.originはトランザクションチェーンを開始した元の外部アカウント、tx.gaspriceは設定されたガス価格を示します。tx.originはコントラクト間呼び出しでmsg.senderと異なります。認証にtx.originを使用するのはフィッシング攻撃を可能にするため危険です。Bot制限に使われることもありますがセキュリティ用途ではありません。tx.gaspriceはガス対応ロジックの実装に役立ちます(注:EIP-1559ではbaseFee + priorityFeeに分離)。重要な認証にtx.originを決して使用しないでください。
pragma solidity ^0.8.0;
contract TxInfo {
mapping(address => uint256) public lastAction;
// 警告:認証にtx.originを使用しないでください!
modifier limitBots() {
// Bot制限の例(セキュリティ用途ではない)
require( == , "No contracts");
_;
}
// ガス価格を取得(注:EIP-1559の変更)
function getGasPrice() public view returns (uint256) {
return ;
}
// Bot制限の使用例
function recordAction() public limitBots {
lastAction[msg.sender] = block.timestamp;
}
}