Precompile 0x0100 (RIP-7212) returns empty returndata in eth_sendTransaction, but works with eth_call #6629
Replies: 2 comments
-
Sounds like it's probably an EDR issue. I've filed a ticket here: NomicFoundation/edr#886 Thank you for the detailed context! |
Beta Was this translation helpful? Give feedback.
-
Hey @craterface77, we've released EDR v0.11.3 with a fix for this issue (tracked in EDR by NomicFoundation/edr#886). EDR is a dependency of Hardhat. To upgrade to the latest EDR version immediately, you can remove your node_modules directory and npm/yarn/pnpm lock file and reinstall your dependencies. Otherwise you can wait for the next Hardhat release which will automatically use the latest EDR version. You can verify that you're using the latest version of EDR by running the following command: npm ls @nomicfoundation/edr. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello!
I'm using Hardhat v2.22.18 with the option enableRip7212: true in hardhat.config.ts.
In my tests, I encountered unexpected behavior when calling precompile 0x0100 (P-256 / RIP-7212):
Behavior
• When directly calling eth_call on a contract, where staticcall(0x0100, ...) is used, the correct returndata = 0x...01 (32 bytes) is returned.
• But when calling the same method through a real transaction (eth_sendTransaction) — returndata is empty (0x), although success == true.
Context:
I call 0x0100 from the WebAuthnValidator smart contract inside EntryPoint.handleOps(...).
Here is an example of a Solidity call:
The arguments h, r, s, qx, qy are the same in both cases.
What I tried
• I made sure that everything works with eth_call.
• I made sure that all values are valid (external signature validation is confirmed).
• I put console.logBytes(...) before the call - everything matches.
• I see the same thing on the OP Sepolia and Citrea networks: eth_call works, but tx returns an empty returndata.
Expected behavior
I expect 0x0100 to return not only on eth_call, but also in the actual transaction (eth_sendTransaction) if enableRip7212: true is enabled.
Possible explanation
It seems that the precompile is only enabled on the eth_call execution path, and not on the block simulation (tx-runner / mining path). If so, is there a fix planned?
Thank you!
Beta Was this translation helpful? Give feedback.
All reactions