LP-179 mirrors HIP-0104 into Lux. Four precompiles expose the
strict-PQ contract-auth surface to EVM-compatible contracts on Lux:
0x0301 — pq_verify_mldsa65, FIPS 204 ML-DSA-65 verify.0x0302 — pq_verify_mldsa87, FIPS 204 ML-DSA-87 verify (high-value).0x0303 — pq_verify_slh_dsa, FIPS 205 SLH-DSA verify (hash-basedbackstop).
0x0304 — pq_verify_z_auth_proof, STARK_FRI_SHA3_PQ proof verifier from LP-169 / HIP-0078; returns the authenticated 48-byte AccountID
and verified_at_height.
Each precompile returns (bool ok, bytes payload). Contracts call
these via standard EVM staticcall. ecrecover is refused under
LUX_STRICT_PQ.
ProfileID: 0x01 (ProfileLuxStrictPQ)
ProfileName: LUX_STRICT_PQ
HashSuiteID: SHA3_NIST (0x01)
IdentitySchemeID: ML_DSA_65 (0x42)
ProofPolicyID: STARK_FRI_SHA3_PQ (0x10)
MinSoundnessBits: 128
MinHashOutputBits: 384
RequireTransparent: true
ForbidPairings: true
ForbidKZG: true
ForbidTrustedSetup: true
ForbidClassicalSNARKs: true
ForbidDevProofs: true
ForbidFallbacks: true
luxfi/consensus/protocol/auth/precompile.go is the canonical reference; four PrecompileAddrPQVerify* constants pin the EVM
precompile addresses at 0x0301..0x0304.
luxfi/coreth/core/vm/contracts_pq.go. Gasschedule lives there, not in consensus.
ecrecover (address 0x01) is refused under LUX_STRICT_PQ. The permissive profile (0x02) keeps ecrecover available for
transition.
luxfi/coreth/core/vm/testdata/precompile_pq_v1.json.A Lux EVM contract calling ecrecover under LUX_STRICT_PQ reverts
with ErrEcrecoverRefused. Contracts MUST migrate to one of
staticcall(0x0301) (ML-DSA-65 verify), staticcall(0x0302)
(ML-DSA-87), staticcall(0x0303) (SLH-DSA), or staticcall(0x0304)
(Z-Chain proof) before profile activation.
luxfi/consensus/protocol/auth/precompile.go.luxfi/coreth/core/vm/contracts_pq.go.