SubscriptionManagerStorage

Git Source

Contains all storage variables for the subscription management system

Storage contract for SubscriptionManager diamond

State Variables

STORAGE_SLOT

bytes32 internal constant STORAGE_SLOT = keccak256("capsign.storage.billing");

SECONDS_IN_MONTH

uint256 internal constant SECONDS_IN_MONTH = 30 days;

DISCOUNT_DENOMINATOR

uint256 internal constant DISCOUNT_DENOMINATOR = 10000;

PRICING_DECIMALS

uint8 internal constant PRICING_DECIMALS = 6;

Functions

layout

Get the storage layout

function layout() internal pure returns (Layout storage l);

Returns

Name
Type
Description

l

Layout

The storage layout

getTier

Get a subscription tier

function getTier(uint8 tierLevel) internal view returns (SubscriptionTier storage tier);

Parameters

Name
Type
Description

tierLevel

uint8

The tier level

Returns

Name
Type
Description

tier

SubscriptionTier

The subscription tier

getSubscription

Get a subscriber's subscription

function getSubscription(address subscriber) internal view returns (Subscription storage subscription);

Parameters

Name
Type
Description

subscriber

address

The subscriber address

Returns

Name
Type
Description

subscription

Subscription

The subscription data

getTokenConfig

Get token configuration

function getTokenConfig(address token) internal view returns (TokenConfig storage tokenConfig);

Parameters

Name
Type
Description

token

address

The token address

Returns

Name
Type
Description

tokenConfig

TokenConfig

The token configuration

getAddressTierDiscount

Get address-specific tier discount

function getAddressTierDiscount(address subscriber, uint8 tierLevel) internal view returns (uint256 discount);

Parameters

Name
Type
Description

subscriber

address

The subscriber address

tierLevel

uint8

The tier level

Returns

Name
Type
Description

discount

uint256

The discount in basis points

setAddressTierDiscount

Set address-specific tier discount

function setAddressTierDiscount(address subscriber, uint8 tierLevel, uint256 discount) internal;

Parameters

Name
Type
Description

subscriber

address

The subscriber address

tierLevel

uint8

The tier level

discount

uint256

The discount in basis points

Structs

SubscriptionTier

struct SubscriptionTier {
    string name;
    uint256 monthlyFeeUSD;
    bool isActive;
}

Subscription

struct Subscription {
    uint8 tierLevel;
    uint256 nextPaymentDue;
    bool isActive;
    uint256 lastPaymentAmount;
    address lastPaymentToken;
}

TokenConfig

struct TokenConfig {
    bool accepted;
    uint8 decimals;
    bool isStablecoin;
}

Layout

struct Layout {
    IERC20 cmxToken;
    address swapRouter;
    address treasury;
    uint24 uniswapPoolFee;
    mapping(uint8 => SubscriptionTier) tiers;
    mapping(address => Subscription) subscribers;
    mapping(address => TokenConfig) acceptedTokens;
    mapping(address => mapping(uint8 => uint256)) addressTierDiscounts;
    uint256 cmxDiscountBasisPoints;
    bool initialized;
}

Last updated

Was this helpful?