Coin Brief ENDE

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);
}
Agave setzt SIMD-0582 um: Transaktionen über dem Limit scheitern beim ersten überzähligen CPI
Agave setzt SIMD-0582 um: Transaktionen über dem Limit scheitern beim ersten überzähligen CPI — Coin Brief

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.