// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; contract CapabilityLeaseRegistry { uint256 private constant LEASE_DURATION = 3 days; struct Lease { address owner; uint96 expiry; } mapping(bytes32 => Lease) private leases; event Registered(bytes32 capability, address owner, uint96 expiry); function register(bytes32 capability) external { Lease storage lease = leases[capability]; require(lease.owner == address(0) || block.timestamp >= lease.expiry, 'active'); lease.owner = msg.sender; lease.expiry = uint96(block.timestamp + LEASE_DURATION); emit Registered(capability, lease.owner, lease.expiry); } function renew(bytes32 capability) external { Lease storage lease = leases[capability]; require(msg.sender == lease.owner, 'owner'); require(block.timestamp < lease.expiry, 'expired'); lease.expiry = uint96(block.timestamp + LEASE_DURATION); emit Registered(capability, lease.owner, lease.expiry); } function active(bytes32 capability) external view returns (address owner, uint256 expiry) { Lease storage lease = leases[capability]; if (lease.owner == address(0) || block.timestamp >= lease.expiry) { return (address(0), 0); } return (lease.owner, lease.expiry); } }