Eine Program-Derived Address ist eine Solana-Adresse, die abseits der Ed25519-Kurve liegt — es existiert also kein zugehöriger privater Schlüssel. PDAs entstehen, indem eine Program-ID zusammen mit einer Liste von Seeds und einem Ein-Byte-Bump gehasht wird, bis das Ergebnis off-curve fällt. Da nur das besitzende Programm Transaktionen für eine PDA via invoke_signed autorisieren kann, sind PDAs der Standardweg, mit dem ein Programm Zustand verwaltet und Assets verwahrt, ohne dafür einen externen Schlüssel anvertrauen zu müssen.
SolMask verwendet pro Pool fünf PDAs: pool (das Programm-Zustandskonto mit der Konfiguration), vault (das SPL-Token-Konto, das die Deposits verwahrt), fee_vault (der Akkumulator für die Protokollgebühr), merkle_frontier (die Einfügeseite des Merkle-Baums samt Blattzähler) und root_history (der Ringpuffer der jüngsten gültigen Wurzeln).
PDAs sind deterministisch: Mit Program-ID und Seeds berechnet jeder Client dieselbe Adresse. So einigen sich Relayer, Indexer und Wallet ohne Out-of-Band-Konfiguration darauf, welches Konto den Pool-Zustand hält.