Skip to content

Conversation

@matheusaaguiar
Copy link
Collaborator

@matheusaaguiar matheusaaguiar commented Aug 19, 2025

Partially solves #15795.
Deprecation warnings for:

@cameel
Copy link
Collaborator

cameel commented Aug 19, 2025

Just a quick heads up: note that the issues you listed in the description should not be closed when this PR is merged. They're about feature removals and adding a warning is just an intermediate step, not a complete solution.

@matheusaaguiar matheusaaguiar force-pushed the deprecation_warnings branch 3 times, most recently from 3c00eb6 to f052fe2 Compare August 20, 2025 22:52
@matheusaaguiar matheusaaguiar force-pushed the deprecation_warnings branch 2 times, most recently from 6d32b8c to 2531e30 Compare September 3, 2025 02:24
@github-actions
Copy link

This pull request is stale because it has been open for 14 days with no activity.
It will be closed in 7 days unless the stale label is removed.

@github-actions github-actions bot added the stale The issue/PR was marked as stale because it has been open for too long. label Sep 26, 2025
@matheusaaguiar matheusaaguiar removed the stale The issue/PR was marked as stale because it has been open for too long. label Sep 27, 2025
@github-actions
Copy link

This pull request is stale because it has been open for 14 days with no activity.
It will be closed in 7 days unless the stale label is removed.

@github-actions github-actions bot added the stale The issue/PR was marked as stale because it has been open for too long. label Oct 12, 2025
@matheusaaguiar matheusaaguiar removed the stale The issue/PR was marked as stale because it has been open for too long. label Oct 13, 2025
you have to implement a receive Ether function (using payable fallback functions for receiving Ether is
not recommended, since the fallback is invoked and would not fail for interface confusions
on the part of the sender).
Note that ``send`` and ``transfer`` are scheduled to be deprecated in the next breaking version (0.9).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we deprecate them sooner, with this PR, and then with 0.9 (or another future breaking release) they are removed? Also I think this could be its own warning block. Perhaps even the first one.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure. I tried to find somewhere whether we define when it will be deprecated but couldn't locate anything yet.

Copy link
Member

@clonker clonker Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deprecated means it is available but it is encouraged to use something else (mostly because itll be removed in the future). So as soon as we merge the PR and have a release, it is deprecated. It was meant as a leading question. It should be phrased differently.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess I was using deprecation instead of removal. I will change the wording here to reflect that.

Comment on lines 295 to 297
call to the contract with empty calldata. This is the function that is executed
on plain Ether transfers (e.g. via ``.send()`` or ``.transfer()``). If no such
function exists, but a payable :ref:`fallback function <fallback-function>`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps not in this PR but I think we will have to go through the docs regarding send and transfer and see where we have to update them wrt best practices regarding send and transfer

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I was thinking about this. We will need to update parts of the docs to reflect the deprecation of these functionalities.
I guess a separate PR for that would be better for organization purposes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. It has to be done before we release though. :)

// If someone sends Ether to that contract,
// the transfer will fail, i.e. this returns false here.
// This will report a warning
return testPayable.send(2 ether);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new way of writing this without the gas limits would be this right?

(bool sent,) = address(test).call{value: 2 ether}("");
return sent;

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That should be part of the warning.


.. _modifier-overriding:

Modifier Overriding
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe wouldn't hurt to clarify that this is deprecated already in the headline?

Suggested change
Modifier Overriding (deprecated)

(this can always be forced by the caller) and it also fails if the recipient runs out of gas. So in order
to make safe Ether transfers, always check the return value of ``send``, use ``transfer`` or even better:
use a pattern where the recipient withdraws the Ether.
Please, be aware that ``send`` will be deprecated in the next breaking version (0.9).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could be a warning block

backward-compatibility with older compiler versions, prefer using the dialect string.
.. warning::
The ``memory-safe-assembly`` special comment will be deprecated in the next breaking version (0.9).
So, if you are not concerned with backward-compatibility with older compiler versions, prefer using the dialect string.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of curiosity, do we have a backwards-compatible way of handling this?

@clonker
Copy link
Member

clonker commented Oct 28, 2025

Please go over the docs again, we will deprecate things before 0.9 and with 0.9 or a later version they will be removed. So "Note that XYZ will be deprecated in 0.9" should be "Note that XYZ are deprecated and scheduled for removal in 0.9".

I find it a bit problematic to show deprecated code in the examples. This should be updated to be according to best practices. I am not sure if this PR is the right place for it, but if you find it's not, it should be done in a follow-up.

Generally I'd have liked that alongside the .. warning of a deprecation you not only say that it is deprecated but also give a hint what to do instead. For example:

.. warning::
    The following patterns are deprecated and will be removed in v0.9:

    - ``address.send()`` - Use ... instead
    - ``address.transfer()`` - Use ...

Also the code-emitted warnings have to be updated to reflect that things are deprecated now and will be removed in a future breaking release. Please present alternatives there (like for the send stuff to use call) and if possible it would be great to provide a link to the docs where this is described. Otherwise users are left stranded. Think what you would like to see if a compiler presents you with a deprecation warning.

Implementation-wise it looks good.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants