Agave setzt SIMD-0582 um: Transaktionen über dem Limit scheitern beim ersten überzähligen CPI
Anza hat am 6. Oktober den Pull Request #15664, „Implement SIMD-582“, in den Validator Agave eingegliedert. Er fügt ein Feature-Gate, eine neue Prüfung in TransactionContext::push und einen Test hinzu.
Die Regel bisher. Eine Solana-Transaktion darf höchstens 64 Instruktionen ausführen, Top-Level-Instruktionen und Cross-Program-Invocations (CPIs) zusammengezählt. Die Runtime prüft die Zahl derzeit während der Ausführung. Die SIMD nennt ein Beispiel: Macht in einer Transaktion mit 64 Top-Level-Instruktionen die erste einen CPI, laufen trotzdem 62 der übrigen 63 Instruktionen, bevor das Limit greift.
Die neue Regel. SIMD-0582, „Early detection of instruction trace overflow“, zählt beim Ablegen jedes Frames alle Top-Level-Instruktionen, ausgeführt oder nicht, plus die bisher ausgeführten CPIs:
if number_of_top_level_instructions_in_tx + number_of_cpis > 64 {
return Err(InstructionError::MaxInstructionTraceLengthExceeded);
}

MaxInstructionTraceLengthExceeded tritt damit beim ersten überzähligen CPI auf.
Warum. Die SIMD nennt zwei Gründe. Vorrangig sollen Transaktionen, die ohnehin scheitern, früher scheitern und Blockplatz für korrekte freigeben. Zweitens ABIv2 (SIMD-0177): Dessen Speicherlayout legt alle Top-Level-Instruktionen in vordefinierten Adressbereichen für genau 64 Instruktionen ab; ein CPI in einer Transaktion mit 64 Top-Level-Instruktionen würde einen bereits anderweitig reservierten Bereich überschreiben.
Was gleich bleibt. Compute Units für den CPI-Eintritt sowie für Konten und Daten der Instruktion werden auch beim Fehler berechnet. Die SIMD legt außerdem die Reihenfolge der Fehler beim Ablegen fest; die Längenprüfung steht an vierter Stelle, nach den Prüfungen auf nicht unterstützte Programm-ID, Reentrancy und unausgeglichene Instruktion.
Das Eingliedern bringt Code und Feature-Gate; die Regel ist damit noch auf keinem Cluster aktiviert.