Beyond FEVM: Additional Runtimes & Native Actors #769
Replies: 8 comments 11 replies
-
I agree with everything except the phrasing of this:
I think we want strong confidence that these actors won't break the network and this phrasing implies we only need weak confidence. I think the FVM + lack of integration of these actors into the builtin actor system probably provides almost all of this strong confidence. A nice-to-have piece of tooling for this effort would be some kind of deterministic build. I don't think this is strictly necessary -- we can rely on trust instead. But it would be good to point to some public build process that can verify the link between a hash of readable code and the WASM module. This way the FIP process makes it easy to review the exact code that ends up in the contributed actors bundle and verify the exact compiler/other build tools used to make create the bundle. If we had this tool we could then use the same thing for changing builtin actors bundles during network upgrades. |
Beta Was this translation helpful? Give feedback.
-
Many people would like to deploy many native actors to Filecoin, if it were possible. I don't think whether or not one is a "runtime" is relevant. At a high level this proposal strikes me as a distraction from just doing the work necessary to support user actors. The existence of a process by which some people could get some subset of actors eventually deployed will remove much of the motivation to do the job properly, and I predict will push out the eventual deployment of that capability. The proposal adds more responsibility for governance-type things to core devs. They would become even more of a committee deciding who can do what on Filecoin, perceived as limiting innovation and/or picking favourites if their decision was to have any teeth. This is a very slippery slope. And given the low frequency of network upgrades, additional complexity introduced to upgrades, additional governance burden, and process burden on community developers, this proposal is unlikely to birth to any significant innovations. I don't think it's worth the tradeoffs. While I do not favour this proposal overall, the following would make it less objectionable:
If it's not to be a narrow picking of favourites, the other end of the spectrum boils down to an audit committee for user actors, specifically their interactions with the VM. But if "the core implementers won't make any guarantees", who will? We need the FVM to make those guarantees, and when it does everyone can deploy actors. |
Beta Was this translation helpful? Give feedback.
-
I'm fairly torn over this discussion, and not especially favourably disposed towards it. Restating what you said, it sounds like our primary motivations are:
Re: confidence, I'm only slightly persuaded by this. While this would be a somewhat lower bar than "the deep end", it still feels like any thorns could have fairly serious impact. I defer to you here, but it feels like we should be able to get that increased confidence through other (though likely slower) means. Re: timing, I'm more open to this argument, though I do think we need to have some process that determines what's "urgent" enough to warrant this special treatment. In this matter I disagree with @anorth fairly strongly, and would want to only include select actors that we agree has some compelling use-case. This is a somewhat tricky position to place the Core Devs in, but I would argue we are already in that position. We prioritize certain changes over others based on our perceived importance all the time, and this follows that pattern (until we get to full support for native actors). So overall, I'm weakly opposed to this, but will go along with it if we decide it's necessary. As for more concrete details of the proposal, I am concerned about the integration work being a bit more than expected, because we historically underestimate the work needed for face-level "simple" changes like this one. I'd also like to know more about the long-term strategy for these actors. Would we be eventually deprecating them and migrating them into "real" native actors? |
Beta Was this translation helpful? Give feedback.
-
Just to add a little background, belatedly. Fluence, the decentralized serverless compute protocol, is pushing toward minimal viable mainnet (MVM) on FVM for Q4/23. As part of the MVM milestone, Fluence intends to onboard several Filecoin miners to provide high-quality compute capacity to the Fluence peer-to-peer compute network. Aqua, Fluence's distributed, p2p choreography and composition engine, plays a critical part not only in the execution of deployed compute services but also in the validation, verification and reward distribution to capacity providers. Specifically, the Aqua Virtual Machine (Aqua VM), which is deployed to every Fluence compute peer to manage peer-based workflow execution, also plays an integral part on-chain in the aforementioned validation, verification and eventual reward distribution of (executed) compute jobs. As such, AVM, as a on-chain Wasm module, is an integral aspect fo the Fluence solution and currently implemented on Near as part of our testnet. As Fluence is actively looking toward migrating to FVM for a Q4 launch, it critical to begin testing as soon as possible against a feasible, well-known milestone (runtime) target. Hence, @Stebalien 's proposal closely reflects our, and possibly other projects', needs to prepare for successful FVM launches in the very near future and the Fluence community greatly appreciates your support. |
Beta Was this translation helpful? Give feedback.
-
Thanks for opening this discussion, @Stebalien. I do regard runtimes as a distinct class of actors (from an organizational perspective), in that they summon new developer ecosystems to Filecoin and have multiplicative effects on network activity by offering new deployment hosts for programs that were previously unable to run on the network. That impact alone makes introducing a runtime very different to introducing, say, a hypothetical new market implementation, or a reputation system as built-in actors. Granted, once we're at the end of the user-deployed Wasm actors roadmap, deploying new runtimes will be permissionless, that will make them fungible with other actors "classes" (technically speaking). But even in that situation, new runtimes are prone to require new syscalls and platform capabilities (e.g. crypto calls, randomness schemes, environmental data, addressing schemes). In other words, I predict these runtimes will be preceded a FIP or series of FIPs anyway to enable building blocks for the runtime. Those FIPs will clearly identify the introduction of the runtime as the change motivator. And this will summon community discussion around runtime fundamentals and its benefits/impact on Filecoin ("why should we do this work if it appears to only enable X runtime?"). In those discussions, the community will likely assess the utility, projections, priority, and in general the fitness of the Filecoin network to host the runtime and the eventual workloads deployed on it (gas, competition, explorer readiness, etc.) I imagine this event will act as a soft checkpoint to identify network risks (scalability, system message pricing, security, reputational, etc.), preempt projects that may be in the backburner (e.g. gas planes, crypto upgrades, etc.), and it will implicitly act as a gating event. Given all of this, I think @Stebalien is right in that we should start sharing ideas on how to approach thhe introduction of new runtimes sooner than later. And part of that discussion is how we can enable runtimes to be deployed ahead of time, in a more permissioned manner during a transition period, in order to keep the innovation cycle short, and to facilitate sandboxed testing. Some factors I'd consider to make the decision (specifically for AquaVM) -- leaving code audits and other more technical elements aside for a second:
|
Beta Was this translation helpful? Give feedback.
-
Note: @Stebalien and I discussed adding an experimental Wasm interpreter runtime as a built-in actor. Precedents already exist for built-in runtimes (EVM runtime). This would enable devs to permissionlessly deploy Wasm actors albeit in a virtualized environment (i.e. not "native"), which should be sufficient to unblock experimental use cases. @Stebalien plans to follow-up with a discussion. |
Beta Was this translation helpful? Give feedback.
-
@Stebalien We had chatted a bit about this stuff in Lisbon last year, but I just wanted to pipe up and say that IPVM is still interested in integrating :) We're pretty sure that we don't need anything special deployed in order to make this work, but our team is interested in looking at the netlayer & calling convention APIs to see if we can reuse each other's work! It also may be interesting to explore an efficient UCAN actor to help bridge systems like web3storage directly to/from Filecoin. We had played with this in Cosmos at one stage, and mainly it could be more fuel-efficient than implementing it in e.g. EVM bytecode. |
Beta Was this translation helpful? Give feedback.
-
@Stebalien @raulk et al. |
Beta Was this translation helpful? Give feedback.
-
Proposal: Design a light-weight process where users/contributors can propose and deploy WASM smart contracts via network upgrades.
FEVM (EVM on FVM) added one runtime to the Filecoin network, but the goal is to support multiple runtimes allowing users to port existing ecosystems to the Filecoin network.
For example, Fluence would like to deploy AquaVM to bring decentralized compute to the Filecoin network. However, the AquaVM is written in rust and can't easily (or reasonably) be ported to the EVM (it's VM for AIR script and running a VM inside the EVM inside the FVM is just a bit too much).
Ideally, users would be able to directly deploy new runtimes and other WASM actors to the Filecoin network (along with custom addressing schemes, custom account types, new VMs, etc.). Unfortunately, we're not quite there yet. Allowing arbitrary user-deployed WASM actors requires:
The FVM devs are hard at work on that first step: hardening & polishing. However, the last three steps will take some time.
This leaves us with two problems:
Which brings us back to the proposal at hand. The FVM team would like a light-weight process where:
Such smart contracts would not (IMO) live in the "builtin actors" repo but would live in a separate "contributed actors" repo. I'd expect that the multisig and payment channel actors would, at a minimum, be moved to this separate repo as well (the EVM to follow but that'll take a bit longer).
This is effectively a "soft launch". It allows us to test and harden the FVM ASAP without jumping directly into the deep end.
Beta Was this translation helpful? Give feedback.
All reactions