Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update EIP-7002: return fee from getter and add usage example #9024

Merged
merged 1 commit into from
Nov 27, 2024

Conversation

fjl
Copy link
Contributor

@fjl fjl commented Nov 7, 2024

The get operation is meant to be used by contracts to compute the exact amount of ether required to add a withdrawal request. It does not return the fee directly though, but it returns the count of 'excess requests' instead. The caller has to compute the fee themselves by applying the fee formula.

I think this is not great. The fee logic, while reasonably straightforward, is an implementation detail of the contract. Duplicating it into caller contracts could lead to a mismatch in the computed values, and it's not necessary. I propose we change the system contract to return the fee directly. This contract change has also been submitted in this PR: lightclient/sys-asm#33

The Rationale section of the EIP also had some outdated text about returning fee overage to the caller. The contract does not return overage, so I am removing that section here, and adding recommendations & example code for calling the contract.

Related change to EIP-7251: #9025

@fjl fjl requested a review from eth-bot as a code owner November 7, 2024 13:31
@github-actions github-actions bot added c-update Modifies an existing proposal s-review This EIP is in Review t-core labels Nov 7, 2024
@eth-bot
Copy link
Collaborator

eth-bot commented Nov 7, 2024

✅ All reviewers have approved.

@eth-bot eth-bot added the a-review Waiting on author to review label Nov 7, 2024
@eth-bot eth-bot changed the title EIP-7002: return fee from getter and add usage example Update EIP-7002: return fee from getter and add usage example Nov 7, 2024
@fjl fjl force-pushed the eip-7002-fee-return branch from 06d3775 to c7a117c Compare November 7, 2024 13:32
@pk910
Copy link
Member

pk910 commented Nov 9, 2024

The number of requests in the queue is very helpful to calculate when a request gets dequeued and processed by the consensus layer..
I get the Idea of not duplicating the fee logic, and appreciate that. But the number of entries should still be available somehow, as going back from the fee to that number is impossible.

@fjl
Copy link
Contributor Author

fjl commented Nov 14, 2024

Thanks for bringing this up. My question is, do you really need to access the number of excess entries from within a contract?

@fjl
Copy link
Contributor Author

fjl commented Nov 25, 2024

@pk910 I have discussed your concern with @lightclient. While I understand the change removes the ability for contracts to reason about potential inclusion time of the requests in the beacon chain, it's important to understand that such an estimate can never be reliable. The beacon chain processes the requests asynchonously, i.e. requests output by the system contract will be added into another queue in the beacon client, which it will then apply into future beacon blocks. See the beacon spec for the code. Since it is an unreliable estimate at best, I feel it's OK to lose this functionality, and proceed with this PR.

@mkalinin
Copy link
Contributor

@fjl can we return both values (excess and fee) from the call to the system contract?

@fjl
Copy link
Contributor Author

fjl commented Nov 25, 2024

Yes we could, but I'm arguing here that it's not necessary.

@fjl fjl force-pushed the eip-7002-fee-return branch 2 times, most recently from 944e4ac to 87116bf Compare November 25, 2024 16:01
The get operation is meant to be used by contracts to compute the exact amount of ether
required to add a withdrawal request. It does not return the fee directly though, but it
returns the count of 'excess requests' instead. The caller has to compute the fee
themselves by applying the fee formula.

I think this is not great. The fee logic, while reasonably straightforward, is an
implementation detail of the contract. Duplicating it into caller contracts could lead to
a mismatch in the computed values, and it's not necessary. I propose we change the
system contract to return the fee directly. This contract change has also been submitted
in this PR: lightclient/sys-asm#33

The Rationale section of the EIP also had some outdated text about returning fee overage
to the caller. The contract does not return overage, so I am removing that section here,
and adding recommendations & example code for calling the contract.
@fjl fjl force-pushed the eip-7002-fee-return branch from 87116bf to cf2686d Compare November 25, 2024 16:04
@mkalinin
Copy link
Contributor

requests output by the system contract will be added into another queue in the beacon client,

This is true for partial withdrawals and consolidations, full withdrawals are instantly processed. I agree that it is very unlikely for smart contracts to need an access to the excess. Also if an app (including block explorers) wants to get that data it can use eth_getStorageAt RPC call.

@mkalinin
Copy link
Contributor

shouldn’t this PR also update the smart contract's code and its deployment info?

@fjl
Copy link
Contributor Author

fjl commented Nov 26, 2024

@lightclient already merged my change to the code and updated it in the EIP in #9040. So there is no code change included here.

@eth-bot eth-bot enabled auto-merge (squash) November 27, 2024 07:12
Copy link
Collaborator

@eth-bot eth-bot left a comment

Choose a reason for hiding this comment

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

All Reviewers Have Approved; Performing Automatic Merge...

@eth-bot eth-bot merged commit a00464b into ethereum:master Nov 27, 2024
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a-review Waiting on author to review c-update Modifies an existing proposal s-review This EIP is in Review t-core
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants