-
Notifications
You must be signed in to change notification settings - Fork 1
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
commitBlobTransaction
: fix nil pointer
#23
base: op-es
Are you sure you want to change the base?
Conversation
5919b26
to
b2bc505
Compare
@@ -396,7 +396,7 @@ func (miner *Miner) commitBlobTransaction(env *environment, tx *types.Transactio | |||
// isn't really a better place right now. The blob gas limit is checked at block validation time | |||
// and not during execution. This means core.ApplyTransaction will not return an error if the | |||
// tx has too many blobs. So we have to explicitly check it here. | |||
if (env.blobs+len(sc.Blobs))*params.BlobTxBlobGasPerBlob > params.MaxBlobGasPerBlock { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the issue is due to sc == nil
, I prefer to handle sc directly with if sc != nil {}
, as the code is self-explanatory and doesn’t need additional comments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I don't think so, more safety checking is better than no checking.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean check ("handle" is misleading)sc
directly (instead of tx.BlobHashes()
).
@@ -396,7 +396,7 @@ func (miner *Miner) commitBlobTransaction(env *environment, tx *types.Transactio | |||
// isn't really a better place right now. The blob gas limit is checked at block validation time |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@qizhou suggests addressing this case at line 392 to make the code self-explanatory and explicitly handle all possible scenarios.
// isn't really a better place right now. The blob gas limit is checked at block validation time | |
nblobs := 0 | |
if sc == nil { | |
if env.isEffectivelySequencing() /* we want to allow blob tx without blobs when it's deriving */ { | |
panic("blob transaction without blobs in sequencing") | |
} else { // deriving, which does not have the sidecar | |
nblobs = len(tx.BlobHashes()) | |
} | |
} else { | |
if !env.isEffectivelySequencing() { | |
panic("blob transaction with blobs in derivation") | |
} | |
nblobs = len(sc.Blobs) | |
} | |
// should we check tx.BlobHashes() matches that of sc.Blobs.BlobHashes()? | |
// Checking against blob gas limit: It's kind of ugly to perform this check here, but there | |
// isn't really a better place right now. The blob gas limit is checked at block validation time | |
// and not during execution. This means core.ApplyTransaction will not return an error if the | |
// tx has too many blobs. So we have to explicitly check it here. | |
if (env.blobs+nblobs)*params.BlobTxBlobGasPerBlob > params.MaxBlobGasPerBlock { | |
return errors.New("max data blobs reached") | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done in 80a30e2.
@@ -396,7 +396,7 @@ func (miner *Miner) commitBlobTransaction(env *environment, tx *types.Transactio | |||
// isn't really a better place right now. The blob gas limit is checked at block validation time | |||
// and not during execution. This means core.ApplyTransaction will not return an error if the | |||
// tx has too many blobs. So we have to explicitly check it here. | |||
if (env.blobs+len(sc.Blobs))*params.BlobTxBlobGasPerBlob > params.MaxBlobGasPerBlock { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we check whether len(tx.BlobHashes()) matches len(sc.Blobs), or is this validation handled elsewhere in the code?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
When sc != nil
, it must be sequencing. In this mode, the blob tx must be pulled from the tx pool, which has already done the validation. So it's not necessary to check it again here.
fea317d
to
80a30e2
Compare
Fix this panic found by @iteyelmp :