Skip to content

Commit

Permalink
fix: add uniswap extended uniswap methods
Browse files Browse the repository at this point in the history
  • Loading branch information
gabririgo committed Oct 25, 2022
1 parent 6d63ba4 commit 64ef4a3
Showing 1 changed file with 41 additions and 3 deletions.
44 changes: 41 additions & 3 deletions contracts/protocol/extensions/adapters/AMulticall.sol
Original file line number Diff line number Diff line change
@@ -1,15 +1,25 @@
// SPDX-License-Identifier: Apache-2.0-or-later
// SPDX-License-Identifier: GPL-2.0-or-later

// solhint-disable-next-line
pragma solidity 0.8.17;

import "./interfaces/IAMulticall.sol";

/// @title AMulticall - Allows sending mulple transactions to the pool.
/// @notice As per https://github.com/Uniswap/v3-periphery/blob/main/contracts/base/Multicall.sol
/// @notice As per https://github.com/Uniswap/swap-router-contracts/blob/main/contracts/base/MulticallExtended.sol
contract AMulticall is IAMulticall {
modifier checkDeadline(uint256 deadline) {
require(_blockTimestamp() <= deadline, 'AMULTICALL_DEADLINE_PAST_ERROR');
_;
}

modifier checkPreviousBlockhash(bytes32 previousBlockhash) {
require(blockhash(block.number - 1) == previousBlockhash, 'AMULTICALL_BLOCKHASH_ERROR');
_;
}

/// @inheritdoc IAMulticall
function multicall(bytes[] calldata data) external override returns (bytes[] memory results) {
function multicall(bytes[] calldata data) public override returns (bytes[] memory results) {
results = new bytes[](data.length);
for (uint256 i = 0; i < data.length; i++) {
(bool success, bytes memory result) = address(this).delegatecall(data[i]);
Expand All @@ -26,4 +36,32 @@ contract AMulticall is IAMulticall {
results[i] = result;
}
}

/// @inheritdoc IAMulticall
function multicall(uint256 deadline, bytes[] calldata data)
external
payable
override
checkDeadline(deadline)
returns (bytes[] memory)
{
return multicall(data);
}

/// @inheritdoc IAMulticall
function multicall(bytes32 previousBlockhash, bytes[] calldata data)
external
payable
override
checkPreviousBlockhash(previousBlockhash)
returns (bytes[] memory)
{
return multicall(data);
}

/// @dev Method that exists purely to be overridden for tests
/// @return The current block timestamp
function _blockTimestamp() internal view virtual returns (uint256) {
return block.timestamp;
}
}

0 comments on commit 64ef4a3

Please sign in to comment.