From 69ac0980fea976e8f7e4b2f2ea0b0c24e90d63cd Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Sun, 22 Jan 2023 10:48:19 +0530 Subject: [PATCH 1/9] Core comm call 2 --- Core Community Call 2 Notes (2).pdf | Bin 0 -> 92163 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Core Community Call 2 Notes (2).pdf diff --git a/Core Community Call 2 Notes (2).pdf b/Core Community Call 2 Notes (2).pdf new file mode 100644 index 0000000000000000000000000000000000000000..c3cf5b38b530e1ba6b709484e4410e431c73d1dd GIT binary patch literal 92163 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 Date: Sun, 22 Jan 2023 10:50:36 +0530 Subject: [PATCH 2/9] Delete Core Community Call 2 Notes (2).pdf --- Core Community Call 2 Notes (2).pdf | Bin 92163 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Core Community Call 2 Notes (2).pdf diff --git a/Core Community Call 2 Notes (2).pdf b/Core Community Call 2 Notes (2).pdf deleted file mode 100644 index c3cf5b38b530e1ba6b709484e4410e431c73d1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92163 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 Date: Tue, 24 Jan 2023 19:43:14 +0530 Subject: [PATCH 3/9] Create Call 2 --- call-notes/Call 2 | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 call-notes/Call 2 diff --git a/call-notes/Call 2 b/call-notes/Call 2 new file mode 100644 index 0000000..59f985a --- /dev/null +++ b/call-notes/Call 2 @@ -0,0 +1,112 @@ +#Core Community Call 2 Notes + +Meeting Date/Time: Friday, January 20th, 2022 19:00 UTC + +Meeting Duration: 26 mins +[Video of the meeting](https://www.youtube.com/watch?v=SQXHgiUlU6E&t=603s) + +### Decisions + +- Program Runtime V2 won't be ready for implementation for a while +- Transaction instruction limit is 64 in an [[upcoming feature](https://github.com/solana-labs/solana/pull/27938)] + +### Meeting Notes + +### Introduction[ 00:00](https://youtu.be/SQXHgiUlU6E) +-|- +**Jacob Creech:** Welcome all to the second core community call. There are a number of agenda items that we've proposed for this call. Currently, in the list is first going over program runtime V2 with Alexander, Alessandro, and Aditya as well if he is on this call. + +Then there was a request to go over the transaction instruction limitations and figure out what makes sense on both the Firedancer, as well as side to implement. Finally, if we manage to make it and have time, we'll go over with the Mango team application account write fees SIMD. + +Housekeeping Note: This is for future agenda items.we're going to create an issue for people to propose agenda items on, so that it's not just reach out to someone and hope that it happens so i'll put the link to it here. Ultimately for anything that gets proposed, we should have at least some documentation on it, it should be ready to discuss it. It shouldn't just be an idea. +From there. Alexander Alessandro, and Aditya, feel free to get started on program runtime V2. + +### Program runtime V2 [1:46](https://youtu.be/SQXHgiUlU6E?t=106) + +**Alexander Meißner:** Okay, yeah, thanks. +First of all, disclaimer, everything's still a draft. It's not even a proposal yet. You won't find a SIMD for now. So lots of things can change. Timelines are still being worked out, and this is mostly a teaser to get some community feedback. If these are the things, then it’s you the programmers on the same thing very well to you if this is something you want to see, or if there are things where you think like oh no, this is never gonna work for us. + +### Support for the Move programming language [3:05](https://youtu.be/SQXHgiUlU6E?t=185) + +**Alexander Meißner:** The biggest elevation is that, we want to support Move by preparing like this. Some of you might have heard of it .We had support for Move at the very beginning. We sketched it, and we then implemented our current rust ecosystem.So in that sense Move is coming back to Solana .But this time we plan on compiling it, and having it compiled and verified at deployment, which is something new. I think I would change so far as I've been trying to interpret us and further beyond that we want to make it an interoperable Delta frontend. For example, with CN where it brings a lot of services but also some very interesting opportunities. + +### Typed Interfaces[ 4:21](https://youtu.be/SQXHgiUlU6E?t=261) + +**Alexander Meißner:** So yeah, what will change in the program runtime? Programs will become libraries essentially. All the programs will be able to export types as well as countless constants.All the functions will have a static parameter and return level signatures, no generics on these public functions and every public function will then be able to become an entry point. Currently, if you're not using framework like anchor,well, basically everybody is writing something like a dispatcher in the entry point. They deserialize the incoming instruction and then immediately call Catch up in the extra point and then imaging that call to be called into something like a such case or Imaging that call, another function. So that would not be necessary. But just call into the right function directly. and have it be using a type interface .Also accounts with the contacts.Currently you have to use CLI simply, serializing if you need to know what you're doing and what your bytes are, how to interpret them and in this new runtime we would essentially give every account types similar to structure. It is not yet decided how to dynamically size vectors. I kind of work on that, because, obviously, as you know, structure in Rust. See they have static layouts. So there is no concept of these programming languages of dynamically sized in lines of members in stocks. Possibly you might have to statically declare dependencies. By dependencies I mean the other programs you import from and it's you that use functional stuff. + +### Finer Sandboxing :[7:07](https://youtu.be/SQXHgiUlU6E?t=428) + +Alexander Meißner: Okay. The other big change is gonna be Finer Sandboxing. Sandboxing, the idea of separating programs coming from different developers so that they cannot misbehave beyond their own little sandbox. It's completely done by virtual machines and separated with our address spaces, we have one for every single instruction and transaction and that is very inefficient. In the current architecture, we actually copy all the data in between those sections. We have a feature reading this which will understand the memory map, at least in between these VMS of the accounts. But still, the programming model is and continues to be for the old program runtime. i.e, every single instruction gets its own virtual address space. And with this new runtime, we want to change that. We want to make one big, VM and one big address space for the entire transaction and share the course across all the instructions +and instead of the way, find my grants, access control system. which basically does access control allocation of a number of objects. So, you would be able to declare time to make an instance of that time in some data and obviously store it in your own account with retrieve that format, but you could also. That's not the interesting part, but you could also pass it to some other program. And that program could also start in its accounts and retrieve responders and pass it along and so on. And all these programs would be prohibited from modifying the data. So for them, your exported types would be okay. So now you will be wanting to know, what's the sense of exporting types when you can only have opaque types. So the idea here is that if you want to do something with that object from somebody else. you're returned to them, you’d call them and say to them, “Please do this modification” and now as they are the owner of the time. They hopefully then know what should be possible on this type and what should not. So in this sense, what this allows is, you could have assets declared in every single program. So for now currently on chain you have to use a token program to have a token plan. With this model of exporting types which are only modifiable by the program because exporters attack, you could have every program be its own token program in that sense. + +With this comes also a change in how CPI works and Cisco’s work. So currently CPI calling one program and another program is really expensive, just slow and limited. So instead, we want to make that more like a function call. Essentially, we would be passing the instruction parameters, empty accounts, or a small panel that's likely to work in a function code. Cisco would be replaced by CPI to build programs. Some of you might be aware of Cisco as a special mechanism. And that would also be going away and just be treated as another call which happens to be a better program. + +### Limits and Costs [11: 40](https://youtu.be/SQXHgiUlU6E?t=704) + +**Alexander Meißner:** This is actually the least clear from what they expect new limits and costs economy because it obviously depends a lot on the specifics on documentation. But what we want to achieve here is to remove some of the most annoying limits. So one of them, probably most of you have found out, is that you cannot only reallocate accounts by a fixed amount of 10 kB per transaction, and If you want to do more, you have to do a series of instructions and you can come to the only do for CPI nested in your server because that also means that we have for our VMS suspend simultaneously. That's something we need to keep the memory alive for the other VMS. This is why that’s both limited for now. Both of these limits should be gone. + +Additionally, a limit is that we have if it's stack and the stack is quickly consumed by the fact that every function call that's 4 kB of section. And we're switching to dynamics. So that the compiler can actually dictate how much stack memory it’s going to use in response. Then, hopefully, more efficiently we use the same, which should enable more or deeper function call traces. CPI, as I already said, it is gonna be cheaper. So we will also calculate less due for that. It won't be the patent on the account size anymore. I think that's also a limiting factor for most of you and Cisco might be slightly a bit cheaper. Then you are probably gonna introduce the cost for declaring programs in a transaction definitely. Currently, That's free, as far as I know. because we might switch to EBR reloading programs which is an amazing bonus and there will be one based cost working program or invoking a program independent of if this program is doing anything at all. Just returning immediately, if this is also not the case. Currently, there are different costs associated with depending on if this program is a top-level declared in the message of the transaction generated by CPI. + +### Things that Stay[ 14:50](https://youtu.be/SQXHgiUlU6E?t=890) + +Yeah,things which we are not going to change, in other words, which are going to stay. Rust will still be the main programming infrastructure. So it's not that we are moving to move. We're staying with rust. We're just also implementing Move for people who come from other ecosystems and want to program on Solana . This is just part of the motivation.Bigger part is that we want to print these concepts of Move. I think having every function as a possible entry point and having typed accounts. you want to bring them to us. The one pain point you all know about having to be clear and all possibly access accounts and called programs upfront in a transaction is going to remain it. It has to do with how the transaction scheduler and patching works and if you bounce or if the program on, time doesn't allow that upfront. It gets really hard to do this efficiently. This will remain something which probably with some of the solution, like simulation of the transaction, to figure out which programs do. Well, actually want to call, and then submitting that section. Then, the account model is mostly unchanged that will stay more or less the same. Like the accounts. The database is still few values for that part, the rent field being deprecated. But it's already on their way. The type 3 of this gonna be introduced. +Now, the interesting thing for you is probably how are we gonna migrate from the current system to the new system? We plan on doing a long migration period by long, I mean a year, at least, I think, in which you will support both my times and you will be able to call the old runtime from the new one .This gives you the opportunity to to move all your funds into the new programs and in general all these changes are so fundamental that you probably have to rewrite and redefine all the programs completely. So this one big migration movement essentially, and therefore we will only want to do one so that the community doesn't have to multiply waves of redeployments. We want to prevent that and are trying squeeze it all into one pick up there. Essentially.: Yeah. So this is for my presentation. + +Okay? Now yeah. For questions. + + +**Jacob Creech:** Cool. Thank you. Alexander. Yeah. Being cognizant of time, we have about 8 minutes left. So if people have any questions, especially from the firedancer side, since you know this was a request. + + +**Kevin Bowers:** I have a couple of quick reactions, and I also notice the timer, just instead of asking the question, is going to rattle off a bunch of things that I was making notes on as you were going. + +I think, overall, my quick reaction to this, the official reaction. But this is the first time we've seen anything more in detail about it, as there's a lot to like here. There's a lot of doubles in the details, though, that we would have to sort out the most, maybe down in the firedancer code base, the way we structured it is. We actually started from the programming model we put together for pith for running stuff on chain, and then we've extended that to cover X 86, and we're writing over code within that to give us a lot of flexibility for writing both implementations to run stuff on chain, and also do stuff on chain. And, give us some cross-platform capabilities and interoperability with various hardware kinds of acceleration and whatnot we're planning. With all that, like what you're describing nicely maps onto that. So I'm not seeing anything there that structurally impacts at a very low level a lot of our development plans where things look a little bit more on the logistical side, which is what's the kind of timeframe expected for this? How certain is this? I know you mentioned. This is before not even a proposal, just a thing kind of throwing out there and then, when we're looking at it, we're essentially like. My thing is, should we be targeting to just implement this, or we should have them on both, or should target the old thing, and then wait to see if this happens. And then, you know you already dressed this a little bit. What's the kind of thinking around interoperability costs, and you know some of the details of going there? +I think there's a secondary thing that would be in there. That is also we've done a lot of work on cost estimation. We're spinning up a lot of our internal pot resources to do even more elaborate work on there. If this is going to change the cost models that changes some of the quantitative research. We'd like them to be doing on existing transactions, and so more details on that would also be of interest to us. + I'll shut up now and let up people talk or try to get in the remaining 5 min. What's done? + Sorry for talking really fast there, but I was trying to cram a lot in the interest of time. + + +**Alexander Meißner:** Yeah, just too quickly to answer that. So as I said, timeframes are not clear at all. Well, the most optimistical one, is.to have at the end of the midterm something on testing it, but like really really minimum MVP with most of the features missing just to have some rough idea what this is gonna feel like.No documentation, no support whatsoever. Just for the raw code base, the skeleton of the code base essentially And for how committed are we on this? This is actually the spot out of another project. This is going on for 2 years now to reform the existing program runtime. and I think we have reached the limits on what's possible with our present day. Right? So this is all the things we have conducted in the last 2 years along with our ground architecture and how we want to reform it. +So,I think that there's definitely something coming in this sense, if it will be accepted. This thing which I just presented to you that is still up to the date and the other thing about firedancer, yes I’ll most likely expect you. We'll still have to implement our program runtime time because of this long migration period. So we're speaking here. I thought maybe something would be ready on mainnet in a year, and then another year of migration period. So if you only start implementing your program runtime in 2 years, and you might get away with not implementing. But if we want to be faster, then yeah. We would have to have that both. + +**Kevin Bowers:** Thank you. + +**Jacob Creech:** Okay. With 4 min left. As anybody wants to get into any other questions. + +**Philip Taffet: I** raise my instruction limit, request. ‘ + +**Jacob Creech:** Go ahead. + +**Philip Taffet**: So some of us talked about this in the discord. But we're interested in limiting the number of instructions in a transaction because, especially as a transaction size grows or as the maximum like MTU grows. Then you have this problem where someone could put like a 1000 instructions in one transaction, and they're useless instructions. But we don't want to support that because we don't think there's a compelling use case for it. + +**Alexander Meißner:** Yes, yes, this is already independently of this project, we have a feature for that thing already on the schedule. This will be limited to something like 50 or 60. + + **Philip Taffet:** Oh, even better. + +**Alexander Meißner:** Yeah. So we measured what the longest currently used transactions are on the system and it was something around 40. So we thought, yeah something slightly buffed up. + + +**Philip Taffet:** Okay, thanks. + +So this is a feature flag that has not been activated yet? + +**Alexander Meißner:** Yeah, that's already on the schedule. + +**Philip Taffet:** Oh, okay. + +**Alexander Meißner:** If you ping me on discord and in the virtual machine. So then I can send you the ticket application. + +**Philip Taffet:** Sorry, Which channel? + +**Alexander Meißner:** Virtual Machine + +**Philip Taffet:** Virtual machine? Got it! Thank you! + + +**Jacob Creech:** Okay. Is there any other questions on the runtime V 2 and apologies. Mango team. I don't think we're going to be able to get tier your SIMD. Okay, cool. + +So thank you all for coming to talk about this for the future agenda items. +What we're gonna do is we're gonna have it all on Github and I'm just gonna create a new issue for the next call, and if you want to propose a new item for the agenda, you can just leave it there. And then hopefully, we can get more information there as well as like documentation ahead of time, so that we can have a more productive conversation when we get to this call. + +I think we might have to make this call longer in the future depending on what the agenda items are or do it more often. I'll reach out to you all to decide on how we do that. +But yeah, thank you everyone for coming today. Bye! From 24d3685de39fb46da8f03ede05e3d7cd78322606 Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 19:44:59 +0530 Subject: [PATCH 4/9] Rename Call 2 to Call 2.md --- call-notes/{Call 2 => Call 2.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename call-notes/{Call 2 => Call 2.md} (100%) diff --git a/call-notes/Call 2 b/call-notes/Call 2.md similarity index 100% rename from call-notes/Call 2 rename to call-notes/Call 2.md From 71f84e8f732b24e41fda83687b30d7cd703473e0 Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 19:45:53 +0530 Subject: [PATCH 5/9] Update Call 2.md --- call-notes/Call 2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/call-notes/Call 2.md b/call-notes/Call 2.md index 59f985a..3e75548 100644 --- a/call-notes/Call 2.md +++ b/call-notes/Call 2.md @@ -1,4 +1,4 @@ -#Core Community Call 2 Notes +# Core Community Call 2 Notes Meeting Date/Time: Friday, January 20th, 2022 19:00 UTC From 32f1504e62aadb91cf4afd5c376588a5858952a6 Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 19:49:01 +0530 Subject: [PATCH 6/9] Update Call 2.md --- call-notes/Call 2.md | 232 +++++++++++++++++++++++++++++++------------ 1 file changed, 171 insertions(+), 61 deletions(-) diff --git a/call-notes/Call 2.md b/call-notes/Call 2.md index 3e75548..4b19667 100644 --- a/call-notes/Call 2.md +++ b/call-notes/Call 2.md @@ -1,112 +1,222 @@ -# Core Community Call 2 Notes +# Core Community Call 1 Notes -Meeting Date/Time: Friday, January 20th, 2022 19:00 UTC +Meeting Date/Time: Friday, December 16th, 2022 19:00 UTC -Meeting Duration: 26 mins -[Video of the meeting](https://www.youtube.com/watch?v=SQXHgiUlU6E&t=603s) +Meeting Duration: 30 mins -### Decisions +[Video of the meeting](https://www.youtube.com/watch?v=XZhy9VFGKZc) -- Program Runtime V2 won't be ready for implementation for a while -- Transaction instruction limit is 64 in an [[upcoming feature](https://github.com/solana-labs/solana/pull/27938)] +## Decisions -### Meeting Notes +- Access control on SIMDs should be clearly defined +- Every feature should have an associated SIMD -### Introduction[ 00:00](https://youtu.be/SQXHgiUlU6E) +## Action Required + +- Outline process for critical issues when there's multiple validator clients + +## Meeting Notes + +### Introduction +Video | [00:00](https://www.youtube.com/watch?v=XZhy9VFGKZc) +-|- + +**Jacob Creech**: This is what we're considering as the first Core Community call or the first Solana Core Developer Sync. What we're hoping that this turns into is a way for developers on the Solana protocol to sync on changes that are being made, feature developments that they're thinking of, and proposing changes on Solana so that we can more collaborate together as a whole. + +Ultimately it's up to you all as the engineers to make up as you best wish of what this call looks like. In future calls we'll call for an agenda if people want to put forth what they want to talk about on the agenda side. The first item that we want to discuss is like what do you all think that this call should look like and then later we'll also talk about SIMD and what that process looks like so that we can make proposals and actually use it to make changes, and keep aligned on changes on Solana. +Go ahead, Richie + + +**Richie Patel**: All right! I think generally this would be most useful to have an online forum where client teams can discuss changes that affect everyone, mainly protocol breaking changes that Solana labs, Jito and Firedancer, and so on would have to implement. I think we should probably start with a process where we first specify something in the SIMD and then go forward. Other things will probably be things that actively concern mainnet and require call intervention to be fixed, I guess that that would be the Quality of Service related incidents and so on. Was there a written agenda or a proposal for the agenda for this call? I think I saw something, I don't fully remember. + + +**Jacob Creech**: For this specific call it's to talk about what we both most want out of this as well as talk about the SIMDs, and then anything else that you all want to bring up. + +### Read and Write Access for the Solana Protocol +Video | [02:40](https://youtu.be/XZhy9VFGKZc?t=160) +-|- + +**Dan Albert**: Just kind of reflecting on something I've been sharing with the team internally. There's been a lot of calls for action from inside of the community of what I see is more people wanting, I'll say read access and then write access for the Solana protocol. Read access being there's a lot of teams core devs and non-core devs that want better visibility into what's coming down the line, how is this going to impact me, particularly like RPC operators, or Dapp +developers that are going to be impacted by any breaking changes. + +That I think maybe doesn't need to be in scope for this call, you know either today's or in +general, but I mean it's something that as the core developer Community, I think we can do a better job of communicating. Obviously engineering roadmaps for +technology like this are incredibly difficult to nail down and I think people understand +that, but figuring out a way as a community or like as an organization, labs or foundation to put out more visibility to the broader community. Then as far as write access: who can make contributions, or rather how does one +go about making contributions by engaging here, by making an informal proposal on Discord or on some other forum, followed by getting feedback here or in SIMD comment threads, and then kind of trying to figure out what does that sort of approval process look like, and should anyone really be owning an approval process when anyone can build from source, and run a client with whatever changes they desire. + +So just trying to feel out what people think is best there and then as we go on like to be able to kind of dig into the actual details of like: Okay, what do people actually feel about this particular proposal or that code change, etc. + + +**Jacob Creech**: Cool, and then to kind of like further jump-start the conversation, I'll drop in the chat the SIMDs that we currently have or that we're working on. We recently kind of launched this process of how we can propose protocol changes to Solana that would be breaking changes something that's a big change economic wise, and what we can do is everybody here can create a proposal that will change how Solana works and then we can use this to discuss what is different, how different changes work, how it affects all of us, especially between Firedancer, Jito and working with the Mango folks. How we can create or keep in line of the big changes coming on Solana in the future, especially when +there are feature activations. How do we do that across teams etc. + +### Challenges in making public repositories and their possible solutions +Video | [06:08](https://youtu.be/XZhy9VFGKZc?t=368) +-|- + +**Kevin Bowers**: So, I'm just going to say a bunch of things that are kind of in the space and +some of those are things that we also discussed with Dan a little bit earlier, and I think a lot of this is just related to work going on internally and how we've thought about a lot of these +problems. None of this is anything that I have really prepared remarks on or anything but one of the things that already exists in this. We talk about specs is part of our job is to essentially come up with specs for what the existing protocol is from the current code and there have been some repos set up in places like the Solana Foundation. I know there's a lot of kind of comments on that and that's also somewhat a prerequisite for work we're doing +internally where we've engaged with various experts in formal verification and whatnot, and it's very difficult to formally verify if we don't actually have a spec for doing that. + +So, at least from the kind of specs repo read-write access and whatnot, I’d kind of direct things in that direction unless there's a broad consensus in the community we don't want to have those. I don't really see that as not being an option for the long term if we want to have multiple validators or whatnot and, you know, kind of put people in that direction. I think when it comes down to those that’s not the only repo, like there are the internal repos that we're developing, there's obviously the Solana Labs repos, other people's repos that are kind of sitting around here. We spent a lot of time in the initial discussion when we were asked to look in this area as to what was the right model for doing the engagement and we were deathly afraid that we had two different organizations, different cultures, different development styles, different languages and all that, that if we were to try to do stuff in the same repo it'd be disastrous. It wasn't just that kind of abstract concern internally, Jump has a lot of internal communities with the various trading groups and so on and so forth, and you know doing everything in a common repo just tends not to work. So we've done a lot of stuff internally just for you know non-crypto-related things where we essentially develop stuff at boundaries between repos and come up with interfaces, be they shared memory interfaces or whatnot, and a lot of the stuff that we've been planning on here is to essentially iterate independently in our own repo. Let Solana iterate in their repo. Use the specs that we're doing to essentially define boundaries both from the protocol works but also ways that we can divide stuff up and componentize the existing validator and then swap out various parts as we go and do that. A lot of that is being done at process boundaries, so we don't have to have a whole lot of friction or tight integration between organizations and you know those kinds of logistical problems that can do. + +With respect to protocol-breaking changes as we've been going through a lot of stuff and checking more stuff in, we had a lot of ideas and we've spent a lot of time thinking about how we might, you know, bring them to the community. I think one of the things that already exists that we were planning on is we do have some scope in our development plan for essentially doing proof of concept designs and like some of the stuff that we were thinking about doing is just like, you know, we'll set up a proof of concept over here to essentially come up with reference implementation and then bring that to a community as opposed to just having an open-ended abstract discussion to the effect like we don't like this, maybe we could do it this way then have everyone just be kind of like well it's not obvious that'll be better or not, and so at least as far as protocol breaking changes are, at least intent is, we would make recommendations but only make those recommendations after we had some working code to show how those things work. + +Sorry for a bunch of rants, I don't know if that necessarily addresses the points that you mentioned but you know I think it's things of making notes on as people were talking + +### SIMD merge criteria +Video | [10:00](https://youtu.be/XZhy9VFGKZc?t=600) +-|- + +**Richie Patel**: I think we can take a lot of inspiration from the Ethereum process because that has proven to work quite well at scale and the way they do it is fairly similar. So for any non-trivial change to these specifications and whatnot, usually when you check in an EIP, or +in our case in SIMD, you also have a proof of concept in your own repo and then at least start to +think ahead about how another team might Implement that. + + +**Dan Albert**: Yeah, I think in my mind I see the bar for actually getting a SIMD merged should be quite high. I see that as the tail end of the sloppier, less formal sort of debate process people testing things trying to figure out what makes the most sense, do the prototyping, and get some sort of initial social consensus from the validators, the developer community that not only do we +think it's a good idea but someone on the team is willing to go ahead and implement it, right. If Solana Labs thinks some SIMD is great but the Firedancer team thinks some SIMD isn't, the same SIMD is a terrible idea, and each client, in the future has 50% of the stake on the network, well both teams need to implement it in order for it to actually right come to fruition. I agree with your proposal Richie on having the proven concept and I would just want to call out as we're kind of discovering it not to like jump to a SIMD for any random new idea, right. I think this kind of stuff in Discord, GitHub issues like is more appropriate, where people are trying to suss out the interest and feasibility of a new process. + + +**Richie Patel**: As much as I don't belittle the point, the Ethereum community does check in a lot of EIPs never actually deployed on mainnet, it's nice to have some sort of proposed standard when you get to implementing the idea but often, you have something sitting around for three years and then you might implement it at some point in the future. There's lots of different +branches of these implementations but I think if we restrict ourselves to saying anything that's an accepted SIMD will eventually be implemented and activated then, a lot of this political discussion I think will actually prevent the engineering efforts of standing up a proof of concept, so it's, I would maybe have less restrictions and then say well this is not even an accepted standard but at least it's checked in and it's there someone wants to implement it. + + +**Dan Albert**: Okay. Yeah, I guess I'm not crazy about the idea of having a SIMD repo become like a Boneyard of unimplemented proposals, right? So there needs to be some kind of filtering mechanism but I agree like we can have a spec or a proposal that everyone agrees is a good idea and is going to take 12 months of work or there's just more urgent issues to be addressed sooner. + + +**Anatoly Yakovenko**: The problem with those long ideas is that they usually die or by the time you get around to building them, something has changed to where they're no longer valid. So like I think that I would prefer that the specs that do get checked in have like a path to implementation within six months. + + +**Jacob Creech**: To take from Ethereum as well I believe what they have is if there's a certain point where it just can't be implemented due to a number of changes that happened previously, for example, if it took six months to implement and the things changed is no longer a viable option, they do change in the status to stagnant and they throw it out at that point. + + +**Kevin Galler**: Probably like marking statuses, is there like a mechanism for this? + + +**Jacob Creech**: Yeah. There's kind of like a process as outlined in like the first SIMD of what you do is you draft it and then you work with people trying to get consensus on should we move forward with this or should we not. Then once you get that consensus you can move into accepted. To get to implementation phase requires process around feature activation or who's owning the different feature activation in each client. It's who's building the feature, what's the status of it, and how do we get it to actual activation across the network. + +### Write Access to SIMDs and Specifications +Video | [15:11](https://youtu.be/XZhy9VFGKZc?t=911) +-|- + +**Richie Patel**: I guess this begs the question of who actually gets to decide to press the merge button and define what consensus is. I think for now it's perfectly valid if Solana labs and +Solana Foundation has this authority since, with the exception of Jito, we're just starting out hitting mainnet. In the long term, it would be nice to maybe define a set of people. I know this always tends to exclude people but I would maybe define consensus like that there is no big agreement, there's like general you know acceptance of a change even if it's not a direct confirmation from each team. + + +**Jacob Creech**: Yeah, as part of the first SIMD it's there's no obvious outspoken disagreement and that if there is agreement from the majority of core contributors, you can move forward by who has access to do write, triage, or to maintain the repo of SIMDs. I wrote up an access policy that is very similar to how Mozilla does it and how they give access to write or to triage different issues, so that is under review. We can create that list of possible merge-access people. It's really it's both a social consensus as well as like a technical consensus. If someone abuses that power it can easily be taken away as well. + + +**Dan Albert**: I think there's maybe also been some questions, and tell me if you think this often the weeds are out of scope here, but I think it's good for us to kind of feel out what these kind of processes feel right here. I think there's also a lot of less process heavy and more just sort of navigating the space questions some folks have come up with just like, Hey I wanna like I have this PR open against say the Solana Labs repo right because I'd like to fix a bug or I want to make a change whether it's a small thing or a bigger thing but they're a community member or maybe it's someone +from Jito wants to push something back to Labs. + +Maybe it doesn't require a SIMD because it's not a protocol thing. I'm curious maybe Anatoly or someone from the Labs team who's on the call, do you guys have a sense, either written or informal, I know they're like the quality has been very mixed right over time because anyone can open a PR against the repo like, how does the Labs team view, you know, receiving and merging changes? + + +**Anatoly Yakovenko**: I think if it has like a feature activation it should probably have an associated proposal because the feature activation required implies that there is something breaking in the client that it's not like a change you can easily roll in and it should probably be, or it definitely needs to be communicated to all the other, to the Firedancer client and we should use like the proposal process for that. + + +**Dan Albert**: Meaning anything that requires feature activation should have a corresponding SIMD? + + +**Anatoly Yakovenko**: Yep + + +**Dan Albert**: Okay. Yeah, I think that's good. + +### What to do about implementation details that are not protocol defining +Video | [18:52](https://youtu.be/XZhy9VFGKZc?t=1132) -|- -**Jacob Creech:** Welcome all to the second core community call. There are a number of agenda items that we've proposed for this call. Currently, in the list is first going over program runtime V2 with Alexander, Alessandro, and Aditya as well if he is on this call. -Then there was a request to go over the transaction instruction limitations and figure out what makes sense on both the Firedancer, as well as side to implement. Finally, if we manage to make it and have time, we'll go over with the Mango team application account write fees SIMD. +**Buffalu**: What do you think about like the changes that we've made to the validator where they're not necessarily related to consensus but they are like pretty significant changes? + -Housekeeping Note: This is for future agenda items.we're going to create an issue for people to propose agenda items on, so that it's not just reach out to someone and hope that it happens so i'll put the link to it here. Ultimately for anything that gets proposed, we should have at least some documentation on it, it should be ready to discuss it. It shouldn't just be an idea. -From there. Alexander Alessandro, and Aditya, feel free to get started on program runtime V2. +**Anatoly Yakovenko**: I would love to have a proposal for these are the API hooks that you guys need that for all conforming clients to implement and then the Firedancer team and us, we can just conform to that standard like these are the hooks that Jito needs and this is how we load like, I really want to load a dynamic shared object instead of like downloading a separate Jito client. -### Program runtime V2 [1:46](https://youtu.be/SQXHgiUlU6E?t=106) -**Alexander Meißner:** Okay, yeah, thanks. -First of all, disclaimer, everything's still a draft. It's not even a proposal yet. You won't find a SIMD for now. So lots of things can change. Timelines are still being worked out, and this is mostly a teaser to get some community feedback. If these are the things, then it’s you the programmers on the same thing very well to you if this is something you want to see, or if there are things where you think like oh no, this is never gonna work for us. +**Buffalu**: Yeah, same. Okay, cool. -### Support for the Move programming language [3:05](https://youtu.be/SQXHgiUlU6E?t=185) - -**Alexander Meißner:** The biggest elevation is that, we want to support Move by preparing like this. Some of you might have heard of it .We had support for Move at the very beginning. We sketched it, and we then implemented our current rust ecosystem.So in that sense Move is coming back to Solana .But this time we plan on compiling it, and having it compiled and verified at deployment, which is something new. I think I would change so far as I've been trying to interpret us and further beyond that we want to make it an interoperable Delta frontend. For example, with CN where it brings a lot of services but also some very interesting opportunities. -### Typed Interfaces[ 4:21](https://youtu.be/SQXHgiUlU6E?t=261) +**Dan Albert**: I think Richie and Kevin on Firedancer had a kind of similar plans, is that right? To basically kind of design or spec out these interfaces that aren't necessarily protocol defining but it's just more of like an implementation detail. -**Alexander Meißner:** So yeah, what will change in the program runtime? Programs will become libraries essentially. All the programs will be able to export types as well as countless constants.All the functions will have a static parameter and return level signatures, no generics on these public functions and every public function will then be able to become an entry point. Currently, if you're not using framework like anchor,well, basically everybody is writing something like a dispatcher in the entry point. They deserialize the incoming instruction and then immediately call Catch up in the extra point and then imaging that call to be called into something like a such case or Imaging that call, another function. So that would not be necessary. But just call into the right function directly. and have it be using a type interface .Also accounts with the contacts.Currently you have to use CLI simply, serializing if you need to know what you're doing and what your bytes are, how to interpret them and in this new runtime we would essentially give every account types similar to structure. It is not yet decided how to dynamically size vectors. I kind of work on that, because, obviously, as you know, structure in Rust. See they have static layouts. So there is no concept of these programming languages of dynamically sized in lines of members in stocks. Possibly you might have to statically declare dependencies. By dependencies I mean the other programs you import from and it's you that use functional stuff. -### Finer Sandboxing :[7:07](https://youtu.be/SQXHgiUlU6E?t=428) +**Kevin Bowers**: Those are definitely fresh on our mind as we're getting very very close to getting the last bits of plumbing put together on our end and I think the big things you know far. I'm going to answer this may be more mechanically because there are different ways you could approach this from a process standpoint or what it means to a repo standpoint but our intent is to take the existing validator at Solana and do all the plumbing that's needed on that side to interface with our component one and we already have basically those points where we want to go and how to do those boundaries and whatnot, and then just like proof of concept like work it out and say okay we worked it out, and then essentially kick that to you guys to then say what is the proper way to do that, and I think part of the call here is getting some idea what those processes are. Now, since that wouldn't be something that'd be a protocol-breaking change or whatnot doesn't sound like to have a SIMD involved but we'd say here are some changes we'd like these to go in, we'd like to be respected kind of going forward that defines those internal API hooks, those API hooks then you know any other organization Jito or whatnot could go ahead and then be using those for doing their development against too and they could interface at those points. -Alexander Meißner: Okay. The other big change is gonna be Finer Sandboxing. Sandboxing, the idea of separating programs coming from different developers so that they cannot misbehave beyond their own little sandbox. It's completely done by virtual machines and separated with our address spaces, we have one for every single instruction and transaction and that is very inefficient. In the current architecture, we actually copy all the data in between those sections. We have a feature reading this which will understand the memory map, at least in between these VMS of the accounts. But still, the programming model is and continues to be for the old program runtime. i.e, every single instruction gets its own virtual address space. And with this new runtime, we want to change that. We want to make one big, VM and one big address space for the entire transaction and share the course across all the instructions -and instead of the way, find my grants, access control system. which basically does access control allocation of a number of objects. So, you would be able to declare time to make an instance of that time in some data and obviously store it in your own account with retrieve that format, but you could also. That's not the interesting part, but you could also pass it to some other program. And that program could also start in its accounts and retrieve responders and pass it along and so on. And all these programs would be prohibited from modifying the data. So for them, your exported types would be okay. So now you will be wanting to know, what's the sense of exporting types when you can only have opaque types. So the idea here is that if you want to do something with that object from somebody else. you're returned to them, you’d call them and say to them, “Please do this modification” and now as they are the owner of the time. They hopefully then know what should be possible on this type and what should not. So in this sense, what this allows is, you could have assets declared in every single program. So for now currently on chain you have to use a token program to have a token plan. With this model of exporting types which are only modifiable by the program because exporters attack, you could have every program be its own token program in that sense. +We also are trying to minimize the complexity and the surface area of those interfaces so we aren't too particular about it so if we get it wrong or you know somebody wants some other kind of change on that it's not that big a change. We're not trying to find the max cut and create the most complex interfaces across or trying to find very very minimal points to simplify this kind of organizational interfacing that we're talking about here. + +### Validator Specification and Internal API +Video | [21:30](https://youtu.be/XZhy9VFGKZc?t=1290) +-|- -With this comes also a change in how CPI works and Cisco’s work. So currently CPI calling one program and another program is really expensive, just slow and limited. So instead, we want to make that more like a function call. Essentially, we would be passing the instruction parameters, empty accounts, or a small panel that's likely to work in a function code. Cisco would be replaced by CPI to build programs. Some of you might be aware of Cisco as a special mechanism. And that would also be going away and just be treated as another call which happens to be a better program. +**Richie Patel**: I remember as part of the three repos we created for these inter clients, local APIs there were first of all these specs, the SIMD, but there's also a validated APIs repo that Solana Foundation created, and originally that was the plan to have all the C structure definitions and so on posted there but I think this can quickly get quite complicated if that needs to be compatible with like three different CI processes and build systems and so on. So I'm not too sure what the best platform would be, maybe we just copy headers between clients and socially ensure that they don't get out of sync instead of using any complicated tools. -### Limits and Costs [11: 40](https://youtu.be/SQXHgiUlU6E?t=704) -**Alexander Meißner:** This is actually the least clear from what they expect new limits and costs economy because it obviously depends a lot on the specifics on documentation. But what we want to achieve here is to remove some of the most annoying limits. So one of them, probably most of you have found out, is that you cannot only reallocate accounts by a fixed amount of 10 kB per transaction, and If you want to do more, you have to do a series of instructions and you can come to the only do for CPI nested in your server because that also means that we have for our VMS suspend simultaneously. That's something we need to keep the memory alive for the other VMS. This is why that’s both limited for now. Both of these limits should be gone. +**Dan Albert**: Yeah, I'm happy to remove that validator internal API repo. It hasn't seen any activity since we kind of kicked that idea around a while ago, because it's really not, like you said, it's not a protocol definition thing, it's more of an implementation for convenience between multiple teams. -Additionally, a limit is that we have if it's stack and the stack is quickly consumed by the fact that every function call that's 4 kB of section. And we're switching to dynamics. So that the compiler can actually dictate how much stack memory it’s going to use in response. Then, hopefully, more efficiently we use the same, which should enable more or deeper function call traces. CPI, as I already said, it is gonna be cheaper. So we will also calculate less due for that. It won't be the patent on the account size anymore. I think that's also a limiting factor for most of you and Cisco might be slightly a bit cheaper. Then you are probably gonna introduce the cost for declaring programs in a transaction definitely. Currently, That's free, as far as I know. because we might switch to EBR reloading programs which is an amazing bonus and there will be one based cost working program or invoking a program independent of if this program is doing anything at all. Just returning immediately, if this is also not the case. Currently, there are different costs associated with depending on if this program is a top-level declared in the message of the transaction generated by CPI. +**Jacob Creech**: And then a question for the specs: whenever we have a SIMD proposed and it's accepted, do you all want to wait until after like it's actually implemented across the different clients or do you, like when do the specs change in accordance to like upgrades the network? -### Things that Stay[ 14:50](https://youtu.be/SQXHgiUlU6E?t=890) -Yeah,things which we are not going to change, in other words, which are going to stay. Rust will still be the main programming infrastructure. So it's not that we are moving to move. We're staying with rust. We're just also implementing Move for people who come from other ecosystems and want to program on Solana . This is just part of the motivation.Bigger part is that we want to print these concepts of Move. I think having every function as a possible entry point and having typed accounts. you want to bring them to us. The one pain point you all know about having to be clear and all possibly access accounts and called programs upfront in a transaction is going to remain it. It has to do with how the transaction scheduler and patching works and if you bounce or if the program on, time doesn't allow that upfront. It gets really hard to do this efficiently. This will remain something which probably with some of the solution, like simulation of the transaction, to figure out which programs do. Well, actually want to call, and then submitting that section. Then, the account model is mostly unchanged that will stay more or less the same. Like the accounts. The database is still few values for that part, the rent field being deprecated. But it's already on their way. The type 3 of this gonna be introduced. -Now, the interesting thing for you is probably how are we gonna migrate from the current system to the new system? We plan on doing a long migration period by long, I mean a year, at least, I think, in which you will support both my times and you will be able to call the old runtime from the new one .This gives you the opportunity to to move all your funds into the new programs and in general all these changes are so fundamental that you probably have to rewrite and redefine all the programs completely. So this one big migration movement essentially, and therefore we will only want to do one so that the community doesn't have to multiply waves of redeployments. We want to prevent that and are trying squeeze it all into one pick up there. Essentially.: Yeah. So this is for my presentation. +**Richie Patel**: I mean as far as I can tell, SIMDs are proposed changes and specs are authoritative sources of what the protocol actually is and merging that before and anything is activated on mainnet is I guess technically wrong, but I don't know if we want to split hairs here. It's hard to tell but I would like when it's clear that a feature is about to be activated I think that's a good point when we want to merge things into the specs repo. -Okay? Now yeah. For questions. +**Jacob Creech**: Okay, so we're coming up a little bit on time for this call anyways. So I guess for future calls what we'll do is we will kind of like put out calls for agenda items, future could be including like a SIMD that someone proposed or like Hey, we're kind of talking about changing +this in the validator client this restructure what do you all think about? -**Jacob Creech:** Cool. Thank you. Alexander. Yeah. Being cognizant of time, we have about 8 minutes left. So if people have any questions, especially from the firedancer side, since you know this was a request. +So we'll do that for the new year, but is there anything else that people want to bring up before the end here? -**Kevin Bowers:** I have a couple of quick reactions, and I also notice the timer, just instead of asking the question, is going to rattle off a bunch of things that I was making notes on as you were going. +**Zano**: Yeah, another thing that would be good on these calls, let me know if you guys agree, is like having a spotlight for like large changes that have been merged in and kind of so yeah spotlighting that may be just like giving a brief overview of what happened there. + + +**Jacob Creech**: Yeah, that's a really good one. + + +**Dan Albert**: Yeah, I wonder, I'm just thinking because like that's a topic that I think a large audience would be, a larger audience than the speakers on this call might be interested in, +right? So, this is sort of what I was going back to earlier right there are more people than the core devs that are interested in you know I'll say read access to how new changes are coming in. This would certainly be a good forum to spotlight I'll say like a debate or discussion on said content, but I'm wondering if like the initial presentation could be the separate thing that's put out to the public and then we say, Hey I'm you know this quarterly call we're gonna you know to pick it apart or provide feedback or whatever. + +I'm just thinking based on the number of people here and the number of opinions that I'm sure could be voiced, we will want to make space for the debate right, because a presentation could just be like, Hey I like recorded this 30-minute thing, deliver it to the public, and then we have a review period after. + +### Process for security patches +Video | [23:49](https://youtu.be/XZhy9VFGKZc?t=1429) +-|- + +**Alexander Meißner**: I have a point properly for the next call and it's to design a process for security patches, which I think is quite tricky. -I think, overall, my quick reaction to this, the official reaction. But this is the first time we've seen anything more in detail about it, as there's a lot to like here. There's a lot of doubles in the details, though, that we would have to sort out the most, maybe down in the firedancer code base, the way we structured it is. We actually started from the programming model we put together for pith for running stuff on chain, and then we've extended that to cover X 86, and we're writing over code within that to give us a lot of flexibility for writing both implementations to run stuff on chain, and also do stuff on chain. And, give us some cross-platform capabilities and interoperability with various hardware kinds of acceleration and whatnot we're planning. With all that, like what you're describing nicely maps onto that. So I'm not seeing anything there that structurally impacts at a very low level a lot of our development plans where things look a little bit more on the logistical side, which is what's the kind of timeframe expected for this? How certain is this? I know you mentioned. This is before not even a proposal, just a thing kind of throwing out there and then, when we're looking at it, we're essentially like. My thing is, should we be targeting to just implement this, or we should have them on both, or should target the old thing, and then wait to see if this happens. And then, you know you already dressed this a little bit. What's the kind of thinking around interoperability costs, and you know some of the details of going there? -I think there's a secondary thing that would be in there. That is also we've done a lot of work on cost estimation. We're spinning up a lot of our internal pot resources to do even more elaborate work on there. If this is going to change the cost models that changes some of the quantitative research. We'd like them to be doing on existing transactions, and so more details on that would also be of interest to us. - I'll shut up now and let up people talk or try to get in the remaining 5 min. What's done? - Sorry for talking really fast there, but I was trying to cram a lot in the interest of time. +**Anatoly Yakovenko**: What do you mean by security patches? Like zero days? -**Alexander Meißner:** Yeah, just too quickly to answer that. So as I said, timeframes are not clear at all. Well, the most optimistical one, is.to have at the end of the midterm something on testing it, but like really really minimum MVP with most of the features missing just to have some rough idea what this is gonna feel like.No documentation, no support whatsoever. Just for the raw code base, the skeleton of the code base essentially And for how committed are we on this? This is actually the spot out of another project. This is going on for 2 years now to reform the existing program runtime. and I think we have reached the limits on what's possible with our present day. Right? So this is all the things we have conducted in the last 2 years along with our ground architecture and how we want to reform it. -So,I think that there's definitely something coming in this sense, if it will be accepted. This thing which I just presented to you that is still up to the date and the other thing about firedancer, yes I’ll most likely expect you. We'll still have to implement our program runtime time because of this long migration period. So we're speaking here. I thought maybe something would be ready on mainnet in a year, and then another year of migration period. So if you only start implementing your program runtime in 2 years, and you might get away with not implementing. But if we want to be faster, then yeah. We would have to have that both. -**Kevin Bowers:** Thank you. +**Alexander Meißner**: Yeah, at the moment we don't have a released structured way to deal with GitHub security issues. It's always situational, sometimes you catch them immediately, sometimes if you check it, sometimes you try to hide them, and sometimes we are really obvious about them. Let's get started, yes. -**Jacob Creech:** Okay. With 4 min left. As anybody wants to get into any other questions. -**Philip Taffet: I** raise my instruction limit, request. ‘ +**Anatoly Yakovenko**: Yeah, the top validators should all be building from source and we should be able to send them the patch directly in an emergency like, so it doesn't need to be revealed in the GitHub repo. -**Jacob Creech:** Go ahead. +There’s like two kinds of attacks right like one is a safety issue and those you can get out as a patch to the top 33 of the validators. So if that has been exploited the network holds. The liveness ones are harder because you need two-thirds to upgrade and that requires like basically a general release so that it's really hard for us to get two-thirds of the validators to upgrade via like a secret patch right like, so that has to go through I think the general release process. -**Philip Taffet**: So some of us talked about this in the discord. But we're interested in limiting the number of instructions in a transaction because, especially as a transaction size grows or as the maximum like MTU grows. Then you have this problem where someone could put like a 1000 instructions in one transaction, and they're useless instructions. But we don't want to support that because we don't think there's a compelling use case for it. -**Alexander Meißner:** Yes, yes, this is already independently of this project, we have a feature for that thing already on the schedule. This will be limited to something like 50 or 60. +**Alexander Meißner**: Yeah, at that point it would be now in this category of SIMDs because that is probably the route for feature activation. That's why I brought it up. - **Philip Taffet:** Oh, even better. -**Alexander Meißner:** Yeah. So we measured what the longest currently used transactions are on the system and it was something around 40. So we thought, yeah something slightly buffed up. +**Anatoly Yakovenko**: Yeah, if there's a liveness issue that needs a feature activation, it's just like really unfortunate. -**Philip Taffet:** Okay, thanks. +**Micheal Vines**: I do think for the first category though there's an opportunity to really improve the ad hoc process that we have. I think talking about that would be good at some point. -So this is a feature flag that has not been activated yet? -**Alexander Meißner:** Yeah, that's already on the schedule. +**Richie Patel**: I really do want to get the client to a point where it can continue the chain without having two-thirds vote. I think you can probably optimistically confirm without finalizing that would probably relax some of the like emergency patching that we hopefully don't have to do. I also think we should definitely fast-track the SIMD process and not be held up by approvals or things like that. If there's a very obvious change I think that can be both implemented on like the two or three clients we currently have without having to put the, you know, rubber stamp on it. -**Philip Taffet:** Oh, okay. -**Alexander Meißner:** If you ping me on discord and in the virtual machine. So then I can send you the ticket application. +**Jacob Creech**: All right, cool. So what we'll do is for the future call, coming up in the new year, we'll grab all this information from you all and kind of work with y'all to figure out what the full agenda is and we'll just go through it each time. Feel free to give either me or anybody's feedback on the call like, Hey do we need this, do you want to continue it, like how could we make it better? We're more than happy to like help facilitate that and help you all work together as developers on the Solana protocol. -**Philip Taffet:** Sorry, Which channel? +All right, cool. Thank you everyone for coming today. -**Alexander Meißner:** Virtual Machine -**Philip Taffet:** Virtual machine? Got it! Thank you! +**Dan Albert**: Thanks, everybody. Looking forward to figuring all this out. Hope everyone has +a great New Year. -**Jacob Creech:** Okay. Is there any other questions on the runtime V 2 and apologies. Mango team. I don't think we're going to be able to get tier your SIMD. Okay, cool. +**Kevin Bowers**: Happy New Year, thank you. -So thank you all for coming to talk about this for the future agenda items. -What we're gonna do is we're gonna have it all on Github and I'm just gonna create a new issue for the next call, and if you want to propose a new item for the agenda, you can just leave it there. And then hopefully, we can get more information there as well as like documentation ahead of time, so that we can have a more productive conversation when we get to this call. -I think we might have to make this call longer in the future depending on what the agenda items are or do it more often. I'll reach out to you all to decide on how we do that. -But yeah, thank you everyone for coming today. Bye! +**Dan Albert**: Thanks, Jacob. From 0a251c83aad5d9ab84be2d0eb6d9dffdc218a046 Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 20:00:02 +0530 Subject: [PATCH 7/9] Update Call 2.md --- call-notes/Call 2.md | 228 +++++++++++++------------------------------ 1 file changed, 66 insertions(+), 162 deletions(-) diff --git a/call-notes/Call 2.md b/call-notes/Call 2.md index 4b19667..f291a55 100644 --- a/call-notes/Call 2.md +++ b/call-notes/Call 2.md @@ -1,222 +1,126 @@ -# Core Community Call 1 Notes +# Core Community Call 2 Notes -Meeting Date/Time: Friday, December 16th, 2022 19:00 UTC +Meeting Date/Time: Friday, January 20th, 2022 19:00 UTC -Meeting Duration: 30 mins +Meeting Duration: 26 mins -[Video of the meeting](https://www.youtube.com/watch?v=XZhy9VFGKZc) +[Video of the meeting](https://www.youtube.com/watch?v=SQXHgiUlU6E&t=603s) ## Decisions -- Access control on SIMDs should be clearly defined -- Every feature should have an associated SIMD +- Program Runtime V2 won't be ready for implementation for a while +- Transaction instruction limit is 64 in an [[upcoming feature](https://github.com/solana-labs/solana/pull/27938)] -## Action Required +### Meeting Notes -- Outline process for critical issues when there's multiple validator clients - -## Meeting Notes - -### Introduction -Video | [00:00](https://www.youtube.com/watch?v=XZhy9VFGKZc) +### Introduction | [ 00:00](https://youtu.be/SQXHgiUlU6E) -|- -**Jacob Creech**: This is what we're considering as the first Core Community call or the first Solana Core Developer Sync. What we're hoping that this turns into is a way for developers on the Solana protocol to sync on changes that are being made, feature developments that they're thinking of, and proposing changes on Solana so that we can more collaborate together as a whole. - -Ultimately it's up to you all as the engineers to make up as you best wish of what this call looks like. In future calls we'll call for an agenda if people want to put forth what they want to talk about on the agenda side. The first item that we want to discuss is like what do you all think that this call should look like and then later we'll also talk about SIMD and what that process looks like so that we can make proposals and actually use it to make changes, and keep aligned on changes on Solana. -Go ahead, Richie - +**Jacob Creech:** Welcome all to the second core community call. There are a number of agenda items that we've proposed for this call. Currently, in the list is first going over program runtime V2 with Alexander, Alessandro, and Aditya as well if he is on this call. -**Richie Patel**: All right! I think generally this would be most useful to have an online forum where client teams can discuss changes that affect everyone, mainly protocol breaking changes that Solana labs, Jito and Firedancer, and so on would have to implement. I think we should probably start with a process where we first specify something in the SIMD and then go forward. Other things will probably be things that actively concern mainnet and require call intervention to be fixed, I guess that that would be the Quality of Service related incidents and so on. Was there a written agenda or a proposal for the agenda for this call? I think I saw something, I don't fully remember. +Then there was a request to go over the transaction instruction limitations and figure out what makes sense on both the Firedancer, as well as side to implement. Finally, if we manage to make it and have time, we'll go over with the Mango team application account write fees SIMD. +Housekeeping Note: This is for future agenda items.we're going to create an issue for people to propose agenda items on, so that it's not just reach out to someone and hope that it happens so i'll put the link to it here. Ultimately for anything that gets proposed, we should have at least some documentation on it, it should be ready to discuss it. It shouldn't just be an idea. +From there. Alexander Alessandro, and Aditya, feel free to get started on program runtime V2. -**Jacob Creech**: For this specific call it's to talk about what we both most want out of this as well as talk about the SIMDs, and then anything else that you all want to bring up. - -### Read and Write Access for the Solana Protocol -Video | [02:40](https://youtu.be/XZhy9VFGKZc?t=160) +### Program runtime V2 +Video | [1:46](https://youtu.be/SQXHgiUlU6E?t=106) -|- -**Dan Albert**: Just kind of reflecting on something I've been sharing with the team internally. There's been a lot of calls for action from inside of the community of what I see is more people wanting, I'll say read access and then write access for the Solana protocol. Read access being there's a lot of teams core devs and non-core devs that want better visibility into what's coming down the line, how is this going to impact me, particularly like RPC operators, or Dapp -developers that are going to be impacted by any breaking changes. - -That I think maybe doesn't need to be in scope for this call, you know either today's or in -general, but I mean it's something that as the core developer Community, I think we can do a better job of communicating. Obviously engineering roadmaps for -technology like this are incredibly difficult to nail down and I think people understand -that, but figuring out a way as a community or like as an organization, labs or foundation to put out more visibility to the broader community. Then as far as write access: who can make contributions, or rather how does one -go about making contributions by engaging here, by making an informal proposal on Discord or on some other forum, followed by getting feedback here or in SIMD comment threads, and then kind of trying to figure out what does that sort of approval process look like, and should anyone really be owning an approval process when anyone can build from source, and run a client with whatever changes they desire. - -So just trying to feel out what people think is best there and then as we go on like to be able to kind of dig into the actual details of like: Okay, what do people actually feel about this particular proposal or that code change, etc. - +**Alexander Meißner:** Okay, yeah, thanks. +First of all, disclaimer, everything's still a draft. It's not even a proposal yet. You won't find a SIMD for now. So lots of things can change. Timelines are still being worked out, and this is mostly a teaser to get some community feedback. If these are the things, then it’s you the programmers on the same thing very well to you if this is something you want to see, or if there are things where you think like oh no, this is never gonna work for us. -**Jacob Creech**: Cool, and then to kind of like further jump-start the conversation, I'll drop in the chat the SIMDs that we currently have or that we're working on. We recently kind of launched this process of how we can propose protocol changes to Solana that would be breaking changes something that's a big change economic wise, and what we can do is everybody here can create a proposal that will change how Solana works and then we can use this to discuss what is different, how different changes work, how it affects all of us, especially between Firedancer, Jito and working with the Mango folks. How we can create or keep in line of the big changes coming on Solana in the future, especially when -there are feature activations. How do we do that across teams etc. - -### Challenges in making public repositories and their possible solutions -Video | [06:08](https://youtu.be/XZhy9VFGKZc?t=368) +### Support for the Move programming language +Video | [3:05](https://youtu.be/SQXHgiUlU6E?t=185) -|- + +**Alexander Meißner:** The biggest elevation is that, we want to support Move by preparing like this. Some of you might have heard of it .We had support for Move at the very beginning. We sketched it, and we then implemented our current rust ecosystem.So in that sense Move is coming back to Solana .But this time we plan on compiling it, and having it compiled and verified at deployment, which is something new. I think I would change so far as I've been trying to interpret us and further beyond that we want to make it an interoperable Delta frontend. For example, with CN where it brings a lot of services but also some very interesting opportunities. -**Kevin Bowers**: So, I'm just going to say a bunch of things that are kind of in the space and -some of those are things that we also discussed with Dan a little bit earlier, and I think a lot of this is just related to work going on internally and how we've thought about a lot of these -problems. None of this is anything that I have really prepared remarks on or anything but one of the things that already exists in this. We talk about specs is part of our job is to essentially come up with specs for what the existing protocol is from the current code and there have been some repos set up in places like the Solana Foundation. I know there's a lot of kind of comments on that and that's also somewhat a prerequisite for work we're doing -internally where we've engaged with various experts in formal verification and whatnot, and it's very difficult to formally verify if we don't actually have a spec for doing that. - -So, at least from the kind of specs repo read-write access and whatnot, I’d kind of direct things in that direction unless there's a broad consensus in the community we don't want to have those. I don't really see that as not being an option for the long term if we want to have multiple validators or whatnot and, you know, kind of put people in that direction. I think when it comes down to those that’s not the only repo, like there are the internal repos that we're developing, there's obviously the Solana Labs repos, other people's repos that are kind of sitting around here. We spent a lot of time in the initial discussion when we were asked to look in this area as to what was the right model for doing the engagement and we were deathly afraid that we had two different organizations, different cultures, different development styles, different languages and all that, that if we were to try to do stuff in the same repo it'd be disastrous. It wasn't just that kind of abstract concern internally, Jump has a lot of internal communities with the various trading groups and so on and so forth, and you know doing everything in a common repo just tends not to work. So we've done a lot of stuff internally just for you know non-crypto-related things where we essentially develop stuff at boundaries between repos and come up with interfaces, be they shared memory interfaces or whatnot, and a lot of the stuff that we've been planning on here is to essentially iterate independently in our own repo. Let Solana iterate in their repo. Use the specs that we're doing to essentially define boundaries both from the protocol works but also ways that we can divide stuff up and componentize the existing validator and then swap out various parts as we go and do that. A lot of that is being done at process boundaries, so we don't have to have a whole lot of friction or tight integration between organizations and you know those kinds of logistical problems that can do. - -With respect to protocol-breaking changes as we've been going through a lot of stuff and checking more stuff in, we had a lot of ideas and we've spent a lot of time thinking about how we might, you know, bring them to the community. I think one of the things that already exists that we were planning on is we do have some scope in our development plan for essentially doing proof of concept designs and like some of the stuff that we were thinking about doing is just like, you know, we'll set up a proof of concept over here to essentially come up with reference implementation and then bring that to a community as opposed to just having an open-ended abstract discussion to the effect like we don't like this, maybe we could do it this way then have everyone just be kind of like well it's not obvious that'll be better or not, and so at least as far as protocol breaking changes are, at least intent is, we would make recommendations but only make those recommendations after we had some working code to show how those things work. - -Sorry for a bunch of rants, I don't know if that necessarily addresses the points that you mentioned but you know I think it's things of making notes on as people were talking - -### SIMD merge criteria -Video | [10:00](https://youtu.be/XZhy9VFGKZc?t=600) +### Typed Interfaces +Video | [ 4:21](https://youtu.be/SQXHgiUlU6E?t=261) -|- -**Richie Patel**: I think we can take a lot of inspiration from the Ethereum process because that has proven to work quite well at scale and the way they do it is fairly similar. So for any non-trivial change to these specifications and whatnot, usually when you check in an EIP, or -in our case in SIMD, you also have a proof of concept in your own repo and then at least start to -think ahead about how another team might Implement that. - - -**Dan Albert**: Yeah, I think in my mind I see the bar for actually getting a SIMD merged should be quite high. I see that as the tail end of the sloppier, less formal sort of debate process people testing things trying to figure out what makes the most sense, do the prototyping, and get some sort of initial social consensus from the validators, the developer community that not only do we -think it's a good idea but someone on the team is willing to go ahead and implement it, right. If Solana Labs thinks some SIMD is great but the Firedancer team thinks some SIMD isn't, the same SIMD is a terrible idea, and each client, in the future has 50% of the stake on the network, well both teams need to implement it in order for it to actually right come to fruition. I agree with your proposal Richie on having the proven concept and I would just want to call out as we're kind of discovering it not to like jump to a SIMD for any random new idea, right. I think this kind of stuff in Discord, GitHub issues like is more appropriate, where people are trying to suss out the interest and feasibility of a new process. +**Alexander Meißner:** So yeah, what will change in the program runtime? Programs will become libraries essentially. All the programs will be able to export types as well as countless constants.All the functions will have a static parameter and return level signatures, no generics on these public functions and every public function will then be able to become an entry point. Currently, if you're not using framework like anchor,well, basically everybody is writing something like a dispatcher in the entry point. They deserialize the incoming instruction and then immediately call Catch up in the extra point and then imaging that call to be called into something like a such case or Imaging that call, another function. So that would not be necessary. But just call into the right function directly. and have it be using a type interface .Also accounts with the contacts.Currently you have to use CLI simply, serializing if you need to know what you're doing and what your bytes are, how to interpret them and in this new runtime we would essentially give every account types similar to structure. It is not yet decided how to dynamically size vectors. I kind of work on that, because, obviously, as you know, structure in Rust. See they have static layouts. So there is no concept of these programming languages of dynamically sized in lines of members in stocks. Possibly you might have to statically declare dependencies. By dependencies I mean the other programs you import from and it's you that use functional stuff. - -**Richie Patel**: As much as I don't belittle the point, the Ethereum community does check in a lot of EIPs never actually deployed on mainnet, it's nice to have some sort of proposed standard when you get to implementing the idea but often, you have something sitting around for three years and then you might implement it at some point in the future. There's lots of different -branches of these implementations but I think if we restrict ourselves to saying anything that's an accepted SIMD will eventually be implemented and activated then, a lot of this political discussion I think will actually prevent the engineering efforts of standing up a proof of concept, so it's, I would maybe have less restrictions and then say well this is not even an accepted standard but at least it's checked in and it's there someone wants to implement it. - - -**Dan Albert**: Okay. Yeah, I guess I'm not crazy about the idea of having a SIMD repo become like a Boneyard of unimplemented proposals, right? So there needs to be some kind of filtering mechanism but I agree like we can have a spec or a proposal that everyone agrees is a good idea and is going to take 12 months of work or there's just more urgent issues to be addressed sooner. - - -**Anatoly Yakovenko**: The problem with those long ideas is that they usually die or by the time you get around to building them, something has changed to where they're no longer valid. So like I think that I would prefer that the specs that do get checked in have like a path to implementation within six months. - - -**Jacob Creech**: To take from Ethereum as well I believe what they have is if there's a certain point where it just can't be implemented due to a number of changes that happened previously, for example, if it took six months to implement and the things changed is no longer a viable option, they do change in the status to stagnant and they throw it out at that point. - - -**Kevin Galler**: Probably like marking statuses, is there like a mechanism for this? - - -**Jacob Creech**: Yeah. There's kind of like a process as outlined in like the first SIMD of what you do is you draft it and then you work with people trying to get consensus on should we move forward with this or should we not. Then once you get that consensus you can move into accepted. To get to implementation phase requires process around feature activation or who's owning the different feature activation in each client. It's who's building the feature, what's the status of it, and how do we get it to actual activation across the network. - -### Write Access to SIMDs and Specifications -Video | [15:11](https://youtu.be/XZhy9VFGKZc?t=911) +### Finer Sandboxing +Video | [7:07](https://youtu.be/SQXHgiUlU6E?t=428) -|- -**Richie Patel**: I guess this begs the question of who actually gets to decide to press the merge button and define what consensus is. I think for now it's perfectly valid if Solana labs and -Solana Foundation has this authority since, with the exception of Jito, we're just starting out hitting mainnet. In the long term, it would be nice to maybe define a set of people. I know this always tends to exclude people but I would maybe define consensus like that there is no big agreement, there's like general you know acceptance of a change even if it's not a direct confirmation from each team. - - -**Jacob Creech**: Yeah, as part of the first SIMD it's there's no obvious outspoken disagreement and that if there is agreement from the majority of core contributors, you can move forward by who has access to do write, triage, or to maintain the repo of SIMDs. I wrote up an access policy that is very similar to how Mozilla does it and how they give access to write or to triage different issues, so that is under review. We can create that list of possible merge-access people. It's really it's both a social consensus as well as like a technical consensus. If someone abuses that power it can easily be taken away as well. - +**Alexander Meißner:** Okay. The other big change is gonna be Finer Sandboxing. Sandboxing, the idea of separating programs coming from different developers so that they cannot misbehave beyond their own little sandbox. It's completely done by virtual machines and separated with our address spaces, we have one for every single instruction and transaction and that is very inefficient. In the current architecture, we actually copy all the data in between those sections. We have a feature reading this which will understand the memory map, at least in between these VMS of the accounts. But still, the programming model is and continues to be for the old program runtime. i.e, every single instruction gets its own virtual address space. And with this new runtime, we want to change that. We want to make one big, VM and one big address space for the entire transaction and share the course across all the instructions +and instead of the way, find my grants, access control system. which basically does access control allocation of a number of objects. So, you would be able to declare time to make an instance of that time in some data and obviously store it in your own account with retrieve that format, but you could also. That's not the interesting part, but you could also pass it to some other program. And that program could also start in its accounts and retrieve responders and pass it along and so on. And all these programs would be prohibited from modifying the data. So for them, your exported types would be okay. So now you will be wanting to know, what's the sense of exporting types when you can only have opaque types. So the idea here is that if you want to do something with that object from somebody else. you're returned to them, you’d call them and say to them, “Please do this modification” and now as they are the owner of the time. They hopefully then know what should be possible on this type and what should not. So in this sense, what this allows is, you could have assets declared in every single program. So for now currently on chain you have to use a token program to have a token plan. With this model of exporting types which are only modifiable by the program because exporters attack, you could have every program be its own token program in that sense. -**Dan Albert**: I think there's maybe also been some questions, and tell me if you think this often the weeds are out of scope here, but I think it's good for us to kind of feel out what these kind of processes feel right here. I think there's also a lot of less process heavy and more just sort of navigating the space questions some folks have come up with just like, Hey I wanna like I have this PR open against say the Solana Labs repo right because I'd like to fix a bug or I want to make a change whether it's a small thing or a bigger thing but they're a community member or maybe it's someone -from Jito wants to push something back to Labs. +With this comes also a change in how CPI works and Cisco’s work. So currently CPI calling one program and another program is really expensive, just slow and limited. So instead, we want to make that more like a function call. Essentially, we would be passing the instruction parameters, empty accounts, or a small panel that's likely to work in a function code. Cisco would be replaced by CPI to build programs. Some of you might be aware of Cisco as a special mechanism. And that would also be going away and just be treated as another call which happens to be a better program. -Maybe it doesn't require a SIMD because it's not a protocol thing. I'm curious maybe Anatoly or someone from the Labs team who's on the call, do you guys have a sense, either written or informal, I know they're like the quality has been very mixed right over time because anyone can open a PR against the repo like, how does the Labs team view, you know, receiving and merging changes? - - -**Anatoly Yakovenko**: I think if it has like a feature activation it should probably have an associated proposal because the feature activation required implies that there is something breaking in the client that it's not like a change you can easily roll in and it should probably be, or it definitely needs to be communicated to all the other, to the Firedancer client and we should use like the proposal process for that. - - -**Dan Albert**: Meaning anything that requires feature activation should have a corresponding SIMD? - - -**Anatoly Yakovenko**: Yep - - -**Dan Albert**: Okay. Yeah, I think that's good. - -### What to do about implementation details that are not protocol defining -Video | [18:52](https://youtu.be/XZhy9VFGKZc?t=1132) +### Limits and Costs +Video | [11: 40](https://youtu.be/SQXHgiUlU6E?t=704) -|- -**Buffalu**: What do you think about like the changes that we've made to the validator where they're not necessarily related to consensus but they are like pretty significant changes? - - -**Anatoly Yakovenko**: I would love to have a proposal for these are the API hooks that you guys need that for all conforming clients to implement and then the Firedancer team and us, we can just conform to that standard like these are the hooks that Jito needs and this is how we load like, I really want to load a dynamic shared object instead of like downloading a separate Jito client. - - -**Buffalu**: Yeah, same. Okay, cool. - - -**Dan Albert**: I think Richie and Kevin on Firedancer had a kind of similar plans, is that right? To basically kind of design or spec out these interfaces that aren't necessarily protocol defining but it's just more of like an implementation detail. +**Alexander Meißner:** This is actually the least clear from what they expect new limits and costs economy because it obviously depends a lot on the specifics on documentation. But what we want to achieve here is to remove some of the most annoying limits. So one of them, probably most of you have found out, is that you cannot only reallocate accounts by a fixed amount of 10 kB per transaction, and If you want to do more, you have to do a series of instructions and you can come to the only do for CPI nested in your server because that also means that we have for our VMS suspend simultaneously. That's something we need to keep the memory alive for the other VMS. This is why that’s both limited for now. Both of these limits should be gone. +Additionally, a limit is that we have if it's stack and the stack is quickly consumed by the fact that every function call that's 4 kB of section. And we're switching to dynamics. So that the compiler can actually dictate how much stack memory it’s going to use in response. Then, hopefully, more efficiently we use the same, which should enable more or deeper function call traces. CPI, as I already said, it is gonna be cheaper. So we will also calculate less due for that. It won't be the patent on the account size anymore. I think that's also a limiting factor for most of you and Cisco might be slightly a bit cheaper. Then you are probably gonna introduce the cost for declaring programs in a transaction definitely. Currently, That's free, as far as I know. because we might switch to EBR reloading programs which is an amazing bonus and there will be one based cost working program or invoking a program independent of if this program is doing anything at all. Just returning immediately, if this is also not the case. Currently, there are different costs associated with depending on if this program is a top-level declared in the message of the transaction generated by CPI. -**Kevin Bowers**: Those are definitely fresh on our mind as we're getting very very close to getting the last bits of plumbing put together on our end and I think the big things you know far. I'm going to answer this may be more mechanically because there are different ways you could approach this from a process standpoint or what it means to a repo standpoint but our intent is to take the existing validator at Solana and do all the plumbing that's needed on that side to interface with our component one and we already have basically those points where we want to go and how to do those boundaries and whatnot, and then just like proof of concept like work it out and say okay we worked it out, and then essentially kick that to you guys to then say what is the proper way to do that, and I think part of the call here is getting some idea what those processes are. Now, since that wouldn't be something that'd be a protocol-breaking change or whatnot doesn't sound like to have a SIMD involved but we'd say here are some changes we'd like these to go in, we'd like to be respected kind of going forward that defines those internal API hooks, those API hooks then you know any other organization Jito or whatnot could go ahead and then be using those for doing their development against too and they could interface at those points. - -We also are trying to minimize the complexity and the surface area of those interfaces so we aren't too particular about it so if we get it wrong or you know somebody wants some other kind of change on that it's not that big a change. We're not trying to find the max cut and create the most complex interfaces across or trying to find very very minimal points to simplify this kind of organizational interfacing that we're talking about here. - -### Validator Specification and Internal API -Video | [21:30](https://youtu.be/XZhy9VFGKZc?t=1290) +### Things that Stay +Video |[ 14:50](https://youtu.be/SQXHgiUlU6E?t=890) -|- -**Richie Patel**: I remember as part of the three repos we created for these inter clients, local APIs there were first of all these specs, the SIMD, but there's also a validated APIs repo that Solana Foundation created, and originally that was the plan to have all the C structure definitions and so on posted there but I think this can quickly get quite complicated if that needs to be compatible with like three different CI processes and build systems and so on. So I'm not too sure what the best platform would be, maybe we just copy headers between clients and socially ensure that they don't get out of sync instead of using any complicated tools. - - -**Dan Albert**: Yeah, I'm happy to remove that validator internal API repo. It hasn't seen any activity since we kind of kicked that idea around a while ago, because it's really not, like you said, it's not a protocol definition thing, it's more of an implementation for convenience between multiple teams. - -**Jacob Creech**: And then a question for the specs: whenever we have a SIMD proposed and it's accepted, do you all want to wait until after like it's actually implemented across the different clients or do you, like when do the specs change in accordance to like upgrades the network? - - -**Richie Patel**: I mean as far as I can tell, SIMDs are proposed changes and specs are authoritative sources of what the protocol actually is and merging that before and anything is activated on mainnet is I guess technically wrong, but I don't know if we want to split hairs here. It's hard to tell but I would like when it's clear that a feature is about to be activated I think that's a good point when we want to merge things into the specs repo. - +Yeah,things which we are not going to change, in other words, which are going to stay. Rust will still be the main programming infrastructure. So it's not that we are moving to move. We're staying with rust. We're just also implementing Move for people who come from other ecosystems and want to program on Solana . This is just part of the motivation.Bigger part is that we want to print these concepts of Move. I think having every function as a possible entry point and having typed accounts. you want to bring them to us. The one pain point you all know about having to be clear and all possibly access accounts and called programs upfront in a transaction is going to remain it. It has to do with how the transaction scheduler and patching works and if you bounce or if the program on, time doesn't allow that upfront. It gets really hard to do this efficiently. This will remain something which probably with some of the solution, like simulation of the transaction, to figure out which programs do. Well, actually want to call, and then submitting that section. Then, the account model is mostly unchanged that will stay more or less the same. Like the accounts. The database is still few values for that part, the rent field being deprecated. But it's already on their way. The type 3 of this gonna be introduced. +Now, the interesting thing for you is probably how are we gonna migrate from the current system to the new system? We plan on doing a long migration period by long, I mean a year, at least, I think, in which you will support both my times and you will be able to call the old runtime from the new one .This gives you the opportunity to to move all your funds into the new programs and in general all these changes are so fundamental that you probably have to rewrite and redefine all the programs completely. So this one big migration movement essentially, and therefore we will only want to do one so that the community doesn't have to multiply waves of redeployments. We want to prevent that and are trying squeeze it all into one pick up there. Essentially.: Yeah. So this is for my presentation. -**Jacob Creech**: Okay, so we're coming up a little bit on time for this call anyways. So I guess for future calls what we'll do is we will kind of like put out calls for agenda items, future could be including like a SIMD that someone proposed or like Hey, we're kind of talking about changing -this in the validator client this restructure what do you all think about? +Okay? Now yeah. For questions. -So we'll do that for the new year, but is there anything else that people want to bring up before the end here? +**Jacob Creech:** Cool. Thank you. Alexander. Yeah. Being cognizant of time, we have about 8 minutes left. So if people have any questions, especially from the firedancer side, since you know this was a request. -**Zano**: Yeah, another thing that would be good on these calls, let me know if you guys agree, is like having a spotlight for like large changes that have been merged in and kind of so yeah spotlighting that may be just like giving a brief overview of what happened there. - - -**Jacob Creech**: Yeah, that's a really good one. - - -**Dan Albert**: Yeah, I wonder, I'm just thinking because like that's a topic that I think a large audience would be, a larger audience than the speakers on this call might be interested in, -right? So, this is sort of what I was going back to earlier right there are more people than the core devs that are interested in you know I'll say read access to how new changes are coming in. This would certainly be a good forum to spotlight I'll say like a debate or discussion on said content, but I'm wondering if like the initial presentation could be the separate thing that's put out to the public and then we say, Hey I'm you know this quarterly call we're gonna you know to pick it apart or provide feedback or whatever. - -I'm just thinking based on the number of people here and the number of opinions that I'm sure could be voiced, we will want to make space for the debate right, because a presentation could just be like, Hey I like recorded this 30-minute thing, deliver it to the public, and then we have a review period after. - -### Process for security patches -Video | [23:49](https://youtu.be/XZhy9VFGKZc?t=1429) --|- -**Alexander Meißner**: I have a point properly for the next call and it's to design a process for security patches, which I think is quite tricky. +**Kevin Bowers:** I have a couple of quick reactions, and I also notice the timer, just instead of asking the question, is going to rattle off a bunch of things that I was making notes on as you were going. +I think, overall, my quick reaction to this, the official reaction. But this is the first time we've seen anything more in detail about it, as there's a lot to like here. There's a lot of doubles in the details, though, that we would have to sort out the most, maybe down in the firedancer code base, the way we structured it is. We actually started from the programming model we put together for pith for running stuff on chain, and then we've extended that to cover X 86, and we're writing over code within that to give us a lot of flexibility for writing both implementations to run stuff on chain, and also do stuff on chain. And, give us some cross-platform capabilities and interoperability with various hardware kinds of acceleration and whatnot we're planning. With all that, like what you're describing nicely maps onto that. So I'm not seeing anything there that structurally impacts at a very low level a lot of our development plans where things look a little bit more on the logistical side, which is what's the kind of timeframe expected for this? How certain is this? I know you mentioned. This is before not even a proposal, just a thing kind of throwing out there and then, when we're looking at it, we're essentially like. My thing is, should we be targeting to just implement this, or we should have them on both, or should target the old thing, and then wait to see if this happens. And then, you know you already dressed this a little bit. What's the kind of thinking around interoperability costs, and you know some of the details of going there? +I think there's a secondary thing that would be in there. That is also we've done a lot of work on cost estimation. We're spinning up a lot of our internal pot resources to do even more elaborate work on there. If this is going to change the cost models that changes some of the quantitative research. We'd like them to be doing on existing transactions, and so more details on that would also be of interest to us. + I'll shut up now and let up people talk or try to get in the remaining 5 min. What's done? + Sorry for talking really fast there, but I was trying to cram a lot in the interest of time. -**Anatoly Yakovenko**: What do you mean by security patches? Like zero days? +**Alexander Meißner:** Yeah, just too quickly to answer that. So as I said, timeframes are not clear at all. Well, the most optimistical one, is.to have at the end of the midterm something on testing it, but like really really minimum MVP with most of the features missing just to have some rough idea what this is gonna feel like.No documentation, no support whatsoever. Just for the raw code base, the skeleton of the code base essentially And for how committed are we on this? This is actually the spot out of another project. This is going on for 2 years now to reform the existing program runtime. and I think we have reached the limits on what's possible with our present day. Right? So this is all the things we have conducted in the last 2 years along with our ground architecture and how we want to reform it. +So,I think that there's definitely something coming in this sense, if it will be accepted. This thing which I just presented to you that is still up to the date and the other thing about firedancer, yes I’ll most likely expect you. We'll still have to implement our program runtime time because of this long migration period. So we're speaking here. I thought maybe something would be ready on mainnet in a year, and then another year of migration period. So if you only start implementing your program runtime in 2 years, and you might get away with not implementing. But if we want to be faster, then yeah. We would have to have that both. -**Alexander Meißner**: Yeah, at the moment we don't have a released structured way to deal with GitHub security issues. It's always situational, sometimes you catch them immediately, sometimes if you check it, sometimes you try to hide them, and sometimes we are really obvious about them. Let's get started, yes. +**Kevin Bowers:** Thank you. +**Jacob Creech:** Okay. With 4 min left. As anybody wants to get into any other questions. -**Anatoly Yakovenko**: Yeah, the top validators should all be building from source and we should be able to send them the patch directly in an emergency like, so it doesn't need to be revealed in the GitHub repo. +**Philip Taffet: I** raise my instruction limit, request. ‘ -There’s like two kinds of attacks right like one is a safety issue and those you can get out as a patch to the top 33 of the validators. So if that has been exploited the network holds. The liveness ones are harder because you need two-thirds to upgrade and that requires like basically a general release so that it's really hard for us to get two-thirds of the validators to upgrade via like a secret patch right like, so that has to go through I think the general release process. +**Jacob Creech:** Go ahead. +**Philip Taffet**: So some of us talked about this in the discord. But we're interested in limiting the number of instructions in a transaction because, especially as a transaction size grows or as the maximum like MTU grows. Then you have this problem where someone could put like a 1000 instructions in one transaction, and they're useless instructions. But we don't want to support that because we don't think there's a compelling use case for it. -**Alexander Meißner**: Yeah, at that point it would be now in this category of SIMDs because that is probably the route for feature activation. That's why I brought it up. +**Alexander Meißner:** Yes, yes, this is already independently of this project, we have a feature for that thing already on the schedule. This will be limited to something like 50 or 60. + **Philip Taffet:** Oh, even better. -**Anatoly Yakovenko**: Yeah, if there's a liveness issue that needs a feature activation, it's just like really unfortunate. +**Alexander Meißner:** Yeah. So we measured what the longest currently used transactions are on the system and it was something around 40. So we thought, yeah something slightly buffed up. -**Micheal Vines**: I do think for the first category though there's an opportunity to really improve the ad hoc process that we have. I think talking about that would be good at some point. +**Philip Taffet:** Okay, thanks. +So this is a feature flag that has not been activated yet? -**Richie Patel**: I really do want to get the client to a point where it can continue the chain without having two-thirds vote. I think you can probably optimistically confirm without finalizing that would probably relax some of the like emergency patching that we hopefully don't have to do. I also think we should definitely fast-track the SIMD process and not be held up by approvals or things like that. If there's a very obvious change I think that can be both implemented on like the two or three clients we currently have without having to put the, you know, rubber stamp on it. +**Alexander Meißner:** Yeah, that's already on the schedule. +**Philip Taffet:** Oh, okay. -**Jacob Creech**: All right, cool. So what we'll do is for the future call, coming up in the new year, we'll grab all this information from you all and kind of work with y'all to figure out what the full agenda is and we'll just go through it each time. Feel free to give either me or anybody's feedback on the call like, Hey do we need this, do you want to continue it, like how could we make it better? We're more than happy to like help facilitate that and help you all work together as developers on the Solana protocol. +**Alexander Meißner:** If you ping me on discord and in the virtual machine. So then I can send you the ticket application. -All right, cool. Thank you everyone for coming today. +**Philip Taffet:** Sorry, Which channel? +**Alexander Meißner:** Virtual Machine -**Dan Albert**: Thanks, everybody. Looking forward to figuring all this out. Hope everyone has -a great New Year. +**Philip Taffet:** Virtual machine? Got it! Thank you! -**Kevin Bowers**: Happy New Year, thank you. +**Jacob Creech:** Okay. Is there any other questions on the runtime V 2 and apologies. Mango team. I don't think we're going to be able to get tier your SIMD. Okay, cool. +So thank you all for coming to talk about this for the future agenda items. +What we're gonna do is we're gonna have it all on Github and I'm just gonna create a new issue for the next call, and if you want to propose a new item for the agenda, you can just leave it there. And then hopefully, we can get more information there as well as like documentation ahead of time, so that we can have a more productive conversation when we get to this call. -**Dan Albert**: Thanks, Jacob. +I think we might have to make this call longer in the future depending on what the agenda items are or do it more often. I'll reach out to you all to decide on how we do that. +But yeah, thank you everyone for coming today. Bye! From 32fec34a4648c25c7061b3c7ebce3611f8ec3157 Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 20:01:00 +0530 Subject: [PATCH 8/9] Update Call 2.md --- call-notes/Call 2.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/call-notes/Call 2.md b/call-notes/Call 2.md index f291a55..2ff9db9 100644 --- a/call-notes/Call 2.md +++ b/call-notes/Call 2.md @@ -13,7 +13,8 @@ Meeting Duration: 26 mins ### Meeting Notes -### Introduction | [ 00:00](https://youtu.be/SQXHgiUlU6E) +### Introduction +Video| [ 00:00](https://youtu.be/SQXHgiUlU6E) -|- **Jacob Creech:** Welcome all to the second core community call. There are a number of agenda items that we've proposed for this call. Currently, in the list is first going over program runtime V2 with Alexander, Alessandro, and Aditya as well if he is on this call. From d34e53ae6d0966cc4922a6f6be9e56f7e37d952f Mon Sep 17 00:00:00 2001 From: JeevithaaShree <123286150+JeevithaaShree@users.noreply.github.com> Date: Tue, 24 Jan 2023 20:13:51 +0530 Subject: [PATCH 9/9] Delete Call 2.md --- call-notes/Call 2.md | 127 ------------------------------------------- 1 file changed, 127 deletions(-) delete mode 100644 call-notes/Call 2.md diff --git a/call-notes/Call 2.md b/call-notes/Call 2.md deleted file mode 100644 index 2ff9db9..0000000 --- a/call-notes/Call 2.md +++ /dev/null @@ -1,127 +0,0 @@ -# Core Community Call 2 Notes - -Meeting Date/Time: Friday, January 20th, 2022 19:00 UTC - -Meeting Duration: 26 mins - -[Video of the meeting](https://www.youtube.com/watch?v=SQXHgiUlU6E&t=603s) - -## Decisions - -- Program Runtime V2 won't be ready for implementation for a while -- Transaction instruction limit is 64 in an [[upcoming feature](https://github.com/solana-labs/solana/pull/27938)] - -### Meeting Notes - -### Introduction -Video| [ 00:00](https://youtu.be/SQXHgiUlU6E) --|- - -**Jacob Creech:** Welcome all to the second core community call. There are a number of agenda items that we've proposed for this call. Currently, in the list is first going over program runtime V2 with Alexander, Alessandro, and Aditya as well if he is on this call. - -Then there was a request to go over the transaction instruction limitations and figure out what makes sense on both the Firedancer, as well as side to implement. Finally, if we manage to make it and have time, we'll go over with the Mango team application account write fees SIMD. - -Housekeeping Note: This is for future agenda items.we're going to create an issue for people to propose agenda items on, so that it's not just reach out to someone and hope that it happens so i'll put the link to it here. Ultimately for anything that gets proposed, we should have at least some documentation on it, it should be ready to discuss it. It shouldn't just be an idea. -From there. Alexander Alessandro, and Aditya, feel free to get started on program runtime V2. - -### Program runtime V2 -Video | [1:46](https://youtu.be/SQXHgiUlU6E?t=106) --|- - -**Alexander Meißner:** Okay, yeah, thanks. -First of all, disclaimer, everything's still a draft. It's not even a proposal yet. You won't find a SIMD for now. So lots of things can change. Timelines are still being worked out, and this is mostly a teaser to get some community feedback. If these are the things, then it’s you the programmers on the same thing very well to you if this is something you want to see, or if there are things where you think like oh no, this is never gonna work for us. - -### Support for the Move programming language -Video | [3:05](https://youtu.be/SQXHgiUlU6E?t=185) --|- - -**Alexander Meißner:** The biggest elevation is that, we want to support Move by preparing like this. Some of you might have heard of it .We had support for Move at the very beginning. We sketched it, and we then implemented our current rust ecosystem.So in that sense Move is coming back to Solana .But this time we plan on compiling it, and having it compiled and verified at deployment, which is something new. I think I would change so far as I've been trying to interpret us and further beyond that we want to make it an interoperable Delta frontend. For example, with CN where it brings a lot of services but also some very interesting opportunities. - -### Typed Interfaces -Video | [ 4:21](https://youtu.be/SQXHgiUlU6E?t=261) --|- - -**Alexander Meißner:** So yeah, what will change in the program runtime? Programs will become libraries essentially. All the programs will be able to export types as well as countless constants.All the functions will have a static parameter and return level signatures, no generics on these public functions and every public function will then be able to become an entry point. Currently, if you're not using framework like anchor,well, basically everybody is writing something like a dispatcher in the entry point. They deserialize the incoming instruction and then immediately call Catch up in the extra point and then imaging that call to be called into something like a such case or Imaging that call, another function. So that would not be necessary. But just call into the right function directly. and have it be using a type interface .Also accounts with the contacts.Currently you have to use CLI simply, serializing if you need to know what you're doing and what your bytes are, how to interpret them and in this new runtime we would essentially give every account types similar to structure. It is not yet decided how to dynamically size vectors. I kind of work on that, because, obviously, as you know, structure in Rust. See they have static layouts. So there is no concept of these programming languages of dynamically sized in lines of members in stocks. Possibly you might have to statically declare dependencies. By dependencies I mean the other programs you import from and it's you that use functional stuff. - -### Finer Sandboxing -Video | [7:07](https://youtu.be/SQXHgiUlU6E?t=428) --|- - -**Alexander Meißner:** Okay. The other big change is gonna be Finer Sandboxing. Sandboxing, the idea of separating programs coming from different developers so that they cannot misbehave beyond their own little sandbox. It's completely done by virtual machines and separated with our address spaces, we have one for every single instruction and transaction and that is very inefficient. In the current architecture, we actually copy all the data in between those sections. We have a feature reading this which will understand the memory map, at least in between these VMS of the accounts. But still, the programming model is and continues to be for the old program runtime. i.e, every single instruction gets its own virtual address space. And with this new runtime, we want to change that. We want to make one big, VM and one big address space for the entire transaction and share the course across all the instructions -and instead of the way, find my grants, access control system. which basically does access control allocation of a number of objects. So, you would be able to declare time to make an instance of that time in some data and obviously store it in your own account with retrieve that format, but you could also. That's not the interesting part, but you could also pass it to some other program. And that program could also start in its accounts and retrieve responders and pass it along and so on. And all these programs would be prohibited from modifying the data. So for them, your exported types would be okay. So now you will be wanting to know, what's the sense of exporting types when you can only have opaque types. So the idea here is that if you want to do something with that object from somebody else. you're returned to them, you’d call them and say to them, “Please do this modification” and now as they are the owner of the time. They hopefully then know what should be possible on this type and what should not. So in this sense, what this allows is, you could have assets declared in every single program. So for now currently on chain you have to use a token program to have a token plan. With this model of exporting types which are only modifiable by the program because exporters attack, you could have every program be its own token program in that sense. - -With this comes also a change in how CPI works and Cisco’s work. So currently CPI calling one program and another program is really expensive, just slow and limited. So instead, we want to make that more like a function call. Essentially, we would be passing the instruction parameters, empty accounts, or a small panel that's likely to work in a function code. Cisco would be replaced by CPI to build programs. Some of you might be aware of Cisco as a special mechanism. And that would also be going away and just be treated as another call which happens to be a better program. - -### Limits and Costs -Video | [11: 40](https://youtu.be/SQXHgiUlU6E?t=704) --|- - -**Alexander Meißner:** This is actually the least clear from what they expect new limits and costs economy because it obviously depends a lot on the specifics on documentation. But what we want to achieve here is to remove some of the most annoying limits. So one of them, probably most of you have found out, is that you cannot only reallocate accounts by a fixed amount of 10 kB per transaction, and If you want to do more, you have to do a series of instructions and you can come to the only do for CPI nested in your server because that also means that we have for our VMS suspend simultaneously. That's something we need to keep the memory alive for the other VMS. This is why that’s both limited for now. Both of these limits should be gone. - -Additionally, a limit is that we have if it's stack and the stack is quickly consumed by the fact that every function call that's 4 kB of section. And we're switching to dynamics. So that the compiler can actually dictate how much stack memory it’s going to use in response. Then, hopefully, more efficiently we use the same, which should enable more or deeper function call traces. CPI, as I already said, it is gonna be cheaper. So we will also calculate less due for that. It won't be the patent on the account size anymore. I think that's also a limiting factor for most of you and Cisco might be slightly a bit cheaper. Then you are probably gonna introduce the cost for declaring programs in a transaction definitely. Currently, That's free, as far as I know. because we might switch to EBR reloading programs which is an amazing bonus and there will be one based cost working program or invoking a program independent of if this program is doing anything at all. Just returning immediately, if this is also not the case. Currently, there are different costs associated with depending on if this program is a top-level declared in the message of the transaction generated by CPI. - -### Things that Stay -Video |[ 14:50](https://youtu.be/SQXHgiUlU6E?t=890) --|- - -Yeah,things which we are not going to change, in other words, which are going to stay. Rust will still be the main programming infrastructure. So it's not that we are moving to move. We're staying with rust. We're just also implementing Move for people who come from other ecosystems and want to program on Solana . This is just part of the motivation.Bigger part is that we want to print these concepts of Move. I think having every function as a possible entry point and having typed accounts. you want to bring them to us. The one pain point you all know about having to be clear and all possibly access accounts and called programs upfront in a transaction is going to remain it. It has to do with how the transaction scheduler and patching works and if you bounce or if the program on, time doesn't allow that upfront. It gets really hard to do this efficiently. This will remain something which probably with some of the solution, like simulation of the transaction, to figure out which programs do. Well, actually want to call, and then submitting that section. Then, the account model is mostly unchanged that will stay more or less the same. Like the accounts. The database is still few values for that part, the rent field being deprecated. But it's already on their way. The type 3 of this gonna be introduced. -Now, the interesting thing for you is probably how are we gonna migrate from the current system to the new system? We plan on doing a long migration period by long, I mean a year, at least, I think, in which you will support both my times and you will be able to call the old runtime from the new one .This gives you the opportunity to to move all your funds into the new programs and in general all these changes are so fundamental that you probably have to rewrite and redefine all the programs completely. So this one big migration movement essentially, and therefore we will only want to do one so that the community doesn't have to multiply waves of redeployments. We want to prevent that and are trying squeeze it all into one pick up there. Essentially.: Yeah. So this is for my presentation. - -Okay? Now yeah. For questions. - - -**Jacob Creech:** Cool. Thank you. Alexander. Yeah. Being cognizant of time, we have about 8 minutes left. So if people have any questions, especially from the firedancer side, since you know this was a request. - - -**Kevin Bowers:** I have a couple of quick reactions, and I also notice the timer, just instead of asking the question, is going to rattle off a bunch of things that I was making notes on as you were going. - -I think, overall, my quick reaction to this, the official reaction. But this is the first time we've seen anything more in detail about it, as there's a lot to like here. There's a lot of doubles in the details, though, that we would have to sort out the most, maybe down in the firedancer code base, the way we structured it is. We actually started from the programming model we put together for pith for running stuff on chain, and then we've extended that to cover X 86, and we're writing over code within that to give us a lot of flexibility for writing both implementations to run stuff on chain, and also do stuff on chain. And, give us some cross-platform capabilities and interoperability with various hardware kinds of acceleration and whatnot we're planning. With all that, like what you're describing nicely maps onto that. So I'm not seeing anything there that structurally impacts at a very low level a lot of our development plans where things look a little bit more on the logistical side, which is what's the kind of timeframe expected for this? How certain is this? I know you mentioned. This is before not even a proposal, just a thing kind of throwing out there and then, when we're looking at it, we're essentially like. My thing is, should we be targeting to just implement this, or we should have them on both, or should target the old thing, and then wait to see if this happens. And then, you know you already dressed this a little bit. What's the kind of thinking around interoperability costs, and you know some of the details of going there? -I think there's a secondary thing that would be in there. That is also we've done a lot of work on cost estimation. We're spinning up a lot of our internal pot resources to do even more elaborate work on there. If this is going to change the cost models that changes some of the quantitative research. We'd like them to be doing on existing transactions, and so more details on that would also be of interest to us. - I'll shut up now and let up people talk or try to get in the remaining 5 min. What's done? - Sorry for talking really fast there, but I was trying to cram a lot in the interest of time. - - -**Alexander Meißner:** Yeah, just too quickly to answer that. So as I said, timeframes are not clear at all. Well, the most optimistical one, is.to have at the end of the midterm something on testing it, but like really really minimum MVP with most of the features missing just to have some rough idea what this is gonna feel like.No documentation, no support whatsoever. Just for the raw code base, the skeleton of the code base essentially And for how committed are we on this? This is actually the spot out of another project. This is going on for 2 years now to reform the existing program runtime. and I think we have reached the limits on what's possible with our present day. Right? So this is all the things we have conducted in the last 2 years along with our ground architecture and how we want to reform it. -So,I think that there's definitely something coming in this sense, if it will be accepted. This thing which I just presented to you that is still up to the date and the other thing about firedancer, yes I’ll most likely expect you. We'll still have to implement our program runtime time because of this long migration period. So we're speaking here. I thought maybe something would be ready on mainnet in a year, and then another year of migration period. So if you only start implementing your program runtime in 2 years, and you might get away with not implementing. But if we want to be faster, then yeah. We would have to have that both. - -**Kevin Bowers:** Thank you. - -**Jacob Creech:** Okay. With 4 min left. As anybody wants to get into any other questions. - -**Philip Taffet: I** raise my instruction limit, request. ‘ - -**Jacob Creech:** Go ahead. - -**Philip Taffet**: So some of us talked about this in the discord. But we're interested in limiting the number of instructions in a transaction because, especially as a transaction size grows or as the maximum like MTU grows. Then you have this problem where someone could put like a 1000 instructions in one transaction, and they're useless instructions. But we don't want to support that because we don't think there's a compelling use case for it. - -**Alexander Meißner:** Yes, yes, this is already independently of this project, we have a feature for that thing already on the schedule. This will be limited to something like 50 or 60. - - **Philip Taffet:** Oh, even better. - -**Alexander Meißner:** Yeah. So we measured what the longest currently used transactions are on the system and it was something around 40. So we thought, yeah something slightly buffed up. - - -**Philip Taffet:** Okay, thanks. - -So this is a feature flag that has not been activated yet? - -**Alexander Meißner:** Yeah, that's already on the schedule. - -**Philip Taffet:** Oh, okay. - -**Alexander Meißner:** If you ping me on discord and in the virtual machine. So then I can send you the ticket application. - -**Philip Taffet:** Sorry, Which channel? - -**Alexander Meißner:** Virtual Machine - -**Philip Taffet:** Virtual machine? Got it! Thank you! - - -**Jacob Creech:** Okay. Is there any other questions on the runtime V 2 and apologies. Mango team. I don't think we're going to be able to get tier your SIMD. Okay, cool. - -So thank you all for coming to talk about this for the future agenda items. -What we're gonna do is we're gonna have it all on Github and I'm just gonna create a new issue for the next call, and if you want to propose a new item for the agenda, you can just leave it there. And then hopefully, we can get more information there as well as like documentation ahead of time, so that we can have a more productive conversation when we get to this call. - -I think we might have to make this call longer in the future depending on what the agenda items are or do it more often. I'll reach out to you all to decide on how we do that. -But yeah, thank you everyone for coming today. Bye!