Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/enforcers/ERC20StreamingEnforcer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,9 @@ contract ERC20StreamingEnforcer is CaveatEnforcer {
)
private
{
(address target_,, bytes calldata callData_) = _executionCallData.decodeSingle();
(address target_, uint256 value_, bytes calldata callData_) = _executionCallData.decodeSingle();

require(value_ == 0, "ERC20StreamingEnforcer:invalid-value");
require(callData_.length == 68, "ERC20StreamingEnforcer:invalid-execution-length");

(address token_, uint256 initialAmount_, uint256 maxAmount_, uint256 amountPerSecond_, uint256 startTime_) =
Expand Down
3 changes: 2 additions & 1 deletion src/enforcers/OwnershipTransferEnforcer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ contract OwnershipTransferEnforcer is CaveatEnforcer {
pure
returns (address newOwner_)
{
(address target_,, bytes calldata callData_) = _executionCallData.decodeSingle();
(address target_, uint256 value_, bytes calldata callData_) = _executionCallData.decodeSingle();

require(value_ == 0, "OwnershipTransferEnforcer:invalid-value");
require(callData_.length == 36, "OwnershipTransferEnforcer:invalid-execution-length");

bytes4 selector_ = bytes4(callData_[0:4]);
Expand Down
11 changes: 11 additions & 0 deletions test/enforcers/ERC20StreamingEnforcer.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,17 @@ contract ERC20StreamingEnforcerTest is CaveatEnforcerBaseTest {
}

//////////////////// Error / Revert Tests //////////////////////

/// @notice Reverts if a streaming ERC20 transfer execution carries non-zero native value.
function test_revertOnNonZeroValue() public {
bytes memory terms_ = _encodeTerms(address(basicERC20), 10 ether, 100 ether, 1 ether, block.timestamp);
bytes memory callData_ = _encodeERC20Transfer(bob, 1 ether);
bytes memory execData_ = _encodeSingleExecution(address(basicERC20), 1, callData_);

vm.expectRevert(bytes("ERC20StreamingEnforcer:invalid-value"));
erc20StreamingEnforcer.beforeHook(terms_, bytes(""), singleDefaultMode, execData_, bytes32(0), address(0), alice);
}

/**
* @notice Ensures it reverts if `_terms.length != 148`.
*/
Expand Down
18 changes: 18 additions & 0 deletions test/enforcers/OwnershipTransferEnforcer.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,24 @@ contract OwnershipTransferEnforcerTest is CaveatEnforcerBaseTest {

////////////////////// Errors //////////////////////

// Reverts if ownership transfer execution carries non-zero native value
function test_revertOnNonZeroValue() public {
address newOwner = address(0x5678);
bytes memory terms_ = abi.encodePacked(mockContract);
transferOwnershipExecution = Execution({
target: mockContract,
value: 1,
callData: abi.encodeWithSelector(bytes4(keccak256("transferOwnership(address)")), newOwner)
});
transferOwnershipExecutionCallData = ExecutionLib.encodeSingle(
transferOwnershipExecution.target, transferOwnershipExecution.value, transferOwnershipExecution.callData
);

vm.prank(dm);
vm.expectRevert("OwnershipTransferEnforcer:invalid-value");
enforcer.beforeHook(terms_, hex"", singleDefaultMode, transferOwnershipExecutionCallData, bytes32(0), delegator, delegate);
}

// Reverts if the terms length is invalid
function test_invalid_termsLength() public {
bytes memory invalidTerms = abi.encodePacked(mockContract, uint256(1)); // Too long
Expand Down