New Ethereum talks, every Monday. The week's conference uploads by event, in your inbox.

Loading player…

IPFS & Filecoin 🛠 Store data on Filecoin with EVM smart contracts on FVM

ETHGlobalMon, Oct 9, 2023, 12:00 AM

Join Sarah Thiam from IPFS & Filecoin for a workshop titled "Store data on Filecoin with EVM smart contracts on FVM". Thank you to everyone who joined our first in-person appearance in 2023! We are incredibly grateful for the support and contributions of all the hackers, tech mentors, judges, partners, and volunteers who made the ETHGlobal Tokyo event such a huge success. Without your dedication and expertise, this event would not have been possible. We would also like to extend a special thank you to the attendees who traveled from over 59 countries to participate in the event. Your presence and involvement made it a truly international weekend, and we are thrilled to have had such a diverse group of participants. With over 1070 hackers it was a pleasure walking into Toranomon Hills and seeing such a talented pool of individuals. With over 22 workshops, 9 talks, and over $375,000 USD in prizes we hope you enjoyed the weekend full of hacking, meeting all our incredible partners and learning from enthusiasts of the space. We are proud to have welcomed over 35% of attendees who were new to Web3. We hope this event sparked your interest in the world of blockchain and provided you with valuable insights and knowledge. We cannot express enough gratitude to everyone who contributed to the success of ETHGlobal Tokyo. We are already looking forward to the next event and hope to see you all there! 🎉🚀 ----------------- Follow us: https://twitter.com/ETHGlobal​ Check us out: https://ethglobal.co​m Email us at: hello@ethglobal.com

Transcript

Class. Greetings. Nice to meet you all. I was that person...Sorry, this is...

Hello. Yes, I was that person sitting on the floor outside. So, it's nice to see you all here. My name is Sarah. It's nice to meet you if we haven't met at the stand yet.

I lead the Filecoin Virtual Machine development effort within Protocol Labs, and I'm here to talk about the Filecoin Virtual Machine and how it can help you with software storage for your smart contracts. So, let's begin. Class. Before we begin, raise your hands: how many of you are familiar with Filecoin? Okay, great.

Who is familiar with IPFS? What about the Filecoin virtual machine? Okay, I guess I'm here for a reason. Perfectly. And one last question, because I'm always curious to know.

How many of you don't quite understand the difference between IPFS and Filecoin? Someone? Is everything completely clear to everyone? Class. OK.

I'll keep this short because I joined Protocol Labs myself, and it took me about 2 months to understand months to understand that IPFS and Filecoin are not the same thing . So if anyone thinks so, I'll definitely help you figure it out figure it out so it's easier for you to work on your projects. Class. Oh yeah, and if you're interested in watching me and my colleague chat, experiment, and write code live every Thursday. You can follow us on Twitch.

We try different integrations, sometimes we fail, sometimes we succeed, but if you want to see the real chaos, you can join. Class. So, I started outlining the context for Filecoin's master plan. If you're wondering what a Filecoin virtual machine is, and it seems like some of you aren't familiar with it yet, that's okay, because we've been around for about 7 years. When we started, it was a decentralized network.

This is the essence of Filecoin itself. So the difference between Filecoin and IPFS is that Juan Benet, our CEO CEO , founded IPFS at the very beginning, and it was a peer-to-peer network. This means that when you store data, you don't pay anyone. But it also means that your data may disappear over time if your node is not supported. So, we decided to create the Filecoin network, which is a blockchain, whereas IPFS is not a blockchain, where you can store data and incentivize storage providers to hold your data for as long as you need.

Here's what Filecoin is and how it differs from IPFS. These two tools are often used together. We typically store data in Filecoin and then pin it to IPFS for faster retrieval, unlike the Filecoin network where you would need to cryptographically decrypt your data, which takes time and requires a lot of power, although this can be done when you want to get the entire dataset back , but we recommend using IPFS for faster access. Here's how they work together. Then we moved to the second phase, where we started to pull in a lot of data beyond what was already within the guaranteed capacity of the Filecoin network.

I think we have about 30 exabytes today, which is a lot of data. Someone came up to the booth and asked me how much data would it take to crash the Filecoin network? The answer was: there are n't enough of them. Honestly, it's quite difficult to "put" it, we have a lot of free space now, so you can always upload data there. And now we're at the third stage, where we thought: we have a lot of data, how can we replicate what Web2 has, for example, AWS - a Web2 has, for example, AWS - a server where you have data on which calculations are performed, and you can use it as a full-fledged server.

This is exactly what we want to implement with the Filecoin Virtual Machine. I'll talk a little bit about how we can enable you to write logic directly around storage. What does this refer to? VPS? Not exactly a VPS, yes.

When it's private, yes. Is that open enough? Yes. Class. So, I clarified that a little bit earlier.

And to be clear, FVM is the first level. And the second level is where you all are now at the hackathon. I know you only have 2 days. We've been to hackathons ourselves. We saw a lot and were mentors.

I know it's a rush. So, I want to get right down to business and give you a demonstration so you can see what you can use in the next few hours and tomorrow. So the second level is where many solutions and projects will be built. Essentially, with FVM you will... you will create your own smart contracts.

So, we're completely...Excuse me, let me take a step back. What FVM fundamentally allows you to do, without first mentioning Ethereum compatibility Ethereum compatibility , is to write logic around data stored on the network. Every piece of data stored is part of a storage agreement. And each such agreement has certain metadata.

They report the size of the files, how long they are stored, etc. FVM performs calculations based on this metadata. So this allows you to move your data without having to open the entire file, saving you time and money. It should be cheap enough that you can move your data freely. So that's fundamentally what she does, right she does, right ?

So now, are we here today...here it is—FVM on top of a Filecoin node. Every single node on the Filecoin network can run an FVM instance. You can also run multiple instances on a single node. And in addition , we have two or three classes of actors that work on top of FVM.

We have the first class— We have the first class— built-in actors, and think of these actors as smart contracts. They are built into the Filecoin network. You cannot change them. These are system actors that we created for your interaction with the protocol. And then there's the second class—the user-defined WASM actors, which we consider native to FVM.

We are running WASM- FVM. We are running WASM- time "under the hood". This will allow you to use different frameworks that you are more familiar with, such as Go, WebAssembly, etc. Sorry, Assembly Script. So, we have these SDKs too.

But for the Ethereum community, because it's a very large community, we should be able to provide tools for them as well tools for them as well . That's why we created external runtimes. We also built the system to be agnostic to virtual machines. So today we are EVM compatible. In the future, we will have an infrastructure that will allow us to be compatible with other virtual machines.

So Solana machines. So Solana is what we're looking at next. We need to work on our story with Polygon a little better. I'll answer any questions about Polygon later. But yes, as of today we are fully compatible with Ethereum.

So any tools you are familiar with, like you are familiar with, like Hardhat, Foundry, Truffle, can be used with EVM and FEVM. And in fact, you won't see the FEVM itself. Most of this happens on the backend. All you will see is your Solidity see is your Solidity code and your contracts, you just need to understand how our contracts work and how to import them into your kit. Yes, it's pretty easy to use.

The clear definition here is that ultimately you will be deploying on the Filecoin network, not the Ethereum network or, for example, the Polygon network, which I know is a choice for some of you , but I just want to make it clear that you will be deploying on the Filecoin network if you choose to use FEVM. Yes, this may change in the future and we hope to provide more interoperability, but for now, this will be the Filecoin network. Class. So, we'll jump right into how to use FEVM in your project. There are two main ways that I think you can use within today's hackathon.

So, the first way is a client contract client contract . The client contract is the Solidity contract is the Solidity contract that we wrote. It essentially wrote. It essentially allows you to programmatically store data on the Filecoin network using Solidity. So I'll do a demo and show you how to use it.

These are some of the tools we use: Hardhat, MetaMask, the Hyperspace testnet, which is our own testnet. This is a stable test network, and it mimics our main network. So, if you used it there and everything works, then it should work fine on the main network as well. We have a custom- built filecoin.sol library from our partner Zondax.

It allows you to use Solidity methods to interact with the Filecoin protocol. The setups you will need if you want to develop further: NPM, Node.js, Hardhat, and the new component here, I think, is connecting your wallet to the Hyperspace testnet and getting test FILs to use in your project. So, yeah, we'll walk through the demo. In the demo, I will show you how to connect your wallet.

It's very simple. We'll get some money out of the tap. And then we will deploy the contract. After that, we will prepare the data, and for those of you who are new to the Filecoin network new to the Filecoin network : any piece of data that is uploaded must be converted to a new format called a car-file. This is essentially a DAG, and this will be a new type of format that you need to use to load this piece of data.

I can explain more details during the demo, but if you're using this as part of a hackathon, you don't necessarily need to go into it, I'll take you step by step. Um, and then we'll send a proposal for a storage agreement, and then we'll check the transaction in the block explorer to make sure it's been deployed. Class been deployed. Class . So, we'll move on to the demonstration itself.

So, I'll just use a regular terminal here. I hope everyone is happy with this. There is a very simple guide that will walk you through it. Wait. So, if you came to our stand, there is a QR our stand, there is a QR code there.

It leads to a cheat sheet for the hackathon, and in the cheat sheet itself you will find a link to our Hardhat starter kit. This is the ultimate starter kit that will help you all get started on whatever you need to create. I'll show you, and once you get into the Hardhat starter kit , it's actually pretty easy to get started. We have most of the steps there. He is very easy to follow.

So, yes. I'll just show it to you first, then we'll walk through it, and we'll try it in the terminal. So, this is the Hardhat set. It quickly shows you step-by-step how to clone it, get what you need, and then save your private key. I will use a test private key.

If you steal my private key, you'll just get a bunch of test FILs, which is perfectly fine. But don't do that because I need it for the demo. And then we'll test this to show how you can get your address, and I'll talk a little bit about what the address means when you look at it as a 0x address versus a Filecoin address, and how we actually have an address manager that helps convert that. And then we'll deploy the underlying transaction client contract itself. I can talk a little more about these examples, but the rest of the contracts in the repository are more examples than anything else.

Just to prove that you can create an ERC-20 token and so on. Um, and then we'll interact with the contract and deploy the dummy JPEG. And then we'll see how the proposal is accepted. And let's check if this transaction went through . Okay, and before we move on to the terminal itself, I'll show you how to connect a wallet.

So, where is my browser? Steeply. Okay, so just go to chainlist.org. Um, find, enable, um, make sure you look for test networks.

Enter Hyperspace networks. Enter Hyperspace . I already connected my wallet, but then it Yes, here it is. So, it should appear here, and if you click on MetaMask, it will connect to your MetaMask. So once you get it connected, I'll let you all take a picture here all take a picture here .

Once you have it connected, you can move on to the faucet move on to the faucet . And all of these resources, again, are in the hackathon cheat sheet, the QR hackathon cheat sheet, the QR code for which I will provide later, and you can always go to the booth and get the QR code if you didn't have time to do so didn't have time to do so . Steeply. So all you have to do is see, as I mentioned, all you see is your Ethereum tools. You simply copy your MetaMask address.

This is a 0x address, not a Filecoin address. And you will answer a very complex set of questions here. You know, honestly, these captchas are getting more and more difficult. Um, okay, honestly, it's okay. They just want to make demonstrations difficult for all of us.

Wait, this, wait, what is this? Is this a camera? No, okay. Sorry. We can deploy contracts deploy contracts .

I can't answer. Oh, there they are. They are all black and white. Good, good, good, good. It's okay .

Okay, cool. Teamwork, teamwork. We managed. Um, and then you send. And it usually takes 30 seconds to a minute.

The reason is that our Hyperspace test network, which mimics our main network, operates in these things called epochs. And so each separate epoch is about 30 seconds for a new block to appear. So, this is usually the waiting time you will need. I would say, give or take another 30 seconds. So we usually wait up to a minute.

But, of course, I already have some test fills. Just so you have the right expectations. So, yes, every time you hit hit submit, you'll get about five test fills. If you want to run a miner and need a lot of test fills, you can always write to me on Slack and we will provide you with a whole bunch of them. So that you don't have to constantly answer these questions to get test fills.

Class. This will help you set up your wallet. After that, we can immediately go to the terminal to perform the deployment. So, you are here. You can very easily just clone the entire repository.

Yes, I did it pretty quickly. And then, as I said, you export your private key. Please, please, please don't use your real private key or, you know, don't do the deployment if it's your real key. Here I have copied my private key. But again, I already said that this is not a real account, so there is nothing for you there if you want to hack it.

Okay, now my private key is there private key is there . So let's protest. Let's see if we get our address. So, yarn hardhat get address. Class.

So, we have my address here, and it will be the same address that you saw in your MetaMask account. But here you also see the address F4. What this really means: We are compatible with Ethereum and we want you to see an ORX address, but the Filecoin network has an address manager that converts it to an F4 address. So if you see an F4 address and an ORX address, they are the same thing. In many of our tools, we have made sure that you can enter your ORX address or F4 address ORX address or F4 address and you will get the reverse version.

So using this should be pretty easy should be pretty easy . Don't get confused, whichever address you prefer to work with— prefer to work with— just use it. Class. Now we have verified that the address is in place. We are going to deploy all the contracts that are here.

As I mentioned earlier, we have several test contracts there. So if you go to the contracts folder, there are some examples there for you. We have basic examples on Solidity—just a regular coin so you can see for yourself that you can create an ERC-20. There is a quickstart on our documentation page that will show you how to create an ERC-20 token in Remix. Um, so it's very easy to use .

Um, you can just follow the instructions here. I won't go through with this . Um, but yes. Then you can run, uh, you can create your tokens. So, if you, if you want to create it as part of your project, you can do that too.

Hmm, what did I stop at? Exactly. And another one that, uh, I think is pretty interesting—this is the deal here interesting—this is the deal here , Filecoin API examples. Um, I have one example here. So, if you want to see how to import the Filecoin Solidity library, you can just use this contract or just check if it works, but to be honest, it works, but to be honest, it doesn't do much.

Uh it doesn't do much. Uh , we also have a transaction reward contract, which is an off-chain version of a client contract, which is the main recommended way to store data. So this reward- for-deal contract is actually the original way we thought we could store data. Uh, what we do is we put money in, we put a reward in escrow, and then we incentivize a bounty hunter to come and collect your data, and then do the normal, more manual method of running a node and offering it to a storage provider on the network, get a transaction ID for you, and give it back to you, and then unlock the reward within the smart contract. It's a bit of a roundabout way, this was the initial way, but we see that it works for certain use cases.

For example, if you have a designated storage provider that you want to work with, or you have a DAO and you want to designate one person to be responsible for ensuring that these storage agreements are fulfilled, you can also use this method, although it is obviously not the fastest way, but it is an option for you. Um, so it will be there. And now I will demonstrate the transaction client. So, this is a client contract agreement. Um, this, this will allow you to essentially, um, take essentially, um, take any JPEG or any piece of data from your, wherever your dapp is getting the data from, and then it can, uh, take over the whole deal proposal process for you and give you back a deal ID back a deal ID .

Uh, all of this should be done within 15 minutes to half an hour, and you should get your deal ID back. Um your deal ID back. Um , again, because it's decentralized, we work with a network of storage providers who choose when to accept requests. So the speed of adoption is up to them, but we have incentives for them to do it much faster on the mainnet. However, on the test network, everything happens very quickly, in about 5-10 minutes, because there are fictitious miners there who accept transactions without questions.

Yes. If you want to run a local network, yes, I have a few options for that. I can show you how to do it. If you run it locally, you are essentially running your own miner, your own node, and working in your own environment. So yes, it will be much faster because you can just accept your deal yourself.

But for a hackathon, you can run it on a local network. Yes local network. Yes , you can do that , you can do that if you want. Yes. We have a Docker image that we created just two days ago that allows us to run the workload.

This is actually in the cheat sheet. You can run the Lotus image in the miner yourself. Yes. So it should be pretty simple for you. Before moving on to the transaction client, I will briefly explain what exactly is happening.

First, we will prepare the data. I have some prepared dummy data here. Again, all of these resources are in the cheat sheet resources are in the cheat sheet , but we usually go into the data warehouse first, as I mentioned in my walkthrough. We are going to prepare the data. While the data is being prepared, I will spend about a minute deploying all the contracts.

So I'll just type yarn hardhat deploy. This will deploy all the different contracts, so let it run in the background. In the meantime, we'll prepare this. Let's say you want to upload a new file, it's actually very easy. You can just go here to go here to any of the files I have.

Ahem. Class. Yes, we 'll just use the FM logo. If you click here and paste this right here, I think it's because I uploaded it before. Okay, I guess I'll upload my own photo.

Yes. So, yes. I actually...Oh, it's already loaded. So now I have three files downloaded.

And for every file that I have here , there's actually a very user-friendly interface for you. And they will be more useful, you will see why you need all these fields later. These various fields are the parameters you need to include in your deal proposal to then submit it to the network for acceptance by storage providers. So we make it much easier for you. Usually we have a CLI.

You can also use the CLI method if you prefer CLI method if you prefer . It's just easier for me to read and explain. Yes. So you have a file ID, a file name, usually there's a PCI ID, I think it's still being calculated, so I'll just use the one that already exists. Yes, you have a PCI ID, payload CID.

These are all the fields you need to enter, and we have a very easy way to see exactly what you need to add. So we wrote this here, and if I copy this and add it to a file, how do I make it bigger? Oh my God. Cool bigger? Oh my God.

Cool . So, yes, this is the template we have for you. So all the fields you saw before, you can just type in based on what you have. For example, the contract address that you deployed, which is currently deploying in the background, and I'll add it in a second. And then you have the PCID, the chunk size, the start and end epochs, as I mentioned, the epochs—they're like blocks that work.

Tip: I would recommend setting the epoch to about 5000 epochs ahead of the current one, and you can check the current epoch based on our block explorer. So block explorer. So , we have a very good block explorer here called Filfox block explorer here called Filfox . We have a total of about seven block explorers that support FVM. Filfox is support FVM.

Filfox is one of them, and also one of the most used. So you can always go here and check it out. Make sure you are on the Hyperspace network and not the main network so you are looking at the correct era. And then you can see at what height of the block you are. I would advise that your starting and ending epochs are about 5000 ahead.

So I usually put something like 258971, and then my final epoch would be another 5000 more, which would be...sorry, I'm not very good at math, but 270, right? Approximately so. So you enter this epoch because if you enter it too early, you'll miss the time when the deal is actually being made, you'll miss the epoch, and your deal proposal won't go through. If you specify it too late, you will simply wait forever for the epoch to come and your deal proposal to go through.

So this is most recommended. 30 seconds. Yes. So, let's check if our contracts are deployed. Okay, we've reached the last one, which is great.

This will be the transaction client. So once it's deployed, I'll get the contract address, and then I can enter it into the template that I just showed you, and that will be the hardhat task that we want to run in the terminal. So, once I have the contract address, I'll enter it there. I'll enter all the other fields from the JPEG all the other fields from the JPEG file I downloaded, and then I can copy and paste the entire hardhat task here into my terminal and run it, and once I do that, the deal proposal should go through successfully. And we're not going to wait here because then that would be the end of my talk, but it will take about 15 minutes for your deal ID to come through, and I'll show you how you can use the block explorer to then find your deal ID based on the offer that you submitted.

Okay, cool. Um, it's deployed now. So, as I mentioned, I'll take it. Okay, so I have one that I filled out earlier. Um, I'll just increase the font size.

Steeply. So, I'm going to change this contract address here, and I've already filled out all the other fields, which, you know, would take some time, so I prepared this in advance. So I have all the hardhat tasks here, and I go back to my terminal, and I just need to paste this in here. And he creates a deal proposal. Last time I did this, it took, I think, about 30 seconds.

30 to 40. But while we wait, I'll show you how you can check if your contract has been deployed. So you can always grab all the contract addresses that have been deployed here. So, I'll just copy the transaction client. And I'll just search in the block explorer.

And yes, you should see almost instantly that your transaction has been successfully submitted to the network. Yes. And if you do indeed do this on the mainnet, we strongly recommend verifying verifying any contract you deploy. It is very important to verify there. And I think Phil Folks and another lead, Barracks, have now implemented contract verifiers as part of their block explorer.

So it should be pretty simple for you. Class. So, while we wait, I'll briefly talk about the next option. I know time is almost up, but I just want to mention one more thing. So, keep in mind that if you use this method, you will likely have to import the entire transaction client into your stack and run it as part of your dapp.

If you don't want to deal with all of this and just want to use a storage assistant that takes care of preparing offers, filling in data, etc., you can choose Lighthouse. Lighthouse is choose Lighthouse. Lighthouse is one of our partners, and they have created a data storage assistant based on FVM. A cool feature of Lighthouse is that they also provide an additional access control option.

They have a very easy to use SDK that also provides encryption for the data you want to send. So, depending on the project you are building, if you need access control, you can use the Lighthouse repository. This is also in the reference table, so it will be easy for you to click on the link. OK. So, even if the offer IDs are currently "flying" somewhere in hyperspace, you can check if your deal ID has appeared by going back to the block explorer.

You need to go to the list of deals. This solution, I admit, is not the most intuitive, but for now it is a temporary option and it works. You only need to enter your address. And constantly check constantly check —I submitted the deal myself earlier—to see if your deal ID has already appeared. I usually refresh the page after about 15 minutes to see if my transaction ID has appeared at my address, and then I can use it as part of my data.

Yes, again , this is not the most intuitive intuitive . We are currently working on improving the workflow and the ability to automatically notify the client as soon as your deal ID is available, but this is not yet available. Okay, that was the gist of the demo. I have very little time left. I will try to simply tell you how you can use FVM.

If you're thinking: that sounds cool, I'm in . What can I do with FVM and storage do with FVM and storage ? We have a very long list of ideas on rfs.fvm.dev.

You can view them. These are all FVM-based all FVM-based , storage-centric solutions that you can build. Also, let me remind you once again, we have a prize of $10,000. There are several key categories here. Programmable storage market, i.

e. anything that will improve the data economy. In this case, we're talking about Filecoin, so if you're thinking about perpetual storage, that's very interesting to us. So, how do you make storage agreements continually renew? And if there are problems with them, automatically fix them on the backend.

Very interested in this. Um, data-DAO—this is a really cool topic that isn't limited to Filecoin, but we think it can be used much more broadly. Um, do you know what a DAO is? Um, now think about data-DAO. So, if you have a very important dataset around which you want to assemble a DAO, for example for decentralized science, we see a lot of interesting projects already being built on FVM.

So I'm just going to show you one because I thought it was really cool. Um, but yeah, this Pyro team, they actually built a decentralized science app on FVM. This is essentially a data DAO where everyone uploads their scientific papers and the DAO helps them, DAO members are motivated to help review these papers and then publish their feedback on the DAO. Everything, both the reviews and the works themselves, are stored on Filecoin. Um, so I'm just throwing out a few ideas.

Um, and computing on top of the data—that's also a very important part. Um, FVM can be used to orchestrate all these tasks for off-chain tasks for off-chain computing. Um, we have a very efficient and good framework for computing on top of data called Bacalhau data called Bacalhau . Um, my colleague Iryna, she's at the stand now. Um, she's over there.

Come and meet her. Um, but yeah, talk to her if you want to learn how to use FVM and compute on top of data. The cool thing is that with decentralized science, you can take large datasets, perform calculations off- chain, and then return the result to your dapp. So, we want to see more of this . And finally, infrastructure and tools.

So if you want to create cool tools that help, if you want to figure out how to automatically send the deal ID to the client and fix my demo, I would be very grateful. I will award you a prize if you can do it. But yes, there are other ideas for tools. We also have a "wildcard" category We also have a "wildcard" category , so surprise us with anything , so surprise us with anything interesting you can think of. Finally, I want to mention that if you plan to continue developing after the hackathon, we have many integrations that were launched last month that are compatible with FVM.

We have configuration containers, cross- chain messaging and token bridges, oracles with Tellor, and the access control I mentioned earlier with Lighthouse and Medusa earlier with Lighthouse and Medusa . We have a DeFi solution for liquid staking, and SushiSwap will soon be launching as a DEX. We also have network analytics APIs if you want to use them in your project, decentralized computing, and all of these resources can be found in the hackathon cheat sheet. They are available not only on the mainnet, but also in Hyperspace, and I have listed the contract addresses in the cheat sheet. So if you want to use them, just go there and use them.

I just want you to know that there are many other integrations that you can build your project on. As a judge, along with other colleagues, we pay attention to such things. We are looking at saving files using the FVM client contract we just showed, or saving through helpers like Lighthouse. It could be one thing or another. We also check whether your project is deployed on the Hyperspace test network.

We want to make sure that you are effectively using storage, or at least leveraging it in development, rather than simply deploying a contract without storage components unrelated to FVM or Filecoin on the Hyperspace testnet. I want to warn you not to waste your time deploying in Hyperspace, because that's what we're focusing on. And also any innovative and creative use of storage use of storage . Yes. You can use a QR code.

This is also on the stand. There's a hackathon cheat sheet, our docs, the FVM.dev RFS, and upcoming hackathons and grants that you have access to. So, yeah, that was a lot. Um, I'm ready to answer questions, but I don't want to delay the next report.

So thank you all.

Automatic transcript — names and jargon may be misspelled.