Ethereum Protocol Fellowship (EPF) Cohort 7 — Applications open until May 13

Encrypt The Mempool #000

2026-02-18 Agenda: #1929 canonical JSON

Transcript

00:06:41
Justin Florentine (Besu):Take another minute to let people fill in, and then we'll get started.
00:06:47
Justin Florentine (Besu):Let's see, let's post the agenda. The agenda is a little bit…
00:06:54
Justin Florentine (Besu):Light, because it's our first meeting.
00:06:56
Justin Florentine (Besu):I'm gonna post it in the chat…
00:07:13
Justin Florentine (Besu):Cool. So, hey everybody, welcome to Encrypt the Mempool call number 0.
00:07:18
Justin Florentine (Besu):This is a kickoff call. We're going to encrypt the mempool. The question is how and when.
00:07:26
Justin Florentine (Besu):So… I think for starters…
00:07:29
Justin Florentine (Besu):Everybody here should already be well-versed in the designs, understand them. This is really more of a project management call.
00:07:38
Justin Florentine (Besu):does this time work for most people? Is this a recurring pain point for anybody? I think as long as we… we definitely need to have somebody from the 8105 folks, we definitely need to have somebody from the Lucid…
00:07:51
Justin Florentine (Besu):On each call, I think, until we, you know, stabilize those two EIPs.
00:07:59
Justin Florentine (Besu):Yannick, this sounds good to you? Okay, good.
00:08:03
Justin Florentine (Besu):I'm gonna make this work for me.
00:08:07
Justin Florentine (Besu):At the very least… Okay.
00:08:14
Justin Florentine (Besu):So I think for starters, maybe we can, I think, really, as we get started, we really want to have all eyes on stabilizing these EIPs.
00:08:24
Justin Florentine (Besu):It's the major first step that we need to hit. 8105 already has its EIP. Yannick, have you had changes, updates, new and interesting things that have happened on your EIP in the last week or so?
00:08:39
Jannik Luhn:Yes, we had. First of all, thanks for organizing the call, I think that's a great, great initiative, and…
00:08:47
Jannik Luhn:good to have, like, a regular space, to, to discuss this. For EIP, the update was, mostly what we've discussed earlier, the…
00:08:59
Jannik Luhn:switch to a more explicit two-slot execution design. We do that by having now two transaction types, one encrypted and one decrypted. The encrypted transaction goes to the first block, and then corresponding… correspondingly, the decrypted transaction at the start of the next block.
00:09:17
Jannik Luhn:So that should be, should make it easier for, I think applications to implement this, because there's not less, like, cross, information that needs to be
00:09:27
Jannik Luhn:Retrieve from a previous block for execution.
00:09:31
Jannik Luhn:What we have not changed there is that the…
00:09:36
Jannik Luhn:Execution context for transaction will still be the previous block, so the decrypted transaction will… if it tries to access, for example, the Coinbase address or the slot number, it will still refer to the previous block. This is so that the next builder cannot communicate with transactions after they've been included.
00:09:57
Jannik Luhn:Yes, and one more thing we added there for the decrypted transaction that might be interesting for other proposals as well, I'm not sure, is that we added a reference to the envelope signer. So, basically, the decrypt transaction has to reference the encrypted transaction as a whole.
00:10:16
Jannik Luhn:This is so that, to prevent what we call an envelope stripping attack, imagine that the transaction gets included, and the key gets published, but the key is published late, so it does not get executed.
00:10:30
Jannik Luhn:But then everyone can decrypt the transaction and potentially resend it again, and then front-run it. And to prevent that, we require the transaction to at least reference the sign of the envelope, so that only this entity can do this attack.
00:10:44
Jannik Luhn:And if they trust them, then this is prevented. So, yeah, I think these are the most important changes that we made to the proposal.
00:10:52
Justin Florentine (Besu):And these are all merged into… The EIP repository?
00:10:57
Jannik Luhn:They are pushed to the EIP repository, I'm not sure if they're merged yet.
00:11:02
Justin Florentine (Besu):I see, okay, I didn't see any open PRs… for them.
00:11:08
Jannik Luhn:I'm willing and send it to the chat.
00:11:11
Justin Florentine (Besu):That'd be great, that'd be great, thank you.
00:11:13
Justin Florentine (Besu):Those are some significant changes, that's good.
00:11:19
Justin Florentine (Besu):I think we're gonna wanna review those and take a look at them.
00:11:31
Justin Florentine (Besu):Okay, any questions for Yannick?
00:11:35
Justin Florentine (Besu):EIP-8105.
00:11:43
Justin Florentine (Besu):Remind me, Yannick, how, gas is reserved between the two slots, now that you have a two-slot design.
00:11:55
Jannik Luhn:Yes, so that's also… by the way, I just looked it up, the PR has been merged, yesterday, including the new change.
00:12:03
Justin Florentine (Besu):It does have the new change. Great.
00:12:05
Jannik Luhn:Regarding gas, so we opted for basically making the encrypted transaction consume oil gas, and the decrypted transaction to consume no gas. And the idea there is that,
00:12:24
Jannik Luhn:The builder cannot sell block space of the next block.
00:12:28
Jannik Luhn:But we still want to preserve, kind of, the… on average, the block gas limit. So this,
00:12:36
Jannik Luhn:makes it possible for one block to use, more computation than is accounted for in gas, because if a decrypted transaction takes a long time to execute, then this… the transaction in which the decrypt… the block in which the decrypted transaction is included can… still has the normal amount of gas available.
00:12:56
Jannik Luhn:But this is only possible if the previous block was lighter in a way. So the block that included the encrypted transaction will have less computation while still paying for all the gas.
00:13:11
Justin Florentine (Besu):So this is… I think this is an interesting issue that both designs need to address, is that you are paying in block N for gas consumed in block N plus 1, and the base fee is likely going to change between them.
00:13:27
Justin Florentine (Besu):And so, in block N, we charge them the full limit. I assume you guys at 8105 would charge the full limit.
00:13:36
Justin Florentine (Besu):Specified on the encrypted transaction, is that right?
00:13:45
Justin Florentine (Besu):I assume that it's bound to the decrypted transaction having the same gas limit, and so now the question becomes, like, okay, well…
00:13:53
Justin Florentine (Besu):Oh, what price do we charge them?
00:13:57
Justin Florentine (Besu):Because… We're… we're… we're giving them a future, essentially, on the gas.
00:14:06
Justin Florentine (Besu):That they're going to use in the next block, right?
00:14:11
Jannik Luhn:So that would be, in our case, the gas price of block N, the inclusion block.
00:14:19
Justin Florentine (Besu):Had anybody considered this, or have any suggestions on… on approaches?
00:14:25
Justin Florentine (Besu):You know, we could do things like just give it, like, a fixed markup.
00:14:29
Justin Florentine (Besu):Where we say, if you're going to reserve the next block's gas, it's gonna be, you know, 10% more, 12% more, or something like that.
00:14:38
Justin Florentine (Besu):We could… Calculate it, since we should know what the base fee will move to.
00:14:48
Justin Florentine (Besu):In the block.
00:14:50
Justin Florentine (Besu):We could charge it that way.
00:14:54
Justin Florentine (Besu):It will complicate… gas metering, and EL clients.
00:15:03
Justin Florentine (Besu):And, let's see, another way that we could do it would be, like, well, a fixed overhead, right? Where we say, like, this gas costs…
00:15:10
Justin Florentine (Besu):X more… Where X is going to be greater than the possible change in the base fee.
00:15:18
Justin Florentine (Besu):And we say that that's just the cost of using the feature.
00:15:23
Justin Florentine (Besu):And then the question is, is like, okay, do you burn the difference, I would assume?
00:15:29
Justin Florentine (Besu):It burns the same way.
00:15:31
Justin Florentine (Besu):The execution gas does.
00:15:36
Jannik Luhn:Do we know if this is valuable? Like, would people actually want to pay more for future gas, or is it, I mean, on average, I would guess it will cancel out, because, like, gas price will rise and fall randomly.
00:15:52
Jannik Luhn:So maybe we can just, if that's, like, not abusable, or not likely to be abused, maybe for simplicity, we can just,
00:16:00
Jannik Luhn:Use the, the, yeah, inclusion gas price.
00:16:05
Anders Elowsson:Yeah, so, actually, the thing is that,
00:16:09
Anders Elowsson:It's not random in a way, because the builder will know how much gas it uses, so the builder will know how much the price in the next block is going to be.
00:16:23
Anders Elowsson:For the transactions. But the thing is that the builder decides who gets in and who gets out.
00:16:29
Anders Elowsson:And so there's, like, no reason why, for example, if they're very…
00:16:33
Anders Elowsson:if the block is full, then… then the… the transaction that goes in in block N would benefit from the,
00:16:45
Anders Elowsson:paying for… in block N instead of block N plus 1. But… but the thing is that, it's sort of,
00:16:54
Anders Elowsson:The builder can always include a regular… it's not like an incentive to push your regular transaction into sealed transactions to pay less, in a way, because the builder can always…
00:17:10
Anders Elowsson:Put in your regular transaction anyway in the block.
00:17:17
Anders Elowsson:So there's not super dangerous incentives, as far as I can tell, if you're short for block N.
00:17:26
Anders Elowsson:the base fee at plugin.
00:17:31
Jannik Luhn:Interesting, so it's basically, the builder could, yep.
00:17:36
Jannik Luhn:Basically, yeah, the question is how much gas will be used for encrypted transactions or serial transactions, and how much for regular transactions.
00:17:57
Anders Elowsson:Yeah, so we have a… in this design, we have a limit for how much gas you can…
00:18:05
Anders Elowsson:Occupy top of block of the next block.
00:18:07
Anders Elowsson:So we… in the research post, it was a quarter, one-fourth, but now in the AP, it's currently specified to 1 eighth.
00:18:23
Jannik Luhn:Are there similar questions for pure fossil as well? Because that's always a bit strange for me, that.
00:18:34
Jannik Luhn:Basically, you can force a… yeah, you don't pay the includeers in this case, so you can get transactions in even if the builder doesn't want to, so you're kind of selling the builder's block space,
00:18:49
Jannik Luhn:I don't know, it seems to me that there might… Potentially be similar questions?
00:18:54
Anders Elowsson:Yeah, in fossil, you are not restricted in terms of gas, because it's a conditional design, and what this means is that you can have a fossil transaction that takes up all the gas, because you can make some sort of weird transaction where you just loop-loop over a for loop and write state, for example.
00:19:15
Anders Elowsson:But the thing is that you are limited in terms of the size of the transactions, and if you aggregate the sizes of the transactions that can be included via inclusion list, you are still limited to around…
00:19:31
Anders Elowsson:16 times 8 kilobytes.
00:19:40
Anders Elowsson:But anyway, the builder will know, at the time it bids for the block, it will know how much, how much…
00:19:46
Justin Florentine (Besu):How much limiting?
00:19:49
Anders Elowsson:This… how much they are limited.
00:19:52
Anders Elowsson:So if they are very limited, then they will not bid so much, maybe, maybe.
00:19:59
Jannik Luhn:Yeah, I guess adding a limit in 8.105 should also be, like, Relatively straightforward.
00:20:07
Jannik Luhn:We had a limit as well for… in… our, NOSIS chain implementation.
00:20:15
Jannik Luhn:But that was just for security, so that, in case there's some abuse happening, that we don't…
00:20:22
Jannik Luhn:Use the whole block space for that.
00:20:25
Jannik Luhn:Yeah, so I guess that's not really relevant.
00:20:39
Anders Elowsson:Yeah, so in the Lucid design, the limit fills another purpose, which is that we guarantee that once you are in a beacon block, you will get,
00:20:50
Anders Elowsson:Executed, even if the next payload is missing, but we then want to push two payloads in a row with the…
00:21:00
Anders Elowsson:With, sealed transactions. They're the ones from the missing, that were… that were committed to in the beacon block, and the ones for the previous one.
00:21:11
Anders Elowsson:And so, we at least need space for, for…
00:21:16
Anders Elowsson:For twice as many sealed transactions as the… That's the limit we set.
00:21:47
Justin Florentine (Besu):So it sounds like we still have a little bit of thinking to do on the motor?
00:21:56
Jannik Luhn:Yeah, we can, like, we're going to…
00:21:59
Jannik Luhn:Have another look at our proposal and see if we need to make updates there, and compare with Lucid.
00:22:15
Justin Florentine (Besu):Alright, any other, discussion points that folks would like to bring up?
00:22:22
Justin Florentine (Besu):This is kind of the open questions for the floor, section of the meeting.
00:22:27
Justin Florentine (Besu):Unless, Andrews, did you have anything that you wanted to say more broadly about Lucid with regard to status?
00:22:39
Anders Elowsson:Not really, we're… we're, we're, we're…
00:22:42
Anders Elowsson:We're working on the IP. I think it will take a few more days.
00:22:46
Anders Elowsson:Do we get something up?
00:22:48
Justin Florentine (Besu):Agreed. Cool.
00:22:52
Jannik Luhn:I have maybe one, question.
00:22:54
Jannik Luhn:that I've been thinking about, basically, I'm wondering if people have, done this already?
00:23:03
Jannik Luhn:So, we could look into real-world data, we could look at existing blocks, and see… check out the transactions that went through private mempools.
00:23:14
Jannik Luhn:And then see if we shuffle them randomly, if they still use the same amount of gas and lead to roughly the same execution results.
00:23:24
Jannik Luhn:Because if that's not the case, then, that would be maybe a reason that people would not want to use an encrypted mempool, because they don't have, like, specific ordering guarantees. That would mean they want to use private mempools, because they get, like, better, execution quality, basically.
00:23:44
Jannik Luhn:Another, thing that we could check there is if,
00:23:54
Jannik Luhn:I forgot, I had one, other reason for that.
00:23:59
Jannik Luhn:But basically, yeah, did people… do we know if some people did research there, check into, check out how existing… oh, yeah, yeah, basically, the, the key withholding in order to front-run attack. Basically, keep the order as is, add other… and try to simulate front-running attacks,
00:24:20
Jannik Luhn:Yeah, and see how much gas that would use, and how much profit it would yield.
00:24:26
Jannik Luhn:At least far, it's interesting to see if the… because then we will know if the trust graph is required and helpful or not.
00:24:36
Jannik Luhn:So I'm wondering if people have looked into this already, or if, if not.
00:24:44
Justin Florentine (Besu):I have not, and I have not heard of anybody looking into that.
00:24:53
Jannik Luhn:Okay, because then I think it would… I'm not sure how much time we have for that, like, on our side, how much resources, but at least the first thing, just looking into out blocks and shuffling the transaction and see if the outcome is still similar, I think that's, like, relatively easy to do, so we might try that, and if we do that, we're going to…
00:25:14
Jannik Luhn:reported here, I guess.
00:25:20
Justin Florentine (Besu):Okay. Alright, so this is maybe a call to action for anybody that thinks that they could help with this,
00:25:27
Justin Florentine (Besu):We would be looking for analysts or, maybe map searchers that are willing to help.
00:25:34
Justin Florentine (Besu):To provide some data and run these simulations.
00:25:39
Justin Florentine (Besu):So if everybody could kind of reach out to your personal networks to see if there's anybody that would be interested in helping, please send them ENXY.
00:25:56
Justin Florentine (Besu):Yeah, it sounds like… Bundle detection is kind of what you're looking for, right?
00:26:03
Justin Florentine (Besu):Because the trust graph of the release
00:26:08
Justin Florentine (Besu):keys, or the key providers, rather, in 8105.
00:26:15
Justin Florentine (Besu):May require those bundles to be preserved.
00:26:24
Jannik Luhn:I'm not sure… so the bundle detection, I think, would be interesting, just for,
00:26:31
Jannik Luhn:So if a transaction's in a bundle, then it probably requires a specific order with other transactions, and I think then this is just not viable for,
00:26:42
Jannik Luhn:Yeah, for the public encrypted mempool designs that we've been discussing so far.
00:26:46
Jannik Luhn:Because there you don't have… you don't express an order requirement there.
00:26:54
Jannik Luhn:But yeah, that would be, I guess, an interesting… like, if there are lots of these bundles, then it's potentially problematic.
00:27:06
Justin Florentine (Besu):We should… we should write this problem down and outline it maybe a little bit more clearly, give it a name.
00:27:16
Justin Florentine (Besu):I kind of see what you're saying here, but I don't know that I could verbalize it correctly to somebody that could actually answer it.
00:27:27
Jannik Luhn:Like you mentioned that.
00:27:33
Anders Elowsson:Yeah, I can mention that, we, we discussed with, there was Dot Always from Flashbots, who had a comment on our headliner proposal.
00:27:48
Anders Elowsson:And we discussed the issue of,
00:27:55
Anders Elowsson:Of, of, of, they, they, they have this, this,
00:28:01
Anders Elowsson:This… this functionality where they… they do these, order flow auctions.
00:28:10
Anders Elowsson:he mentioned the requirement of being able to bundle transactions, and in a response there, I talk about the fact that you can do this bundling in a…
00:28:22
Anders Elowsson:in a non-guaranteed way, but you can do it in Lucid, because you set the top of block the same for all your transactions.
00:28:31
Anders Elowsson:Or with an increment of one way, and then you will be pretty much guaranteed that the transactions will be executed in this order that you specify.
00:28:41
Anders Elowsson:But it's also possible to, to enshrine that
00:28:47
Anders Elowsson:An order from the same decor.
00:28:49
Anders Elowsson:Or as key provider in ATA1 certifying.
00:28:53
Anders Elowsson:Would be, would have the same…
00:28:57
Anders Elowsson:Yeah, but to have retained order.
00:29:03
Justin Florentine (Besu):To me, that feels like something that we could add on later. Do you…
00:29:08
Justin Florentine (Besu):Do you concur with that? Do you see that as… Necessary for… a minimal design.
00:29:16
Anders Elowsson:No, I'm just saying that… no, you're saying that right now you even have it. You have it already right now in the minimum viable EUP, but it's not guaranteed. Because if you, by chance, set the same, exact same way, top of book fee as some other, then you don't have it.
00:29:31
Justin Florentine (Besu):You don't have a way to determine that, yeah, yeah. What I'm talking about is making it… deterministic.
00:29:58
Justin Florentine (Besu):Okay, then let's… we'll… we'll research this bundle issue a little bit better for our next meeting.
00:30:06
Justin Florentine (Besu):To discuss. We've got 5 minutes left, I want to be mindful of time.
00:30:10
Justin Florentine (Besu):Anything else folks want to discuss?
00:30:21
Justin Florentine (Besu):Anything folks think they're gonna wanna discuss at our next call?
00:30:27
Justin Florentine (Besu):Possible agenda items.
00:30:48
Justin Florentine (Besu):Then, sounds like we keep grinding on our EIPs.
00:30:53
Justin Florentine (Besu):Stay in touch on Telegram.
00:30:56
Justin Florentine (Besu):And encrypt the mempool.
00:31:01
Jannik Luhn:For topics for next week, or next call in two weeks, I guess, are we going to have a GitHub issue, where we can post them if things come up?
00:31:11
Justin Florentine (Besu):Absolutely, I can open one, I can open one immediately.
00:31:22
Justin Florentine (Besu):Alright, thanks everyone.
00:31:26
Justin Florentine (Besu):See you on the internet.

Chat Logs

00:07:05
Justin Florentine (Besu):https://github.com/ethereum/pm/issues/1929
00:17:18
Justin Florentine (Besu):hi kev, we were just discussing how to charge for gas use that is deferred
00:23:54
Justin Florentine (Besu):bundle detection?

Summary

12 highlights · 3 action itemsExperimental

eip 8105 updates

  • Two-slot execution design: encrypted tx (block N) + decrypted tx (block N+1)00:08:47
  • Execution context references previous block to prevent builder communication00:09:55
  • Envelope signer reference added to prevent envelope stripping attacks00:10:16
  • EIP-8105 PR merged yesterday with all new changes00:12:04

gas metering design

  • Encrypted tx consumes all gas; decrypted tx consumes none00:12:24
  • Gas charged at block N prices for execution in block N+100:13:26
  • Builder knows next block base fee; no dangerous incentives identified00:17:09

lucid design

  • Gas limit set to 1/8 block for sealed transactions (was 1/4 in research)00:18:17
  • Limit ensures two payloads fit if one missing (liveness guarantee)00:21:11
  • Non-guaranteed bundling via same top-of-block fee; deterministic bundling possible later00:28:10

organizational

  • First kickoff call; focus on stabilizing EIP-8105 and Lucid specs00:07:18
  • Lucid EIP expected in a few more days00:22:46

Action Items

  • EIP-8105 team (Jannik): Review gas metering approach and compare with Lucid design00:22:02
  • MEV researchers/analysts (call for volunteers): Analyze real-world block data: shuffle private mempool txs to test ordering dependencies00:23:14
  • Justin: Open GitHub issue for next meeting agenda items00:31:11