libertaria-stack/specs/_ACTIVE/rfc-0315-access-toll-protoc...

15 KiB
Raw Blame History

RFC-0315: PRIVACY-PRESERVING ACCESS TOLLS

Dynamic Resource Allocation via Trust-Scaled Mauts

Status: ACTIVE DRAFT
Version: 0.3.0
Layer: L2 (Economic Strategy)
Class: RESOURCE ALLOCATION
Author: Markus Maiwald
Co-Author: Grok (xAI)
Date: 2026-02-05
Depends On: RFC-0130 (ZK-STARK Primitive Layer), RFC-0205 (Passport Protocol), RFC-0648 (Hamiltonian Economic Dynamics), RFC-0000 (LWF), RFC-0010 (UTCP), RFC-0120 (QVL)
Related: RFC-0121 (Slash Protocol), RFC-0310 (Liquid Democracy), RFC-0641 (Energy Token), RFC-0630 (TBT)
Supersedes: Static fee models, Non-privacy-preserving payments, x402-style centralized facilitators
Non-Goals: Enforcing universal tolls, Preventing zero-cost resources, Token-specific minting


This RFC defines HOW ACCESS BECOMES A DYNAMIC COVENANT.
Not through fixed barriers. Through velocity flows.


Mauts filtern Parasiten; Discounts belohnen Produzenten.
Zahle blind; fließe frei.


1. KONZEPT: DIE "DYNAMIC TOLL"

Statt fixer Gebühren nutzt Libertaria eine Hamiltonian-gesteuerte Maut, die mit System-Velocity ($V$) atmet.

Velocity State Toll Behavior Economic Purpose
V-High (Überhitzung) Tolls steigen exponentiell Extraction-Vektor, um Momentum zu kühlen
V-Low (Stagnation) Tolls sinken gegen Null Stimulus, um Circulation zu fördern
V-Normal Tolls = Base × Trust-Discount Standard-Ressourcen-Allokation

Formel:

Toll = Base × (1 + k·ε) × (1 - Discount)

where:
  ε = V_target - V_measured  (Velocity error from Hamiltonian)
  k = Scaling factor (RFC-0648 PID output)
  Discount = f(Rep_Score, Trust_Distance) [0.0 - 1.0]

Diese Dynamik verhindert Stagnation-Traps und Hyper-Erosion, wie in RFC-0648 definiert. Tolls sind nicht Strafen—sie sind der Preis der Ressourcen (Bandbreite, Storage, Compute), skaliert durch Trust und Rep.


2. ZK-STARK INTEGRATION (DIE PRIVACY-MAUT)

Um Tracking zu verhindern (wer zahlt was wann), integrieren wir ZK-STARK #10: Toll Clearance Proof (aus RFC-0130).

2.1 Der Prozess

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Client    │────▶│   Router    │────▶│  Resource   │
└─────────────┘     └─────────────┘     └─────────────┘
       │                   │
       │ 1. Toll Required  │
       │◀──────────────────│
       │                   │
       │ 2. Generate       │
       │    Commitment     │
       │                   │
       │ 3. Pay → Pool     │
       │                   │
       │ 4. Generate       │
       │    STARK Proof    │
       │                   │
       │ 5. Toll Proof     │
       │──────────────────▶│
       │                   │
       │ 6. Verify STARK   │
       │    (Local)        │
       │                   │
       │ 7. Deliver        │
       │◀──────────────────│

2.2 STARK Circuit: TollClearanceCircuit

/// ZK-STARK #10: Toll Clearance Proof
struct TollClearanceCircuit {
    /// Public inputs
    commitment_hash: [u8; 32],      // Hash(Resource_ID || Amount || Nonce)
    toll_band: TollBand,             // Price range (for range proof)
    
    /// Private inputs (kept secret)
    resource_id: String,
    exact_amount: u64,
    nonce: [u8; 16],
    payment_receipt: PaymentReceipt,
}

impl TollClearanceCircuit {
    fn verify(&self) -> bool {
        // 1. Verify commitment matches hash
        let computed = blake3(&self.resource_id, 
                             &self.exact_amount.to_le_bytes(), 
                             &self.nonce);
        assert_eq!(computed, self.commitment_hash);
        
        // 2. Verify amount within toll band (range proof)
        assert!(self.exact_amount >= self.toll_band.min);
        assert!(self.exact_amount <= self.toll_band.max);
        
        // 3. Verify payment receipt
        self.payment_receipt.verify()
    }
}

struct TollClearanceProof {
    stark_proof: StarkProof,
    compressed: Option<CompressedProof>, // For Kenya
    commitment_hash: [u8; 32],
}

2.3 Kenya-Optimized Flow

fn generate_clearance_kenya(
    commitment: TollCommitment,
    payment_receipt: PaymentReceipt
) -> TollClearanceProof {
    let circuit = TollClearanceCircuit::new(commitment, payment_receipt);
    let proof = generate_stark(circuit);
    
    // Recursive compression for mobile/low-bandwidth
    proof.compress_for_mobile() // <5 KB
}

fn verify_lazy(
    proof: &TollClearanceProof,
    router: &RouterState
) -> VerificationResult {
    if router.is_resource_constrained() {
        // Commit now, verify later (batched)
        LazyVerification {
            commitment: proof.commitment_hash,
            deferred_until: Instant::now() + BATCH_WINDOW,
        }
    } else {
        // Verify immediately
        verify_stark(proof.stark_proof, proof.commitment_hash)
    }
}

2.4 Privacy-Garantien

Leaked Protected
Commitment Hash (opaque) Wallet Address
Toll Band (range) Exact Amount Paid
Resource ID Hash Specific Resource
Payment Occurred Payment Method
Nullifier (anti-replay) Payer Identity

3. KENYA-SPECIFIC: "LEAN TOLLS"

Für low-resource Regionen (Kenya Rule): Reputation-based Discounts.

3.1 Discount-Formel

fn calculate_kenya_discount(
    rep_score: f64,
    trust_distance: u8,
    qvl_position: &TrustPosition,
) -> f64 {
    let rep_factor = (rep_score / REP_MAX).min(1.0);
    
    // Distance decay: closer = higher discount
    let distance_factor = match trust_distance {
        0 => 1.0,      // Self: full discount possible
        1 => 0.5,      // Friend: 50% cap
        2 => 0.25,     // FoF: 25% cap
        3 => 0.125,    // 12.5% cap
        _ => 0.0,      // Stranger: no discount
    };
    
    // Additional swarm bonus for high-rep nodes
    let swarm_bonus = if rep_score > SWARM_THRESHOLD {
        0.1 // Extra 10% for swarm guardians
    } else {
        0.0
    };
    
    (rep_factor * distance_factor + swarm_bonus).min(0.95) // Max 95% off
}

3.2 Anti-Gaming

Attack Mitigation
Fake Rep Scores QVL STARK #4 (non-forgeable)
Discount Farming Rep slashes on abuse (RFC-0121)
Sybil Networks Larval Bootstrap (RFC-0250)
Ghost Tolls Atomic nullifier invalidation (RFC-0205)

4. DEPENDENCY INTEGRATION

4.1 RFC-0130 (ZK-STARK)

  • STARK #10: TollClearanceCircuit (privacy-preserving payments)
  • STARK #4: ReputationThreshold (for discount eligibility)
  • Recursive Compression: Kenya compliance (<5KB proofs)

4.2 RFC-0205 (Passport)

impl ChapterPassport {
    /// Generate toll clearance without revealing identity
    fn prove_toll_clearance(
        &self,
        resource: ResourceId,
        toll_band: TollBand,
    ) -> TollClearanceProof {
        // Use cached STARK #4 for rep proof
        let rep_proof = self.cached_proofs.rep_threshold
            .expect("Rep proof required for tolls");
        
        // Generate toll-specific commitment
        let commitment = TollCommitment::new(
            resource,
            toll_band,
            self.soul_key.generate_nonce(),
        );
        
        self.proof_generator.generate(
            TollClearanceCircuit::new(commitment, rep_proof)
        )
    }
    
    /// Check if eligible for discount
    fn toll_discount_eligible(&self, &self) -> Option<DiscountProof> {
        if self.reputation.score < MIN_TOLL_REP {
            return None;
        }
        
        Some(self.proof_generator.generate(
            ReputationThresholdCircuit::new(
                MIN_TOLL_REP,
                self.reputation.score,
            )
        ))
    }
}

4.3 RFC-0648 (Hamiltonian)

/// Dynamic toll adjustment based on velocity
struct HamiltonianTollController {
    pid: PIDController,          // From RFC-0648
    base_toll: f64,
    velocity_window: Duration,
}

impl HamiltonianTollController {
    fn calculate_toll(
        &self,
        v_measured: f64,           // Current velocity
        v_target: f64,             // Target velocity
        discount: f64,             // From QVL/Rep
    ) -> TollAmount {
        let error = v_target - v_measured;
        let pid_output = self.pid.compute(error);
        
        // Scale base toll by PID output
        let adjusted = self.base_toll * (1.0 + pid_output);
        
        // Apply trust discount
        TollAmount {
            min: (adjusted * 0.9 * (1.0 - discount)) as u64,
            max: (adjusted * 1.1) as u64,
            target: (adjusted * (1.0 - discount)) as u64,
        }
    }
}

5. TOLL AGGREGATION (BOTTLENECK-BREAKER)

Router als Bottleneck? Batch-Verification:

/// Batch-Verify multiple tolls in one STARK
struct BatchTollCircuit {
    proofs: Vec<TollClearanceProof>,
}

impl BatchTollCircuit {
    fn verify_batch(&self,
        router: &mut RouterState
    ) -> BatchVerificationResult {
        // Collect all commitments
        let commitments: Vec<[u8; 32]> = self.proofs
            .iter()
            .map(|p| p.commitment_hash)
            .collect();
        
        // Single recursive STARK proving all proofs valid
        let batch_proof = generate_recursive_stark(
            &self.proofs
        );
        
        // Verify once, accept all
        if verify_stark(batch_proof, &commitments) {
            BatchVerificationResult::AllValid
        } else {
            // Fall back to individual verify
            self.verify_individually()
        }
    }
}

// Kenya: Lazy batch - commit now, verify later
struct LazyBatch {
    pending: Vec<PendingToll>,
    deadline: Instant,
}

impl LazyBatch {
    fn flush(&mut self,
        router: &mut RouterState
    ) -> Vec<TollClearanceProof> {
        if self.deadline <= Instant::now() 
            || self.pending.len() >= BATCH_SIZE {
            
            let batch = BatchTollCircuit::new(&self.pending
            );
            let result = batch.verify_batch(router);
            
            self.pending.clear();
            result
        } else {
            vec![] // Not yet
        }
    }
}

6. SECURITY CONSIDERATIONS

Threat Impact Mitigation
Proof Forgery Free access STARK soundness (collision-resistant)
Discount Gaming Underpay via fake rep QVL + STARK #4 (non-forgeable)
Router Overhead DoS via verify flood Batch + recursive compression
Revocation Leak Ghost tolls Atomic nullifier invalidation (RFC-0205)
Replay Attack Double-spend Nullifier cache + uniqueness proof
Toll Evasion Bypass payment Commitment binding + STARK verify

7. IMPLEMENTATION NOTES

7.1 Wire Frame Integration (RFC-0000)

// New service types for tolls
const TOLL_REQUIRED: u16 = 0x0310;
const TOLL_PROOF: u16 = 0x0311;
const TOLL_RECEIPT: u16 = 0x0312;
const TOLL_BATCH: u16 = 0x0314;

/// L0 Wire Frame extension
struct TollRequiredFrame {
    resource_id: [u8; 32],
    toll_band: TollBand,           // Min/Max/Target
    accepted_methods: Vec<TollMethod>,
    velocity_context: VelocityReading, // For dynamic pricing
}

struct TollProofFrame {
    commitment: [u8; 32],
    stark_proof: CompressedProof,  // <5KB for Kenya
    nullifier: [u8; 32],           // Anti-replay
}

7.2 Membrane Agent Integration (RFC-0110)

// Zig implementation stub
pub const TollVerifier = struct {
    allocator: std.mem.Allocator,
    nonce_cache: NonceCache,
    batch_queue: LazyBatch,
    
    pub fn verifyToll(
        self: *TollVerifier,
        proof: TollClearanceProof,
        context: *const RouterContext,
    ) !bool {
        // 1. Check nullifier not spent
        if (self.nonce_cache.contains(proof.nullifier)) {
            return false; // Replay
        }
        
        // 2. Check commitment valid
        if (!verify_commitment(proof.commitment_hash)) {
            return false;
        }
        
        // 3. Route based on resources
        if (context.is_kenya_mode()) {
            // Lazy verification
            self.batch_queue.enqueue(proof);
            return true; // Optimistic
        } else {
            // Immediate verification
            return verify_stark(proof.stark_proof);
        }
    }
};

7.3 Passport Lifecycle Hooks

impl ChapterPassport {
    /// Called on revocation
    fn on_revoke(&mut self,
        reason: RevocationReason,
    ) {
        // Invalidate all pending toll nullifiers
        for nullifier in &self.pending_tolls {
            TOLL_REGISTRY.mark_spent(nullifier);
        }
        
        // Revoke rep-based discounts
        self.tbt_credential.is_active = false;
        
        // Atomic: All invalidations happen together
    }
}

8. COMPARISON: ATP vs x402

Dimension x402 ATP (RFC-0315)
Facilitator Coinbase (centralized) None (local STARK verify)
Payment types USDC only (EIP-3009) Entropy, Rep, Token, Energy, Lightning
Pricing Uniform per-endpoint Trust-scaled + Hamiltonian-dynamic
Gas cost Chain write per payment Zero (proof is self-validating)
Privacy None (transparent) Full (ZK-STARK hiding)
Offline support None Full (entropy + lazy batch)
Kenya compliance None Native
Smart contract hooks None Native (extension fields)

9. REFERENCES

RFC Title Relationship
RFC-0130 ZK-STARK Primitive Layer Privacy proofs, recursive compression
RFC-0205 ChapterPassport Protocol Credential lifecycle, nullifier management
RFC-0648 Hamiltonian Economic Dynamics Velocity-based toll scaling
RFC-0000 Wire Frame L0 transport for toll frames
RFC-0010 UTCP Connection-level toll integration
RFC-0120 QVL Trust distance for discounts
RFC-0121 Slash Protocol Rep punishment for toll gaming
RFC-0630 TBT Reputation-based payment method
RFC-0641 Energy Token Energy-based payment method

10. CHANGELOG

v0.3.0 (2026-02-05)

  • ZK-STARK integration (RFC-0130)
  • Hamiltonian velocity coupling (RFC-0648)
  • Passport lifecycle hooks (RFC-0205)
  • Kenya-specific optimizations
  • Toll aggregation for routers

v0.2.0 (2026-02-04)

  • Gas-less guarantee specified
  • Multi-modal payment registry
  • Smart contract hooks
  • Agent delegation framework

v0.1.0 (2026-02-03)

  • Initial concept
  • Trust-scaled pricing
  • Comparison with x402

11. CLOSING PRINCIPLES

Gas is friction. Proof is flow.
The toll is not a gate; it is a handshake.
Strangers prove with entropy. Kin prove with scars. > ZK conceals; STARK verifies; Hamiltonian breathes. > x402 asks: "Do you have money?" > ATP asks: "Do you have value?" > Value is time. Value is trust. Value is work. Value is standing. > The Protocol accepts all. The Protocol charges none. > Zahle blind; fließe frei.


END RFC-0315 v0.3.0