Engine API: remove EIP-4844 blobs before insert header to chain (#1834)

This commit is contained in:
andri lim 2023-10-20 21:02:22 +07:00 committed by GitHub
parent b7d0b06e79
commit f365e0d472
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 9 deletions

View File

@ -32,6 +32,10 @@ func validateVersionedHashed*(payload: ExecutionPayload,
for x in payload.transactions:
let tx = rlp.decode(distinctBase(x), Transaction)
versionedHashes.add tx.versionedHashes
if versionedHashes.len != expected.len:
return false
for i, x in expected:
if distinctBase(x) != versionedHashes[i].data:
return false

View File

@ -123,7 +123,7 @@ proc newPayload*(ben: BeaconEngineRef,
trace "Inserting block without sethead",
hash = blockHash, number = header.blockNumber
let body = blockBody(payload)
let body = blockBody(payload, removeBlobs = true)
let vres = ben.chain.insertBlockWithoutSetHead(header, body)
if vres != ValidationResult.OK:
let blockHash = latestValidHash(db, parent, ttd)

View File

@ -105,20 +105,21 @@ func blockHeader*(p: ExecutionPayload,
parentBeaconBlockRoot: beaconRoot
)
func blockBody*(p: ExecutionPayload):
func blockBody*(p: ExecutionPayload, removeBlobs: bool):
common.BlockBody {.gcsafe, raises:[RlpError].} =
common.BlockBody(
uncles : @[],
transactions: ethTxs p.transactions,
transactions: ethTxs(p.transactions, removeBlobs),
withdrawals : ethWithdrawals p.withdrawals,
)
func ethBlock*(p: ExecutionPayload,
removeBlobs: bool,
beaconRoot: Option[common.Hash256]):
common.EthBlock {.gcsafe, raises:[CatchableError].} =
common.Ethblock(
header : blockHeader(p, beaconRoot),
uncles : @[],
txs : ethTxs p.transactions,
txs : ethTxs(p.transactions, removeBlobs),
withdrawals: ethWithdrawals p.withdrawals,
)

View File

@ -84,8 +84,8 @@ const
MIN_BLOB_GASPRICE* = 1'u64
BLOB_GASPRICE_UPDATE_FRACTION* = 3338477'u64
MAX_BLOB_GAS_PER_BLOCK* = 786432
MAX_ALLOWED_BLOB* = MAX_BLOB_GAS_PER_BLOCK div GAS_PER_BLOB
MAX_BLOBS_PER_BLOCK* = int(MAX_BLOB_GAS_PER_BLOCK div GAS_PER_BLOB)
# EIP-4788 addresses
# BEACON_ROOTS_ADDRESS is the address where historical beacon roots are stored as per EIP-4788
BEACON_ROOTS_ADDRESS* = hexToByteArray[20]("0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02")

View File

@ -274,8 +274,8 @@ proc validateTxBasic*(
if tx.versionedHashes.len == 0:
return err("invalid tx: there must be at least one blob")
if tx.versionedHashes.len > MAX_ALLOWED_BLOB.int:
return err("invalid tx: versioned hashes len exceeds MAX_ALLOWED_BLOB=" & $MAX_ALLOWED_BLOB &
if tx.versionedHashes.len > MAX_BLOBS_PER_BLOCK:
return err("invalid tx: versioned hashes len exceeds MAX_BLOBS_PER_BLOCK=" & $MAX_BLOBS_PER_BLOCK &
". get=" & $tx.versionedHashes.len)
for i, bv in tx.versionedHashes:

View File

@ -139,7 +139,7 @@ proc validateTxEip4844(tx: Transaction) =
(acl.storageKeys.len <= MAX_ACCESS_LIST_STORAGE_KEYS)
isValid = isValid and
tx.versionedHashes.len <= MAX_ALLOWED_BLOB.int
tx.versionedHashes.len <= MAX_BLOBS_PER_BLOCK
for bv in tx.versionedHashes:
isValid = isValid and