26259 - [SC - Insight] txHash collision is possible
Previous26236 - [SC - Insight] Malicious DeGate Operator EOA can irreversibly ...Next26275 - [SC - Insight] Bad implementation of executeTransaction functi...
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
pragma experimental ABIEncoderV2;
import "forge-std/Test.sol";
import "../../../src/contracts/timelock/Timelock.sol";
contract CollisionTest is Test {
Timelock public timelock;
address public admin = makeAddr("admin");
uint256 public delay = 45 days;
function setUp() public {
vm.startPrank(admin);
timelock = new Timelock({
admin_: admin,
delay_: delay
});
vm.stopPrank();
}
function testCollision() public {
// Make transaction
address target = makeAddr("target");
uint256 value = 0;
string memory signature = "";
bytes memory data = abi.encode("data");
uint256 eta = block.timestamp + delay;
// Queue transaction twice
vm.startPrank(admin);
timelock.queueTransaction(target, value, signature, data, eta);
timelock.queueTransaction(target, value, signature, data, eta);
// Execute first transaction
vm.warp(block.timestamp + delay);
timelock.executeTransaction(target, value, signature, data, eta);
// Cannot execute second transaction
vm.warp(block.timestamp + delay);
vm.expectRevert("Timelock::executeTransaction: Transaction hasn't been queued.");
timelock.executeTransaction(target, value, signature, data, eta);
}
}Running 1 test for test/timelock/PoCs/Collision.t.sol:CollisionTest
[PASS] testCollision() (gas: 57777)
Test result: ok. 1 passed; 0 failed; 0 skipped; finished in 109.99ms
Ran 1 test suites: 1 tests passed, 0 failed, 0 skipped (1 total tests)