Skip to main content
Claim Rights tokenize verifiable entitlements without requiring transferability or fungibility. Issue non-transferable credentials, membership access, subscription rights, or conditional entitlements that execute when specific on-chain conditions are met.

Why Institutions Issue Claim Rights

Eliminate Credential Fraud

On-chain verification prevents forged credentials, expired memberships, and unauthorized access

Programmable Conditions

Attach rule modules that validate claim execution against custom business logic

Zero Transfer Overhead

Non-fungible rights prevent secondary markets while maintaining verifiable ownership

Instant Revocation

Revoke access rights immediately without relying on centralized databases

Claim Types

Claim Rights support ten distinct entitlement categories that map to common institutional requirements:
Claim TypeUse CaseTransferable
ACCESSBuilding entry, system login, gated contentNo
MEMBERSHIPClub membership, loyalty programs, association rightsOptional
ENTITLEMENTBenefits, perks, usage quotasNo
LICENSESoftware licenses, IP rights, operating permitsRestricted
SUBSCRIPTIONService access, recurring entitlementsNo
REWARDLoyalty points, achievement badges, incentivesOptional
VOUCHERDiscount codes, gift certificates, promotional claimsYes
TICKETEvent admission, seat reservations, access passesYes
CERTIFICATECredentials, certifications, proof of completionNo
CUSTOMInstitution-defined claim types with custom logicConfigurable
Each claim type inherits default behavior that issuers can override through rule modules. For example, TICKET claims enable transfer by default to support secondary markets, while LICENSE claims restrict transfers to approved parties only.

Rule Module System

Rule modules execute custom validation logic before claim execution. Attach multiple modules that check balance requirements, time windows, identity verification, or external oracle data.
// Claim requires minimum token balance
const balanceModule = {
    moduleType: 'BALANCE_GATE',
    tokenAddress: '0x...', // Required token
    minBalance: '1000000000000000000', // 1 token
    checkOnExecution: true
};
When a user attempts to execute a claim, the contract iterates through all attached modules in sequence. If any module returns false, the entire transaction reverts. This enables complex conditional logic like “claim requires both KYC verification AND minimum balance AND execution during business hours.”

Modules

ModuleAddressNetwork
TimeModule0x62A1D34069E8ed7451B7B4BD36454d237561D8f4Sepolia
UsageModule0xD1806A8FBB2B8d7Eb947928df9231787387075FeSepolia
ConditionalAcccessModule0x92797faA1C89740AC8309590F846F7007C301b91Sepolia
TransferabilityModule0xDd1d1Dc1dFA6C8F216cA6377b8949f8EbE43ce37Sepolia

Execution Flow

Claims follow a two-step execution pattern that separates entitlement assignment from fulfillment:
// Step 1: Issuer creates claim right
await claimRightFactory.createClaimRight({
    name: "Premium Membership 2025",
    symbol: "MEMBER25",
    claimType: "MEMBERSHIP",
    metadataURI: "ipfs://Qm..." // Benefits description
});

// Step 2: User receives claim NFT
await claimRight.mint(userAddress);

// Step 3: User executes claim to access benefits
const success = await claimRight.executeClaim(
    tokenId,
    executionProof // Optional signature or merkle proof
);
// Contract validates all rule modules
// External system reads on-chain execution event
// Benefits activated in backend systems
Execution means using the claim for its intended purpose (accessing a service, redeeming a benefit). The NFT remains in the user’s wallet after execution unless the claim type specifies burn-on-use behavior.Transfer means moving the claim NFT to another address. Most claim types disable transfers to prevent unauthorized access. Enable transfers only for vouchers, tickets, or reward points that benefit from secondary markets.

Metadata Standards

Claim Right metadata extends ERC-721 standards with additional fields for entitlement details:
{
    "name": "Premium Membership 2025",
    "description": "Annual premium access with conference tickets",
    "image": "ipfs://Qm.../membership-badge.png",
    "attributes": [
        {
            "trait_type": "Claim Type",
            "value": "MEMBERSHIP"
        },
        {
            "trait_type": "Valid Until",
            "value": "2025-12-31"
        },
        {
            "trait_type": "Execution Count",
            "value": "0/1" // Single-use claim
        }
    ],
    "entitlements": [
        "Conference access (3 days)",
        "Private lounge access",
        "Priority support channel",
        "10% merchandise discount"
    ],
    "executionRules": [
        {
            "type": "TIME_LOCK",
            "startDate": "2025-01-01",
            "endDate": "2025-12-31"
        },
        {
            "type": "IDENTITY_GATE",
            "kycRequired": true,
            "minVerificationLevel": 2
        }
    ]
}
Frontend applications parse this metadata to display claim details, validate execution requirements, and guide users through fulfillment processes.

Deployment Configuration

Deploy Claim Rights through the Trusset dashboard or directly via the factory contract:
interface ClaimRightConfig {
    name: string;              // Display name
    symbol: string;            // Ticker symbol
    claimType: ClaimType;      // Predefined or CUSTOM
    metadataURI: string;       // IPFS or HTTPS link
    transferable: boolean;     // Enable secondary markets
    burnsOnExecution: boolean; // Destroy after first use
    maxSupply: uint256;        // Cap on total claims (0 = unlimited)
    kycRequired: boolean;      // Require identity verification
    pausable: boolean;         // Emergency stop capability
}
All Claim Right contracts deploy as UUPS upgradeable proxies, enabling issuers to add new rule modules or fix bugs without redeploying. Users retain their claim NFTs through upgrades.

Use Cases

Issue non-transferable tickets as Claim Rights with time-locked execution. Users prove ownership to enter events without requiring centralized ticket validation systems.
// Create event ticket claim
const ticket = await factory.createClaimRight({
    name: "Tech Summit 2025 - VIP Pass",
    symbol: "SUMMIT-VIP",
    claimType: "TICKET",
    transferable: true, // Enable resale
    burnsOnExecution: false // Keep as proof of attendance
});

// Add time lock rule
await ticket.addRuleModule({
    moduleType: "TIME_LOCK",
    startTime: eventStartTimestamp,
    endTime: eventEndTimestamp
});
Claim Rights are experimental and have not undergone formal security audits. Use in production environments at your own risk. Thoroughly test rule module logic before deploying with real user entitlements.