This repository was archived by the owner on Jan 22, 2025. It is now read-only.
This repository was archived by the owner on Jan 22, 2025. It is now read-only.
LoadedPrograms
#29803Closed as not planned
Description
Develop and Implement LoadedPrograms
, replacement for the executor cache
- One global loaded programs cache per validator with two index levels: Program address and effective slot
- One local loaded programs cache per transaction batch
- Each entry has a deployment slot (making this a bitemporal model)
- And an effective slot, which does not refer to a specific block but all future blocks beyond that slot, which are descendants of the deployment slot
- Entries can hold the following types of programs:
- LegacyV0: Programs of the legacy loader(-v1) or loader(-v2)
- LegacyV1: Programs of the upgradeable loader(-v3)
- Typed: Programs of loader-v4
- Built-in
- Tombstone: To remember that a program failed verification or was closed
- Unloaded: To remember that a program was verified before and what usage statistics it had
- Loading: To coordinate cooperative loading across transaction batches
- Recompilation phase before RBPF-affecting features activate to amortize workload on epoch boundary
- Delay visibility: Avoids pipeline stalls as the very next instruction in a transaction could depend on a redeployment
- Redeployment cool down: Prevents multiple (un-/re-)deployments of the same program in a slot
- Usage statistics: Kept in atomic counters in the program which itself lives in an
Arc
- Simplify the transaction loader to deduplicate all accounts and not keep duplicate program accounts
- Does not care about the dependency graph in between programs, all transitive dependencies need to be specified in a message
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Done