問題一覧に戻る
上級セキュリティパターン
問題82: フロントランニング対策

Solidityのコミットリビールスキームを学習 - フロントランニング攻撃と価格操作を防止。フロントランナーは保留中のトランザクションを見て利益のために悪用。コミットリビールはアクションを2段階に分割:まず秘密データのハッシュをコミット、後で実際のデータをリビール。これにMEV攻撃を防ぎ、公平なオークションを保証し、センシティブな操作を保護。フロントランニング対策の理解は公平なDeFiプロトコル構築に不可欠です。

pragma solidity ^0.8.0;

contract CommitReveal {
struct Commit {
bytes32 commitment;
uint256 timestamp;
bool revealed;
}

mapping(address => Commit) public commits;
uint256 public constant REVEAL_PERIOD = 1 hours;

// 秘密ハッシュをコミット
function commit(bytes32 _commitment) public {
commits[msg.sender] = Commit({
commitment: ,
timestamp: ,
revealed: false
});
}

// 実際の値をリビール
function reveal(uint256 value, uint256 nonce) public {
Commit storage userCommit = commits[msg.sender];

// コミットメントとタイミングを検証
require( > 0, "No commitment");
require(!userCommit., "Already revealed");
require(
block.timestamp <= userCommit.timestamp + ,
"Reveal period expired"
);

bytes32 hash = keccak256(abi.encodePacked(value, nonce));
require(hash == userCommit.commitment, "Invalid reveal");

userCommit.revealed = true;
// Process value
}
}