where cryptographic guarantees become language primitives
Styx is Covenant's native runtime, not a dependency. Four named layers — each responsible for a distinct class of cryptographic guarantee. The compiler verifies that compositions across layers are sound.
CRYSTALS-Kyber-1024 + Dilithium-5. Identity substrate for all layers.
NIST PQC · ERC-8231TFHE via tfhe-rs. Operate on encrypted data without decrypting.
FHE BLIND · ERC-8227Nova IVC folding + Halo2 SNARK. Selective state disclosure.
ZK RECURSIVE · ERC-8229Shamir SSS + Wesolowski VDF + ZK destruction proofs.
AMNESIA · ERC-8228The integration between these four layers is where the most dangerous bugs live in existing systems. Covenant's type system makes such bugs inexpressible. Read the full architecture →
Before V0.7 GA shipped, the compiler and runtime underwent a complete OMEGA V4 security audit — 41 findings across all severity levels. Every finding is resolved. The audit report and full writeup are public.
A private vote function — FHE computation, post-quantum identity, cryptographic amnesia on exit. In Solidity, this requires ~220 lines of integration glue and compiler-invisible contracts between libraries. In Covenant, the type system enforces every invariant.
// integration glue (~220 lines above) function processPrivateVote( bytes calldata ciphertext, bytes calldata pqSignature, bytes calldata zkProof, bytes calldata publicInputs ) external { // manual key identity check require( IFHE(fheLib).verifyKey(pqSignature, voterRegistry[msg.sender]), "key mismatch"); // not enforced require( IZKVerifier(zkLib).verify( zkProof, publicInputs), "proof invalid"); uint256 vote = IFHE(fheLib).decrypt( voterKey, ciphertext); // assumed _tally(vote); // destroy — ordering unenforced IForget(amnesiaLib).destroy(ciphertext); IForget(amnesiaLib).destroy(pqSignature); }
// key identity enforced by type system fn process_private_vote( vote: fhe<u256>, voter: identity<pq> ) -> amnesia { // @non_reentrant auto-injected // privacy flow verified // compiled to 2,847 bytes let cleartext = decrypt( vote, voter.key); // key — enforced self.tally(cleartext); } // amnesia auto-triggered on exit
22 lines, 4 libraries, 0 compiler checks. Key identity, proof validity, and destruction ordering are all convention — invisible to the compiler. One misordered call, one wrong key reference: a silent bug in production.
6 lines, 1 language, full compiler coverage. The identity<pq> type carries the key. amnesia return type enforces destruction. None of this can be skipped.
Covenant V0.6 GA ships a full toolchain: compiler, CLI, LSP, and VS Code extension. One command to start.
# one command
cargo install covenant-cli
# install cargo install covenant-cli # verify covenant --version # Covenant V0.6.0 (OMEGA V4 audited)
# marketplace kairos-lab.covenant-lang # or via CLI code --install-extension \ kairos-lab.covenant-lang
Inline diagnostics in action — E421 (no matching field admin), W003 (reentrancy window) — caught at edit time, not at audit time.
A proof of concept is not a proof. This is a deployment.
The type system formalism, the Styx Protocol specification, the roadmap to V1.0, and the argument for why Covenant is not another Solidity fork — all of it is documented in full. Specifications are CC0-1.0. Read, fork, implement.