From 09f11112f82fb8988942e3004ff2829279d8305b Mon Sep 17 00:00:00 2001 From: harkamal Date: Sat, 15 Apr 2023 00:20:22 +0530 Subject: [PATCH] client: add proofs to blobsbundle --- packages/client/lib/miner/pendingBlock.ts | 5 +++++ packages/client/lib/rpc/modules/engine.ts | 2 ++ packages/client/test/miner/pendingBlock.spec.ts | 10 +++++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/client/lib/miner/pendingBlock.ts b/packages/client/lib/miner/pendingBlock.ts index 802d354ec6d..89bb4bc1a68 100644 --- a/packages/client/lib/miner/pendingBlock.ts +++ b/packages/client/lib/miner/pendingBlock.ts @@ -37,6 +37,7 @@ interface BlobBundle { blockHash: string blobs: Uint8Array[] kzgCommitments: Uint8Array[] + proofs: Uint8Array[] } /** * In the future this class should build a pending block by keeping the @@ -323,10 +324,12 @@ export class PendingBlock { ) => { let blobs: Uint8Array[] = [] let kzgCommitments: Uint8Array[] = [] + let proofs: Uint8Array[] = [] const bundle = this.blobBundles.get(payloadId) if (bundle !== undefined) { blobs = bundle.blobs kzgCommitments = bundle.kzgCommitments + proofs = bundle.proofs } for (let tx of txs) { @@ -334,12 +337,14 @@ export class PendingBlock { if (tx.blobs !== undefined && tx.blobs.length > 0) { blobs = blobs.concat(tx.blobs) kzgCommitments = kzgCommitments.concat(tx.kzgCommitments!) + proofs = proofs.concat(tx.kzgProofs!) } } this.blobBundles.set(payloadId, { blockHash: bytesToPrefixedHexString(blockHash), blobs, kzgCommitments, + proofs, }) } } diff --git a/packages/client/lib/rpc/modules/engine.ts b/packages/client/lib/rpc/modules/engine.ts index a9810b8e382..1621aa5db85 100644 --- a/packages/client/lib/rpc/modules/engine.ts +++ b/packages/client/lib/rpc/modules/engine.ts @@ -112,6 +112,7 @@ type BlobsBundleV1 = { blockHash: string kzgs: Bytes48[] blobs: Blob[] + proofs: Bytes48[] } type ExecutionPayloadBodyV1 = { @@ -1074,6 +1075,7 @@ export class Engine { blockHash: bundle.blockHash, kzgs: bundle.kzgCommitments.map(bytesToPrefixedHexString), blobs: bundle.blobs.map(bytesToPrefixedHexString), + proofs: bundle.proofs.map(bytesToPrefixedHexString), } } diff --git a/packages/client/test/miner/pendingBlock.spec.ts b/packages/client/test/miner/pendingBlock.spec.ts index f86390efc31..1ddd513fff7 100644 --- a/packages/client/test/miner/pendingBlock.spec.ts +++ b/packages/client/test/miner/pendingBlock.spec.ts @@ -5,6 +5,7 @@ import { Account, Address, blobsToCommitments, + blobsToProofs, bytesToHex, bytesToPrefixedHexString, commitmentsToVersionedHashes, @@ -277,12 +278,14 @@ tape('[PendingBlock]', async (t) => { const blobs = getBlobs('hello world') const commitments = blobsToCommitments(blobs) const versionedHashes = commitmentsToVersionedHashes(commitments) + const proofs = blobsToProofs(blobs, commitments) const txA01 = BlobEIP4844Transaction.fromTxData( { versionedHashes, blobs, kzgCommitments: commitments, + kzgProofs: proofs, maxFeePerDataGas: 100000000n, gasLimit: 0xffffffn, maxFeePerGas: 1000000000n, @@ -298,8 +301,13 @@ tape('[PendingBlock]', async (t) => { const parentBlock = await vm.blockchain.getCanonicalHeadBlock!() const payloadId = await pendingBlock.start(vm, parentBlock) await pendingBlock.build(payloadId) - const pendingBlob = pendingBlock.blobBundles.get(bytesToPrefixedHexString(payloadId))?.blobs[0] + + const blobBundle = pendingBlock.blobBundles.get(bytesToPrefixedHexString(payloadId))! + st.ok(blobBundle !== undefined) + const pendingBlob = blobBundle.blobs[0] st.ok(pendingBlob !== undefined && equalsBytes(pendingBlob, blobs[0])) + const blobProof = blobBundle.proofs[0] + st.ok(blobProof !== undefined && equalsBytes(blobProof, proofs[0])) st.end() }) t.test('should reset td', (st) => {