Files
chains/zkvm/ATTESTATION_VM_SPEC.md
zeekay 8045450815 feat: move all VM implementations into chains/
VMs now live in ONE place: chains/<name>/ owns the full implementation.
Previously split across node/vms/<name>/ (impl) + chains/<name>/main.go
(plugin wrapper). Now consolidated.

New layout:
  chains/<name>vm/*.go              — package <name>vm (VM code)
  chains/<name>vm/cmd/plugin/main.go — package main (plugin binary)
  chains/<name>vm/go.mod             — module github.com/luxfi/chains/<name>vm

Moved 11 VMs: aivm, bridgevm, dexvm, graphvm, identityvm, keyvm,
oraclevm, quantumvm, relayvm, thresholdvm, zkvm.

External callers now import github.com/luxfi/chains/<name> directly.
2026-04-13 05:27:00 -07:00

417 lines
13 KiB
Markdown

# Z/A-Chain: AttestationVM + ZK Coprocessor Specification
**Version**: 1.0.0-mainnet
**Status**: Implementation Phase
**Target**: Lux Mainnet Launch
---
## Executive Summary
The **Z/A-Chain** (Attestation + ZK Chain) combines **zero-knowledge privacy** with **AI attestation verification** to create a quantum-safe, privacy-preserving attestation layer for Lux Network.
### Core Functions
1. **ZK Privacy Coprocessor**: Confidential transactions using ZK-SNARKs
2. **AI Attestation Verifier**: On-chain verification of Hanzo.network AI compute proofs
3. **Global Attestation Registry**: Immutable record of verified AI inferences, models, and datasets
---
## Architecture
```
┌─────────────────────────────────────────────────────────┐
│ Z/A-Chain (ZVM) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Attestation Registry Layer │ │
│ │ - Provider DIDs │ │
│ │ - Model hashes │ │
│ │ - Dataset commitments │ │
│ │ - Inference receipts │ │
│ └─────────┬────────────────────────────────────────┘ │
│ │ │
│ ┌─────────▼────────────────────────────────────────┐ │
│ │ ZK Verification Layer │ │
│ │ - Groth16 verifier (commit-only v1) │ │
│ │ - Plonk verifier (future) │ │
│ │ - Receipt circuit: Hash(input+model+output) │ │
│ └─────────┬────────────────────────────────────────┘ │
│ │ │
│ ┌─────────▼────────────────────────────────────────┐ │
│ │ State Management Layer │ │
│ │ - UTXO DB (confidential outputs) │ │
│ │ - Nullifier DB (double-spend prevention) │ │
│ │ - Merkle State Tree (commitments) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
▲ │
│ Receipts │ Verified
│ ▼ Attestations
┌───────┴────────┐ ┌───────────────┐
│ Hanzo.network │ │ P-Chain │
│ (Compute) │ │ (Oracle) │
└────────────────┘ └───────────────┘
```
---
## Transaction Types
### 1. Attestation Transactions
#### `RegisterProviderTx`
Registers an AI compute provider on-chain.
```go
type RegisterProviderTx struct {
ProviderDID string // Decentralized Identifier
PublicKey []byte // Provider's public key
GPUSpecs []GPUSpec // Compute capacity
TEEAttestation []byte // Optional TEE attestation
StakeBond uint64 // Required stake (100 LUX minimum)
Signature []byte // Provider signature
}
```
**Validation**:
- Provider DID unique
- Stake ≥ 100 LUX
- Valid signature
- TEE attestation valid (if provided)
#### `SubmitReceiptTx`
Submits an AI inference receipt for verification.
```go
type SubmitReceiptTx struct {
JobID ids.ID // Unique job identifier
ProviderDID string // Provider who executed job
ModelHash [32]byte // SHA256(model_weights)
DatasetHash [32]byte // SHA256(input_data)
OutputHash [32]byte // SHA256(inference_result)
Proof []byte // ZK-SNARK proof
Timestamp int64 // Execution timestamp
Fee uint64 // Fee in LUX
Signature []byte // Provider signature
}
```
**ZK Circuit (Receipt Circuit v1 - Commit-Only)**:
```
Public Inputs:
- job_id
- provider_did
- timestamp
Private Inputs:
- model_weights
- input_data
- inference_result
Circuit Constraints:
1. Hash(model_weights) == model_hash (public)
2. Hash(input_data) == dataset_hash (public)
3. Hash(inference_result) == output_hash (public)
4. Inference_result == Model(input_data) [future: in-circuit]
```
**Validation**:
- Provider registered
- Proof verifies with Groth16/Plonk
- Fee sufficient
- No duplicate job_id
#### `ChallengeTx`
Challenges an attestation as fraudulent.
```go
type ChallengeTx struct {
ReceiptID ids.ID // Receipt being challenged
ChallengerDID string // Challenger identity
CounterProof []byte // Alternative proof
BondAmount uint64 // Challenge bond (50 LUX)
Reason string // Challenge reason
Signature []byte // Challenger signature
}
```
**Challenge Period**: 1000 blocks (~2 hours)
**Resolution**:
- Valid challenge: Challenger gets provider stake
- Invalid challenge: Challenger loses bond
#### `SettlementTx`
Resolves a challenge through committee vote or timeout.
```go
type SettlementTx struct {
ChallengeID ids.ID // Challenge being resolved
Decision bool // true = challenge valid
Evidence []byte // Evidence for decision
CommitteeVotes []Vote // Committee signatures
}
```
### 2. Privacy Transactions
#### `ConfidentialTransferTx`
ZK-private asset transfer.
```go
type ConfidentialTransferTx struct {
Nullifiers [][32]byte // Spent UTXO nullifiers
Commitments [][32]byte // New UTXO commitments
OutputNotes []EncryptedNote // Encrypted output notes
RangeProof []byte // Proves values non-negative
ZKProof []byte // ZK-SNARK transfer proof
Fee uint64 // Public fee
}
```
---
## State Model
### UTXO Model
```go
type UTXO struct {
TxID ids.ID // Creating transaction
OutputIndex uint32 // Output index in tx
Commitment [32]byte // Pedersen commitment
Ciphertext []byte // Encrypted note
EphemeralPK []byte // Ephemeral public key
Height uint64 // Block height created
}
```
### Nullifier Model
```go
type Nullifier struct {
Hash [32]byte // PRF(spend_key, serial)
SpentAt uint64 // Block height spent
TxID ids.ID // Spending transaction
}
```
### Attestation Registry
```go
type AttestationRecord struct {
JobID ids.ID // Unique job ID
ProviderDID string // Provider identity
ModelHash [32]byte // Model commitment
DatasetHash [32]byte // Input commitment
OutputHash [32]byte // Result commitment
ProofHash [32]byte // ZK proof hash
Timestamp int64 // Attestation time
Status AttestStatus // Pending/Verified/Challenged/Invalid
ChallengeID *ids.ID // Challenge (if any)
}
type AttestStatus uint8
const (
AttestPending AttestStatus = 0
AttestVerified AttestStatus = 1
AttestChallenged AttestStatus = 2
AttestInvalid AttestStatus = 3
)
```
---
## Proof Systems
### Receipt Circuit v1 (Commit-Only)
**Purpose**: Prove hash consistency without in-circuit inference
**Proof System**: Groth16 (fast verify, ~200ms)
**Circuit Size**: ~100K constraints
```
Proof Statement:
"I know (model, data, result) such that:
Hash(model) == model_hash AND
Hash(data) == dataset_hash AND
Hash(result) == output_hash"
```
### Receipt Circuit v2 (Future - Full Inference)
**Purpose**: Prove correct inference execution in-circuit
**Proof System**: Plonk or Halo2
**Circuit Size**: Depends on model (millions of constraints)
```
Proof Statement:
"I executed Model(input) == output correctly"
```
### Privacy Transfer Circuit
**Purpose**: Prove valid confidential transfer
**Proof System**: Groth16
**Circuit Size**: ~50K constraints per input/output
```
Proof Statement:
"I know secret keys and values such that:
- Nullifiers are valid spends
- Commitments are well-formed
- Input_sum == Output_sum + Fee
- Values are non-negative"
```
---
## Economic Model
### Fees
- **Receipt Submission**: 0.1 LUX + proof verification cost
- **Confidential Transfer**: 0.01 LUX + 0.001 LUX per input/output
- **Provider Registration**: 100 LUX stake (refundable)
- **Challenge Bond**: 50 LUX (slashed if invalid)
### Incentives
- **Providers**: Earn from Hanzo.network for compute
- **Validators**: Earn block rewards + tx fees
- **Challengers**: Earn slashed stakes for valid challenges
---
## Security Model
### Threat Model
1. **Fraudulent Attestations**: Provider submits fake proofs
2. **Double-Spend**: User tries to spend UTXO twice
3. **Challenge Spam**: Malicious challenges on valid receipts
4. **Front-Running**: MEV on attestation submissions
### Mitigations
1. **ZK Proofs**: Cryptographic verification of attestations
2. **Nullifier DB**: Prevents double-spends
3. **Challenge Bonds**: Economic penalty for spam
4. **Encrypted Mempools**: Prevents front-running (future)
### Quantum Resistance
- **Receipt Hashes**: SHA-256 → SHA-3 (quantum-safe)
- **Signatures**: ECDSA → ML-DSA (via P-Chain integration)
- **Commitments**: Pedersen → Lattice-based (v2)
---
## API Endpoints
### Attestation APIs
```
POST /attestation/register - Register provider
POST /attestation/submit - Submit receipt
POST /attestation/challenge - Challenge receipt
GET /attestation/query - Query attestations
GET /attestation/provider/:did - Get provider info
```
### Privacy APIs
```
POST /privacy/transfer - Confidential transfer
GET /privacy/balance - Get shielded balance
GET /privacy/utxos - List available UTXOs
```
### Indexer APIs
```
GET /index/providers - List all providers
GET /index/jobs - Query job history
GET /index/models - List attested models
GET /index/datasets - List attested datasets
```
---
## Implementation Checklist
### Phase 1: Core Infrastructure (Mainnet Launch)
- [x] UTXO database
- [x] Nullifier database
- [x] Merkle state tree
- [x] ZK proof verifier framework
- [ ] Groth16 verifier integration
- [ ] Receipt Circuit v1 implementation
- [ ] Attestation registry storage
### Phase 2: Transaction Types
- [ ] RegisterProviderTx
- [ ] SubmitReceiptTx
- [ ] ChallengeTx
- [ ] SettlementTx
- [x] ConfidentialTransferTx (base)
### Phase 3: Integration
- [ ] P-Chain PQC signature verification
- [ ] Hanzo.network receipt ingestion API
- [ ] B-Chain fee routing
- [ ] Indexer for attestation queries
### Phase 4: Advanced Features (Post-Launch)
- [ ] TEE attestation policy
- [ ] Receipt Circuit v2 (in-circuit inference)
- [ ] Encrypted mempool
- [ ] Dispute resolution DAO
---
## Testing Requirements
### Unit Tests
- UTXO/Nullifier DB operations
- State tree updates
- Transaction validation logic
- Proof verification
### Integration Tests
- End-to-end attestation flow
- Challenge and settlement
- Confidential transfer flow
- P-Chain PQC integration
### Load Tests
- 1000 TPS attestation submission
- 100 concurrent challenges
- 10K provider registrations
### Security Tests
- Double-spend attempts
- Invalid proof submissions
- Challenge spam scenarios
- Front-running attacks
---
## Deployment Plan
1. **Testnet** (Week 1-2)
- Deploy Z/A-Chain on testnet
- Public bug bounty
- Load testing
2. **Mainnet Beta** (Week 3-4)
- Limited provider whitelist
- Manual challenge review
- Graduated fee reduction
3. **Mainnet General Availability** (Week 5+)
- Open provider registration
- Automated challenge resolution
- Full feature set
---
## References
- [ZK-SNARK Explainer](https://z.cash/technology/zksnarks/)
- [Groth16 Paper](https://eprint.iacr.org/2016/260.pdf)
- [Zcash Sapling Protocol](https://github.com/zcash/zips/blob/master/protocol/sapling.pdf)
- [Lux Consensus](https://github.com/luxfi/consensus)
- [Hanzo AI Network](https://hanzo.ai)
---
**Maintainers**: Lux Core Team
**Last Updated**: 2025-10-31
**Next Review**: Pre-Mainnet Launch