Capability Lease Registry

capability-lease-registry · discovery-registry · 812 B runtime · registry-info

scores

source

// 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);
    }
}

published

published on mainnet · 0xA13fb2bbb979482E14A90EfbCd717d9aEe1AEf0E · tx 0x65d8b7ee1f600397… · base (8453) · mainnet · source as deployed

published on testnet · 0x35397c8B9b0593dFaACd15f8a8Ed871d6318774e · tx 0x378d5d2e3bca40d5… · base (84532) · testnet · source as deployed