use std::sync::atomic::{AtomicU64, Ordering};
use std::sync::Arc;
pub const LEASE_ANCHOR: &str = "arXiv:2606.04056";
#[derive(Debug)]
pub struct SharedBudget {
remaining: AtomicU64,
}
impl SharedBudget {
fn new(total: u64) -> Arc<Self> {
Arc::new(Self {
remaining: AtomicU64::new(total),
})
}
pub fn remaining(&self) -> u64 {
self.remaining.load(Ordering::SeqCst)
}
fn try_take(&self, amount: u64) -> bool {
self.remaining
.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |cur| {
cur.checked_sub(amount)
})
.is_ok()
}
}
#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]
pub enum LeaseError {
#[error("lease cap exceeded: requested {requested}, cap {cap}")]
LocalCapExceeded { requested: u64, cap: u64 },
#[error("shared budget exhausted: requested {requested}, pool remaining {pool_remaining}")]
PoolExhausted { requested: u64, pool_remaining: u64 },
#[error("lease is no longer active")]
Inactive,
}
#[derive(Debug)]
pub struct BudgetLease {
pool: Arc<SharedBudget>,
cap: u64,
active: bool,
}
impl BudgetLease {
pub fn root(total: u64) -> Self {
Self {
pool: SharedBudget::new(total),
cap: total,
active: true,
}
}
pub fn spend(&mut self, amount: u64) -> Result<(), LeaseError> {
if !self.active {
return Err(LeaseError::Inactive);
}
if amount == 0 {
return Ok(());
}
if amount > self.cap {
return Err(LeaseError::LocalCapExceeded {
requested: amount,
cap: self.cap,
});
}
if !self.pool.try_take(amount) {
return Err(LeaseError::PoolExhausted {
requested: amount,
pool_remaining: self.pool.remaining(),
});
}
self.cap -= amount;
Ok(())
}
pub fn delegate(&mut self, amount: u64) -> Result<BudgetLease, LeaseError> {
if !self.active {
return Err(LeaseError::Inactive);
}
if amount > self.cap {
return Err(LeaseError::LocalCapExceeded {
requested: amount,
cap: self.cap,
});
}
self.cap -= amount;
Ok(BudgetLease {
pool: Arc::clone(&self.pool),
cap: amount,
active: true,
})
}
pub fn subordinate(&self) -> BudgetLease {
BudgetLease {
pool: Arc::clone(&self.pool),
cap: self.pool.remaining(),
active: true,
}
}
pub fn remaining_cap(&self) -> u64 {
if self.active {
self.cap
} else {
0
}
}
pub fn pool_remaining(&self) -> u64 {
self.pool.remaining()
}
pub fn is_active(&self) -> bool {
self.active
}
pub fn close(mut self) -> u64 {
let unused = self.cap;
self.active = false;
self.cap = 0;
unused
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::thread;
#[test]
fn root_holds_full_budget_on_both_axes() {
let lease = BudgetLease::root(100);
assert_eq!(lease.remaining_cap(), 100);
assert_eq!(lease.pool_remaining(), 100);
assert!(lease.is_active());
}
#[test]
fn spend_decrements_cap_and_pool_together() {
let mut lease = BudgetLease::root(100);
lease.spend(30).unwrap();
assert_eq!(lease.remaining_cap(), 70);
assert_eq!(lease.pool_remaining(), 70);
}
#[test]
fn spend_beyond_local_cap_is_rejected_and_spends_nothing() {
let mut lease = BudgetLease::root(100);
let err = lease.spend(101).unwrap_err();
assert_eq!(
err,
LeaseError::LocalCapExceeded {
requested: 101,
cap: 100
}
);
assert_eq!(lease.pool_remaining(), 100);
}
#[test]
fn delegate_carves_authority_out_of_parent() {
let mut parent = BudgetLease::root(100);
let child = parent.delegate(40).unwrap();
assert_eq!(parent.remaining_cap(), 60);
assert_eq!(child.remaining_cap(), 40);
assert_eq!(parent.pool_remaining(), 100);
assert_eq!(child.pool_remaining(), 100);
}
#[test]
fn child_spend_draws_down_the_shared_pool() {
let mut parent = BudgetLease::root(100);
let mut child = parent.delegate(40).unwrap();
child.spend(25).unwrap();
assert_eq!(parent.pool_remaining(), 75);
assert_eq!(child.remaining_cap(), 15);
assert_eq!(parent.remaining_cap(), 60); }
#[test]
fn delegating_more_than_held_is_rejected() {
let mut parent = BudgetLease::root(50);
assert_eq!(
parent.delegate(51).unwrap_err(),
LeaseError::LocalCapExceeded {
requested: 51,
cap: 50
}
);
}
#[test]
fn close_consumes_and_reports_unused_authority() {
let mut lease = BudgetLease::root(100);
lease.spend(30).unwrap();
assert_eq!(lease.close(), 70);
}
#[test]
fn fanout_under_concurrent_spend_never_overshoots_root_cap() {
const CAP: u64 = 9_000;
const CHILDREN: u64 = 3;
let root = BudgetLease::root(CAP);
let handles: Vec<_> = (0..CHILDREN)
.map(|_| {
let mut child = root.subordinate();
thread::spawn(move || {
let mut spent = 0u64;
while child.spend(1).is_ok() {
spent += 1;
}
spent
})
})
.collect();
let lease_total: u64 = handles.into_iter().map(|h| h.join().unwrap()).sum();
assert_eq!(lease_total, CAP, "shared-pool fan-out must not overshoot");
assert_eq!(root.pool_remaining(), 0);
let baseline_handles: Vec<_> = (0..CHILDREN)
.map(|_| {
thread::spawn(move || {
let mut remaining = CAP;
let mut spent = 0u64;
while remaining > 0 {
remaining -= 1;
spent += 1;
}
spent
})
})
.collect();
let baseline_total: u64 = baseline_handles
.into_iter()
.map(|h| h.join().unwrap())
.sum();
assert_eq!(baseline_total, CAP * CHILDREN);
assert!(
baseline_total > CAP,
"naive copied-counter baseline overshoots the cap"
);
assert!(
lease_total < baseline_total,
"shared-pool lease must spend strictly less than the copied-counter baseline"
);
}
#[test]
fn carved_fanout_conserves_authority_exactly() {
let mut parent = BudgetLease::root(90);
let a = parent.delegate(30).unwrap();
let b = parent.delegate(30).unwrap();
let c = parent.delegate(30).unwrap();
assert_eq!(parent.remaining_cap(), 0);
assert_eq!(
a.remaining_cap() + b.remaining_cap() + c.remaining_cap(),
90
);
assert_eq!(
parent.delegate(1).unwrap_err(),
LeaseError::LocalCapExceeded {
requested: 1,
cap: 0
}
);
}
#[test]
fn spend_after_close_is_runtime_rejected() {
let mut lease = BudgetLease::root(10);
lease.active = false; assert_eq!(lease.spend(1).unwrap_err(), LeaseError::Inactive);
assert_eq!(lease.delegate(1).unwrap_err(), LeaseError::Inactive);
}
}