contract BoringBatchableWithDai is BaseBoringBatchable {
    /// @notice Call wrapper that performs `ERC20.permit` using DAI-derived EIP-2612 primitive.
    function permitDai(
        IDAIPermit token,
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        token.permit(holder, spender, nonce, expiry, true, v, r, s);
    }
    
    /// @notice Call wrapper that performs EIP-2612 `ERC20.permit` on `token`.
    function permitToken(
        IERC20 token,
        address from,
        address to,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        token.permit(from, to, amount, deadline, v, r, s);
    }
}
/// @dev Extends `BoringBatchable` with DAI-derived {permit}.
function permitDai(
    IDAIPermit token,
    address holder,
    address spender,
    uint256 nonce,
    uint256 expiry,
    uint8 v,
    bytes32 r,
    bytes32 s
) public {
    token.permit(holder, spender, nonce, expiry, true, v, r, s);
}

/// @notice Call wrapper that performs `ERC20.permit` using DAI-derived EIP-2612 primitive.