Conversation
Co-authored-by: developeruche <developeruche@gmail.com>
Require a complete witness for every VALID response and clarify trie, bytecode, and ancestor-header contents. Keep behavioral rules in refactor.md and SSZ definitions in refactor-ssz.md.
|
This looks good to me!.. But currently, this capability is not being advertised. I guess What do you think?
|
Uhm, I'm not sure this is necessary, since in this PR we already say that this optional endpoint is advertised in
So if it is advertised there, I'm not sure we need a new
|
* added example for sumbit payload witness * nit fixes
|
@MariusVanDerWijden opened for review! |
MariusVanDerWijden
left a comment
There was a problem hiding this comment.
Generally LGTM, theres one change that I couldn't understand
| ``` | ||
|
|
||
| The 41 bytes break down as: `status` (1 byte = `0x01`, `VALID`) + | ||
| The 41 bytes break down as: `status` (1 byte = `0x00`, `VALID`) + |
There was a problem hiding this comment.
Ah, this just fixes a typo in an existing example. The existing PayloadStatus enum defines VALID = 0 and INVALID = 1, so the byte here should be 0x00.
|
@MysticRyuujin could this be merged? |
|
@jsign - I usually don't merge engine changes since it's the prevue of the CL devs. Was is approved in an ACD call or something? I can merge it if there's consensus on it though. I only see @MariusVanDerWijden here and he reviewed but did not actually approve yet |
I think this was agreed to happen in a previous breakout call where @MariusVanDerWijden and @developeruche participated.
Ah, true. Maybe @MariusVanDerWijden can explicitly approve if it looks good. I kind of assumed this was okay reg his latest message but agree a green check sounds good.
@MysticRyuujin, I don't think so -- is this a requirement? (Recall this is PR express the endpoint as an optional one) |
|
Personally, I like to see a majority of clients at least thumbs up OR have implemented the proposal (or at least have drafts/PRs) to know that if we merge it, it matches or will soon match reality. It's not a hard rule for the repo but its how I see it and try to manage it on the json-rpc execution APIs side. |
Sounds good to me! I'll see to have a draft PR in an EL client to provide more confidence. Can ping back when I've something to reference! |

Note: this PR is based on previous work from @developeruche, plus some extra refinements
This PR adds
POST /engine/v1/payloads/witnessto the REST + SSZ proposal. It lets zkVM provers and stateless validators submit a payload and receive its validation result, execution witness, and transaction sender public keys in one call, avoiding a separate witness request and hex-JSON encoding.The endpoint is optional from Amsterdam onward and advertised through capabilities. It accepts the same request as
/payloads. EveryVALIDresponse must include a complete witness, including for already-known payloads; other statuses must omit it.Responses also include
public_keys, allowing proving hosts to populateStatelessInput.public_keyswithout recovering keys themselves. ForVALIDpayloads, including already-known payloads, the list contains one 65-byte uncompressed sender public key per transaction, in transaction order; for other statuses, it is empty. Stateless validators must still verify the supplied keys against transaction signatures and recovery IDs.The proposal defines witness contents, public-key semantics, SSZ containers, and size bounds. Behavioral requirements live in
refactor.md; encoding definitions live inrefactor-ssz.md.