SIMD-0196: migrate stake to core bpf
simd: '0196' title: Migrate Stake to Core BPF authors: - Hanako Mumei category: Standard type: Core status: Implemented created: 2024-11-14 feature: 6M4oQ6eXneVhtLoiAr4yRYQY43eVLjrKbiDZDJc892yk (https://github.com/anza-xyz/feature-gate-tracker/issues/73)
Summary
Migrate the Stake program to Core BPF.
Motivation
BPF programs offer less complexity than native programs for other clients, such as Firedancer, since developers will no longer have to keep up with program changes in their runtime implementations. Instead, the program can just be updated once.
In this spirit, the Stake program should be migrated to Core BPF.
Alternatives Considered
The Stake program could instead remain a builtin program. This would mean each validator client implementation would have to build and maintain this program alongside their runtime, including any future changes.
New Terminology
N/A.
Detailed Design
The Stake program will be reimplemented in order to be compiled to BPF and executed by the BPF loader.
The reimplemented program's ABI will exactly match that of the original.
The reimplemented program's functionality will exactly match that of the original, differing only in compute usage. Instead it will have dynamic compute usage based on the VM's compute unit meter.
The program will be migrated to Core BPF using the procedure outlined in SIMD 0088.
The program will have no upgrade authority. If changes are required, for essential network operations, the program will be updated using feature-gates.
Impact
Validator client teams are no longer required to implement and maintain the Stake program within their runtime.
All validator client teams can work to maintain the single Stake program together.
Security Considerations
The program's reimplementation poses no new security considerations compared to the original builtin version.
The greatest security concern is a mistake in the reimplementation.
Backwards Compatibility
The Core BPF implementation is 100% backwards compatible with the original builtin implementation.