fix: use UintBn64 for gloas ExecutionPayloadBid.executionPayment - #9749
Conversation
executionPayment is an unbounded uint64 in process_execution_payload_bid, so a block can carry any value; UintBn64 keeps the bid hashTreeRoot exact for values above 2**53 (matching exact-uint64 clients). 🤖 Generated with AI assistance Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
nflaig
left a comment
There was a problem hiding this comment.
this seems valid to me, that's why adding useless fields like execution_payment to the spec containers is bad, at least found this before any public testnet/mainnet, the reason why this is problematic is because we would produce a different HTR if such a bid was in a canonical block, causing a consensus split, not sure why we use number here, this field can be arbitrarily controlled by a proposer (or builder if bid is accepted)
|
looks good, I checked that changes properly cover all places where |
|
Thanks @markolazic01 for double-checking the @nflaig — agreed on all counts. The |
nflaig
left a comment
There was a problem hiding this comment.
must be done, this field can be controlled by the proposer or builder, gonna merge this
…inSafe#9749) `ExecutionPayloadBid.executionPayment` is a `uint64` with no bound in `process_execution_payload_bid`. Back it with `UintBn64` (exact) instead of `UintNum64` (float64, lossy above 2**53) so the bid hashTreeRoot stays exact across the full uint64 range. Gloas-only, no mainnet impact.
ExecutionPayloadBid.executionPaymentis auint64with no bound inprocess_execution_payload_bid. Back it withUintBn64(exact) instead ofUintNum64(float64, lossy above 2**53) so the bid hashTreeRoot stays exact across the full uint64 range. Gloas-only, no mainnet impact.