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

core/types: support yParity field in JSON transactions #27744

Merged
merged 8 commits into from
Aug 4, 2023

Conversation

fjl
Copy link
Contributor

@fjl fjl commented Jul 18, 2023

Fixes #27727

@fjl fjl requested a review from lightclient July 18, 2023 14:03
Copy link
Member

@lightclient lightclient left a comment

Choose a reason for hiding this comment

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

Looks good in general, just a couple small questions.

@@ -155,23 +186,24 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error {
return errors.New("missing required field 'input' in transaction")
}
itx.Data = *dec.Input
if dec.V == nil {
Copy link
Member

Choose a reason for hiding this comment

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

Why change the ordering?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Seemed to look better to me.

Copy link
Member

Choose a reason for hiding this comment

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

Feels weird to have them out of order. v, r, s ordering is pretty widely understood.

if dec.S == nil {
return errors.New("missing required field 's' in transaction")
}
itx.S = (*big.Int)(dec.S)
withSignature := itx.V.Sign() != 0 || itx.R.Sign() != 0 || itx.S.Sign() != 0
if withSignature {
Copy link
Member

Choose a reason for hiding this comment

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

So before this change, sanityCheckSignature would only run when any value v, r, or s was non-zero. Now it runs always, meaning users who were unmarshalling txs with all zeros will now have an error?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I have restored this behavior now, but I don't really get it. The signature values are mandatory, but all-zero is OK?

Copy link
Member

Choose a reason for hiding this comment

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

The only place I am aware this functionality is used is in t8n to denote that the transaction should be signed using the provided secretKey:

"v": "0x0",
"r": "0x0",
"s": "0x0",

Would probably be good to get rid of all-zero values at some point, but I'm not sure what else depends on this behavior.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Either way it doesn't matter since an all zero signature will be invalid anyway.

Copy link
Contributor

@holiman holiman left a comment

Choose a reason for hiding this comment

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

LGTM

@fjl fjl removed the status:triage label Aug 1, 2023
fjl added 8 commits August 4, 2023 14:24

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait

Verified

This commit was signed with the committer’s verified signature.
RobinMalfait Robin Malfait
@fjl fjl force-pushed the core-types-yparity branch from 90fe254 to ea208a3 Compare August 4, 2023 21:48
@fjl fjl added this to the 1.12.1 milestone Aug 4, 2023
@fjl fjl merged commit bb148dd into ethereum:master Aug 4, 2023
devopsbo3 pushed a commit to HorizenOfficial/go-ethereum that referenced this pull request Nov 10, 2023
This adds support for the "yParity" field in transaction objects returned by RPC
APIs. We somehow forgot to add this field even though it has been in the spec for
a long time.
devopsbo3 added a commit to HorizenOfficial/go-ethereum that referenced this pull request Nov 10, 2023
devopsbo3 added a commit to HorizenOfficial/go-ethereum that referenced this pull request Nov 10, 2023
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.

Type 1 and type 2 transactions have yParity, not v
3 participants