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.