AllWalletDevs #40

AllWalletDevs · 15 Jul 2026 · 1:03:27

Call 40 of AllWalletDevs, held on 15 July 2026. Wallet developers meet to coordinate on the Ethereum standards and protocol changes that affect their products. This call covers ERC-8286 on modular accounts for frame transactions and EIP-8130 on account abstraction by account configuration.

Speakers

Topics

From AllWalletDevs, hosted by ECH Institute.

Transcript

Sam: Hello, hello.

Pedro: Hello.

Sam: How's it going? Good.

Pedro: Oh, good.

Sam: Good.

Pedro: Where's the agenda?

Sam: It is on the Ethereum PM. I'll put a link in the chat.

Pedro: Okay, cool. So we got 8, 1 30 and 8, 2, 8, 6.

Sam: Exactly. These calls usually have a fairly slow start, so probably start at 5 after.

Pedro: Of course.

Sam: Just gonna wait another three or four minutes before we get started.

All right, let's get started. So welcome everybody to this month's All Wallet Devs. We have two items on the agenda today. And if anybody else has anything they want to talk about, feel free to just jump in. I guess let's get started with ERC8286, modular accounts for frame transactions. Assuming you're here to talk.

Pedro: Yeah, I mean, I'll kick it off and, Shiran. Shiran will do most of the presentation since he has done the majority of the technical work. But basically, to kind of put into perspective, like 8141 is quite a substantial change in how wallets interact with Ethereum. 4237 has always tried to achieve account abstraction in a way that was completely off-chain, in a way made it optional for you to actually have account abstraction, and even with 7702, Like, being present on-chain with this new transaction type, it still means that you are not, by default. having this native account abstraction. So, it always had these different layers that you had to add, and it didn't really have this

kind of default that you have account abstraction as an EOA. So, with H141, you're basically thinking as every wallet on Ethereum will be account abstracted by default, they just need to start using a new transaction type. But the problem with this is because 8141 is essentially a general pre-computation. Essentially, you can think of… Ethereum provides you with computation on settlements, and with 8.1.4.1, you have, like, this pre-execution computation. So you have these programmable accounts that can do some validation before the transaction actually gets settled on-chain. That meant that we need to have some sort of framework of how we can design this programmability, and how we can build smart accounts for all of these EOAs. And right now, there is a…

a default for how we submit transactions, which they're being called frame transactions for native account abstraction, but there's no default for how you actually build your Smart Accounts. Fortunately, Fortune 3-7 is 3 years old, so there's been a lot of work being done on this. And in my opinion, and I think Shiran would share this as well, the best approach with actually building a smart account in a standardized way has been ERC7579. ERC779 is essentially a very minimal modular account system that allows you to essentially build your smart account programmability. However, 7579 has always been designed around the premise that it is to be designed with Fortune 3.7 account abstraction. So what it would look like if you build a minimal modular account for 8.1.4.1.

And that's essentially what Shiran has created. He created a spec that if you are a 7579 compatible modular account, you can leverage the 8141 frame transactions for you to actually have the same… Modular account, but with a new transaction type. Shiran, do you want to share more on the technicals?

Chiranjeev Mishra: Yes, sure. I'll just keep the spec open as well, just for if everyone wants to see it. So, with frames, we basically abstract away all the complexities of, infrastructure, basically, like, the alternate mempool or the bundler service that we had, a separate one. Now it's all enshrined in the protocol, but 8141 still hasn't specified how would a smart account would look like, like, what would be the interface for smart accounts. Like, in 4337, you had that iAccount set up. But for frames, we don't have it yet. So this ERC basically discussed on how we can use the existing 7579 account standards, which basically has this whole ecosystem of modules and the whole modularity setup. So it's basically an extension to 7579.

On how you can use frame, transaction-based accounts, and still, have the modularity of 7579. So… if the… if we discuss on, like, how it's different from, 7579, it's… practically the same, but the validation and execution rules change a little bit, because the frame transactions act in a different way, with the new opcode called Approve, and the sender frames now being enshrined on the protocol level, rather on the contract level. So, yeah, that's the premise of this whole, standard. So, like, describing on how a frame account would look like. So, basically, this one. Yeah. So, ERC8286 frame account, which basically implements the 7579 account config and the module config. Yeah, so, we introduced something called, supports approval mode. So, in 7579, they just had supports execution mode.

Because the 4337 didn't have a concept of, like, approval lists or something, but Frame Transactions does. So they have a set of approvals, like, they can approve for execution if an account can be approved for payments. So that's why, account need to determine, like, what all approval modes they want to support. So, this is the main addition, I would say. To… on top of 7579. Yeah, and… We have specified the execution rules, the validation rules. Like, like, how would a… frame validator would look like, which is in here. Now, they would have this function called a validate frame, so any 7579 module, if they want to behave like a like, a frame validator. So, we, Alex actually introduced a new module type here, a new module ID called

I mean, it's up to, like, the protocol and what to decide, what the module type would be. But, yeah, so this 8141 frame validator is a module that basically decides the approval mode a transaction is entitled to. So, yeah, any 7, any, module builder can basically implement this iframe validator, which in turn implement the 7579 model standards. And then they can, create their whole, module system with respect to the frame transaction setup. Yeah. Would I go into, like, the exact details of all the points, like, what we try to do, or, like, we can even discuss if you have some questions.

Pedro: Yeah, maybe leave some room for questions. Anyone?

Chiranjeev Mishra: Yeah, please do.

Pedro: try to scrutinize as much as possible. As you know, these standards are draft. We try to already get a lot of feedback across the ecosystem, but that's what these calls are for. We want to Please challenge our assumptions here and. Understand if this is the right approach.

Stavros Vlachakis: Hello guys. I'm from… Nethermind, I'm actually leading the effort of, 8141, together with Daniel, that's why we joined, and we were curious, actually, to hear, what you are thinking and what you are planning around this EIP. So, yeah, if you could elaborate more, it would be definitely beneficial.

Chiranjeev Mishra: Got it. So what we describe here is, is that, are you familiar with the 7579, module standard?

Daniil Ankushin: Nope.

Chiranjeev Mishra: Oh, yeah. like, if… Like, I will try to correlate things, so that would be beneficial, that's why I asked. So anyways, so… In… So, previous to 8141, we had 4337, and Rhinestone by Economy, all wallet teams, like, prominent wallet teams, came up with the standard of 7579, which basically introduced modules in top of smart accounts. So they can have, like, the module lifecycle they want to install, they want to uninstall a certain module. They even left room for, like, new module types. So in their standard, they only had four module types. Now, in this, we are introducing a new module type called frame validator module. So, yeah, so what we are trying to define in this ERC is that

It's basically the… how would a frame account would look like? Like, how would the approvals work? So, let's say in 8141, there is a verify frame. Now, verify frame would have, like, flags, like, what approvals, modes it can support, like, if approval none, approve only payment, approve execution, or approve execution and payment. So, these are all the modes that are defined by the 8141 standard, and it's on the account side. to support what all approved modes they support. So, some accounts might say, we only want to support payments, or some accounts might say, we only want to support executions, and some might even support both. So, it's basically to give a modularity to the To whatever frame, account implementations everyone is building, all the volatiles would build.

So, they would have this, Yeah, here. this function called supports approval, so they would have a mapping of, like, what all approval modes they support. Like, if they only want… if my wallet only want to support execution, or it want to support both payment and execution. Or it just wants to support payments. So, what I mean by payments is that if they only want to sponsor the transaction and not the execution rights. And… And, supports execution means that they only, approve, like, the execution part of it, but not the sponsor part of it. So yeah, so we give, like, this option to smart account implementators to basically choose what they want to support. And, yeah, now on the execution modes, so 7579 also had a execution mode support field, where accounts can describe on what type of calls they want to support.

And then, So, in 4337, because it was a contract level, like, EIP4337, it works on the contract level stuff, like, the… everything is enshrined in the contract, the execution, the validation, but with 8141, it's on the protocol level, so we have a switch here. So… The thing is that, you know. Execution mode can be protocol dispatch or contract dispatch. So, in a sender frame, no account code is taken into consideration. So the check should happen inside the validation phase. So when the very validate frame occurs, so we need to also check if the execution modes, sorry, the frame that are present in the transactions are supported in the execution approval list the account has. So, like, we defined it as these four modes, like a Standalone sender frame can be supported, or one sender frame, like, inside an atomic batch can be supported, or, like, multiple senders.

like, can be supported in a multiple batch, or, like, multiple centers in an atomic batch. So, atomic batch means either all those center frames would execute, or, like… and if one of them fails, nothing would get executed. So, these are the standards that 8141 has, and we are trying to port it into The frame account side of things. So, yeah. So that's how… basically, it's like, account implementation for frame transactions. So we try to rely on existing 7579 module, Standard, so that there is no, you know, vendor lock-in much, and, like, devs can easily build modules across Protocol, so yeah. Any questions.

Stavros Vlachakis: Yeah, I have one. So, actually. You want this to remain as NERC, right? You don't… You're not trying to move this to an EAP or something? And it's just, you know, just wallet, related logic, right?

Chiranjeev Mishra: Yes, yes.

Pedro: It doesn't need to be an AIP because the smart account is still a smart account interface. So this doesn't need… In fact, like when you actually interact with frame transactions, you have some new opcodes and you have some new… Transaction types, but technically it's not changing how smart accounts work. And that's why we need to essentially. evolve or upgrade the existing contracts to accept this. And one of the big assumptions of 7579 is this execution. happening through a 4237 relayer. But if the new transaction type makes the mempool essentially replacing the relayer and there's no entry point, you just need this change in the interface. And we try to make it as backwards compatible as possible with existing 7579.

Stavros Vlachakis: I see. I see. Makes sense. Okay. Yeah. Yeah. Makes sense. On my side, at least, it makes sense.

Chiranjeev Mishra: Got it. I'll stop presenting. Yeah.

Sam: Thank you very much. That was a great presentation.

Chiranjeev Mishra: Thank you.

Sam: I would expect to get a little bit more feedback asynchronously, so if you have anything you'd like to ask in the Discord, please do. And with that, I suppose we can move on to the next item. I lost my tab here. Which is 8131, Account Abstraction by Account Configuration.

Chris Hunter: Thanks, Sam. Yeah, so this is, sorry. Yeah, it's EIP8130. I guess it might be a little, Bit of radio silence for a little bit here, but we have announced, previously, so this is, like, you know, new news, but it does go under the radar sometimes, so, BASE is launching with VIP8130 in the next fork, which is scheduled for September. Tomorrow we are doing a, post. Just to announce that, and, as well as some other announcements for the fork, but I wanted to, basically just get ahead of, the announcement, and also, just as a call to action to try to get, basically, you know, eyes on the spec, and… call people to, make wallet implementations, try out the, you know, payer services and whatnot, and yeah, we would like to get as much feedback as we can.

Which… So, yeah, that's kind of the, you know, the high-level, mini-announcement. I'm happy to go through, kind of the latest updates as well right now But, I'm not sure if everyone's up to date on 8130. I think 8141 gets a lot of the attention in the L1DF space, so… Happy to jump into that whenever, and answer any questions, so, yeah. Alex?

Alex Forshtat: Yeah, hi, can you hear me?

Chris Hunter: Yes.

Alex Forshtat: Yeah, so my question is, do you plan to support both 8141 and 8130, or do you want to go, like, only 8130 or entirely? if you made the decision, like, in case Ethereum adopts 81414, you got it?

Chris Hunter: Yeah, I'm not — I don't think we would ever say absolutely not or anything. We're, you know, we are following the spec closely. Our current stance is, like, we don't plan to,

Alex Forshtat: Thanks.

Chris Hunter: But, of course, if there was… you know, adoption, or, you know, depending where things land, I feel like the spec is a little bit in flux. So we are watching the space closely, but, that's kind of where we are right now.

Alex Forshtat: Okay, thank you.

Chris Hunter: Yeah, so… I'm happy to kind of jump into, where 8130's landed. I feel like, A while back, you know, 8130 and 8141. We're taking some good ideas from each other, which was good, and I can kind of show… we do have… I do have, like, a guide website to go through, but I don't want to take up too much time. It's obviously a big spec, it's like, you know, trying to go through, 8141 or something. In one call. But I think, like. What might be easiest, and I'm happy to go into a super quick overview of things, but just to keep an eye out for the end of this week for our announcements, there's going to be some feedback channels, some places to test everything out and to build on.

That's kind of the call to action, and anytime you want to… speak with me directly, or, you know, give feedback, ask questions, I'm always available as well, so… I'll leave it there, and then, if there's no other questions, I'd have you do, like, a quick, super quick, you know, 10-minute, overview or something, if Or, we can leave it until… You know, post-announcement, I guess.

Sam: I think I'd be interested in a walkthrough.

Chris Hunter: Yeah, sounds good. Okay. Find which tab I'm sharing here. I'm not a Zoom native sometimes, it's usually Google, so I've got to figure out where this is. Share, okay. Okay, so… is this… Oh, this is the… yeah, okay. We're the protocol, so… The overview of, 8130, we are also working on a new name, 8141 has, you know, a good name with frame transactions. Account configuration by, no, account abstraction by account configurations might be one of the worst names ever, so… working on figuring out, what works well there. 8130's better than… than that, but, also doesn't convey what… what it's all about, so…

High level, we have these, I can… yeah, this is kind of the super high level, so we have, broken things into roles, authentication is done by authenticators, these are contracts deployed, On every chain, using a deterministic deployment method, so they have the same address everywhere. We have the account configuration contract, that's a singleton, same address on all chains, create two as well. It's a very simple contract, it just stores, basically, a mapping of account, account, actor ID, and it has an actor config. And basically what the ActorConvict does, It allows accounts. to manage, their ActiveConfig, so they would set an actor ID equal to the actor config, and that specifies the authenticator, the scopes, and the expiration of that authorization.

And then basically, if a chain… so 8130 is also designed to be cross-chain, no EVM changes or upgrades needed. For your account, that doesn't mean the 8130 transaction type will work everywhere, of course, but the account itself will work on all chains for EVM, so you'll never be, you know, stuck with lost funds on a chain, and you can't, you know, recreate your account or something there. You can use your account backwards compatible with other standards, so it's designed to work with ERC437 as well. So, yeah, once you have these, basically in an 8130 transaction, which I can… maybe I'll fetch quickly that, so you can see the shape of it. these are what's kind of interesting here. Senders, just the sending account. We have our 2DNOT system, and which I'll get into in a second. Expires explains itself. Account changes are these…

cross-chain account, changes basically allows you to create an account, do authorization changes, or do… This is also meant to replace 7702, so, the config changes These can all be bundled just in time in a transaction, and basically allows you to go to a new chain. And create your account, sync the account, and also transact in one transaction. So this applies prior to any calls being run. Calls is a 2D call array. There's no value in the… Sorry, in the sub call. And the 2D array is basically atomic batches. And this enables, a bunch of the, basically the payer methods that we'll get into later. And then basically payer just specifies who's paying for the transaction. Sender auth and payer auth are the, basically the signatures for payer or sender. Maybe payer is empty.

Feel free to, like, put a hand up. I can't see. Or you can just interrupt me if there's anything, but the transaction flow is pretty, simple. 8130's, like, primary goal is to Well, you know, one of its primary goals… I would say its primary goal is to enable the powerful features of account abstraction that we've come to expect from 437, but in a cheap and performant way, so we don't want any denial of service risks to the chain. The base is very, concerned with performance, and we, You need to be able to, like, you know, scale up to transactions, you can' compute on transactions that arrive to the builder, in an invalid state. So, we can go into, like, policies and how, that stuff works later on for session keys and whatnot, but basically we're…

we've made a really tight transaction pipeline that has, all the, like, invalidation services known up front. So when the 8130 transaction comes in, the authenticator is specified top level in the transaction, so… There's also this idea of We have here, like, the initial authenticator set. K1 P256 passkey delegate, which I can get into in a sec. Pq, we're not yet decided on what we'll include, but this is kind of the canonical set. These are available to use on the… 8130 transaction type rails. All other authenticators, the account configuration, contract is a contract accessible in the EBM, and you can register any, authenticator you need. So you could register a recovery verifier if you want, or some other thing, but the 8130 transaction rails only allow specific authenticators at this time.

And so when this comes in, we can basically tell, OK, it's using a correct — an accepted validation method. We submit it to the authenticator, the authenticator will return an actor, ID, We do a lookup in the account config to get the After configuration, and then with the after configuration, we have, basically the scopes, its permissions, if it's expired, you know, if it exists, then that basically makes us know that the, transaction's, authenticated, authorized, and, like, ready to land. The other great thing is, if you do this once, you actually know the, complete state surface without simulation or tracing or anything, that invalidates the transaction. So, it's very easy to… You know, you can basically do the crypto, expensive crypto once, and you never have to run it again.

Theoretically. Yeah, so authenticators, these are the, this is the kind of initial set we're thinking of, And we will extend this with a Companion ERC. One of the goals of 8130 as well is to ensure that it's opinionated enough to have, like, standards such that wallets can Be confident to build. They'll know, like, you know, hey, these, these authenticators are accepted everywhere. The mempool rules are easy. You know, the interfaces are all the same everywhere, so it's just… it's simple enough, but it's meant to be opinionated enough that, you know, wallets don't have any problems, you know, concerning themselves with an interface. Next up… so yeah, this is just what an authenticator looks like. Very simple, just pass a hash, the data spits out an actor ID,

The, Yeah, and basically, like, you know, the protocol would be passing the transaction hash and the signature data. It spits out an actor ID, which we then look up and get scopes. Admin scope means, it's just nothing set, but we've broken it out into these scopes here. Sender just means it can send transactions. Or sign 1271. Policy means it's gated. We'll get into how policies work, but they're basically, like, the more intricate transaction validation, but it's post-inclusion, so it is paid for. Which is, one of the large, like, key differences from, A141. Nonce is basically just restricting the nonce keys, so if you… if you don't have this, you're restricted to only use the… nonceless transactions. So 8130 also enables nonceless transactions, which are basically

require no coordination, and there's no state growth. So, 2D trend… the 2D NOTS pool Although, you know, it has its uses, we've seen on base that typically it's… The behavior is, if people want high throughput transactions for an account, they're basically just picking a random nonce, and that makes them write a new slot for each transaction, so it's just really bad for state growth. It's also more expensive for the account. The nonsense transaction approach basically fixes this, and this scope also protects against, basically, you know, a session key griefing a user by writing a transaction for their, like, pen… one of their pending transactions at the same time at… on their NOTs or something. So basically, it pushes them into the, NOT space where they can't collide,

So, next up, yeah, self-pay and sponsor pay, these are pretty, straightforward, I think. It's just, if they can pay gas for themselves or others, admin has all privileges. I feel like there's a lot to go through, but I'll just power through the overview, and then that's probably good for today, but… so yeah, next up, policies… So yeah, policy scope that basically says you can only, send transactions to a single address. That address is considered your, like, policy manager. That policy manager could be your account itself, if you wanted to build that. Our, example… policy is not part… like, the policy manager is not… The only contract that's actually, like, in the protocol is the account configuration contract. These are technically just, like, rules, the canonical authenticators.

Though we, you know, fast path them, because, we're able to do that in 8130 and make it really performant. They're technically not lightning protocol, and policies are the same thing, so you can, you can write any type of policy you want. And basically, the policy scope will restrict your… Call to only that address, and we have this policy commitment system, which basically, like, when you do your signed owner change. But… which is… you can add in here, which is assign owner change, like authorize, revoke. You basically authorize a session key, and you have a commitment, and then the flow is pretty much… let me try to zoom in here, I don't know, this is kind of small.

The flow is, yeah, you would create and sign an after chain, so you're specifying, like, this is an app key, it only has the policy scope. The policy commitment hash is this, and the policy manager is this address. And here's my signature for my admin key. And then… Whenever the, you know, session key wants to be used, it basically would install its, let's say it's a, spend limit for, like, spending 5 USDC a month or something. This install contains, like, the actual, you know, larger, data on what that spend limit is. The policy manager would have to understand what that install means, but the policy manager just looks at the commitment on the on the key we've already added, and then it can see, like, okay, that is assigned, this is the correct policy that I'm supposed to install, and then afterwards, you can just call execute. And then from that, you know, day forward, you only have to call execute, the policy's already been installed.

and that… that makes this kind of, you know, heavy logic of… Is the transaction valid? Like, doing, you know, Can it send its USDC? Moving that validity into execution and charging for it basically allows us to have this really tight transaction pipeline that we're really able to optimize in so many spots on the node. And… Sure. So those policies, yeah, signed after changes are, you know, again, 8130 is meant to be multi-chain, so… When you do a signed actor change, you specify the chain ID. Chain ID 0 means it can be replayed anywhere, and that basically enables you to take your account. Portability was a top concern, so it allows you to basically just, like, deploy and, like, sync your account on other chains whenever you want to use them.

And it's meant to work in 437 as well, like, it's been built to do that. You'd need, you know, a 437 compatible Account code for that, but… Very possible to do, and we have example… examples for that. It's just basically… Supporting the 437, you know, methods on the account, and then… two last things for, like, and then I'll stop talking, but, so EOAs work out of the box, they don't have to take any action, they can just transact immediately. And then also, 437 accounts, like, existing accounts can, upgrade and use 8130 in one transaction. Well, I guess they just have to set up using 437, and then afterwards, they can, continue to start to use 8130. So, I'll leave it at that. Yeah, this week, will be kind of a push for announcements, but just calling for, feedback. There's also this

there'll be, like, this payer service stuff that I want to get a bunch of feedback on for basically how transaction sponsorships done, token payments, etc. Yeah, excited to share this week and looking forward to any feedback we can get. I feel like that was a lot of talking for 20 minutes or something, however long I was going for, but, yeah, happy to answer any questions, if not, yeah, thanks a lot.

Pedro: What about the policies? Like… Like, how extensive can a policy be? Like, policies, like, if you see prior work with smart session standards. Ended up having a lot of unknowns and it became almost, Targets for addresses, specific balances. Specific assets, how granular is the or generic is the policies or is it quite restrictive?

Chris Hunter: So… Our, like… We are including our policy manager contract in the audit, but technically wallets are free to write whatever they want, and they can make it as restricted as they want. Ours is meant to be more of a, the policy manager. So how this is very similar to, I don't have as good of a diagram as this will be, but it's based off of this system. And I think this has a good diagram here. where it is. This is a base account policy, and it's, like, very similar. But basically, there's a policy manager. Which… would be a singleton, not a variable. And basically you're doing these policy installations and these have the actual logic. The policy, okay.

Oh. I can't see that further. The policy manager, is just integrated with the account, and it's very, light amount of logic, like, similar to the account configuration contract.

Pedro: Got it.

Chiranjeev Mishra: I have one question.

Chris Hunter: Yeah, the policies themselves can be as expressive as they need or want to be. I… we're bucketing that under, like, you know, concern of the wallet. Yeah, interested if you think, you know, maybe that we should be more opinionated there, or try to restrict that more, but we're kind of in execution space at this point, and like. Restricting further, is… Not as clean.

Chiranjeev Mishra: I had a question here. How does, policy revocation works? Oh, if…

Chris Hunter: Yeah, so, with, when you register an actor, you can add an expiry on the actor ID itself, so you could pick an auto-expire if you wanted to have a deadline for it. But you can also just revoke the session key anytime you want, so authorize actor and revoke actor are, are, admin actions on the account, so anytime you want to remove the key, you can.

Chiranjeev Mishra: Is it, like, what do you say, like a state call, like, state change, like, transaction needs to happen for revocation?

Chris Hunter: Yes. So, yeah. Unless you used expiry. Yep.

Chiranjeev Mishra: Yeah, so there is this vector that I was thinking, is that, let's say, somehow a malicious policy got installed, and it drains all your ETH. I mean, now there is a deadlock, right? You can't even revoke that policy. Because you won't have ETH.

Chris Hunter: So, yeah, I mean, if it stole all your ETH or something, you'd have to find another way to, like, land a transaction. I don't think there's a, you know, a workaround there. I mean, 8130 provides sponsorship, so you could find… you could… you could… any… any wallet can sponsor any other wallet very easily. You could use another account to do a transaction or something, but yeah, I mean… you need to find a way to land the revoke on the policy. But, you know, if everything's working correctly, a policy should never be granted that much power. Of course, you know. I'm not… you're not saying that, Under the assumption that, yes, it did…

Chiranjeev Mishra: To differentiate.

Chris Hunter: Okay.

Chiranjeev Mishra: Similar vectors existed with 7702, like… I'm not saying it's the same thing, it's just that… the… 7702 also had this problem with delegation, and then you never had ETH in your account. And you can't stop authorizations as well.

Chris Hunter: So, you could easily make your account have the capability to, like, you know, never move ETH from a policy, if you wanted.

Chiranjeev Mishra: Brilliant.

Chris Hunter: Remove that from the policy, like, the ability, yeah.

Chiranjeev Mishra: Thank you.

Sam: Awesome. Thanks so much for the presentation. Really appreciate it. Okay. Unless anybody else has something they want to chat about, that's everything from the agenda. So it sounds like we can wrap up early. So thank you, everybody, for coming out. The recording should be up When it gets put up, talk to y'all next.

Pedro: Thanks, everyone.

Chiranjeev Mishra: Thanks everyone.

Stavros Vlachakis: Thanks, James.

Alex Forshtat: Thank you.

Transcript adapted from ethereum/pm, CC BY-SA 3.0.