{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"PERS Tokenomics"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"pers-tokenomics","__idx":0},"children":["PERS Tokenomics"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide explains ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["how reward tokens are issued"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["how tokens are spent"]}," across the PERS platform. It complements the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/3.dictionary"},"children":["Terminology Dictionary"]}," with the economic model that governs every token movement."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Tokenomics in PERS answers two questions for every transaction:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Issuance"]}," — when a user earns a reward, ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["who"]}," creates or provides the token, and at ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["whose"]}," cost?"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Spend"]}," — when a user spends a token, is it ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["transferred"]}," to a business or ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["destroyed"]},"?"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1-token-types-recap","__idx":1},"children":["1. Token types recap"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Type"},"children":["Type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Standard"},"children":["Standard"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Typical use"},"children":["Typical use"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Supply model"},"children":["Supply model"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Credits / Points"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ERC20"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Everyday earning & spending balance"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Fungible, divisible"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Rewards"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ERC1155"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Real-world experiences, products, multi-copy rewards sharing one design"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Semi-fungible"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Status Tokens"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ERC721"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unique, personalised vouchers, tickets, stamps & memberships — each carries its own metadata (recipient, seat, artwork, expiry)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Non-fungible, 1-of-1"]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Names match the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/3.dictionary"},"children":["Terminology Dictionary"]},". \"Ticket\", \"stamp\", and \"voucher\" below are ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["use cases"]}," of these types, not separate token types. Because ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Status Tokens (ERC721)"]}," are unique, each one can hold individual metadata — which is what makes them ideal for personalised, single-use vouchers and event tickets."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two flags on the issuing ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Business"]}," drive the economics:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken"]}]}," — whether the platform mints new ERC20 supply on the business's behalf (delegated), or the business funds rewards from its own balance."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canChargeToken"]}]}," — whether the business is allowed to pull (charge) tokens from a user at the point of sale."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2-reward-issuance--tokenissuancemode","__idx":2},"children":["2. Reward issuance — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TokenIssuanceMode"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Whenever a user earns a reward (via a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["campaign claim"]}," or a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["redemption reward"]},"), the platform records ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["how"]}," it was economically issued on the transaction as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode"]},". This value is resolved automatically at claim/redeem time — integrators never set it directly."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"decision-matrix","__idx":3},"children":["Decision matrix"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Token"},"children":["Token"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Condition"},"children":["Condition"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"issuanceMode"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"On-chain executor"},"children":["On-chain executor"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Web3 type"},"children":["Web3 type"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ERC20"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken = true"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TENANT_DELEGATED_MINT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tenant master wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINT"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ERC20"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken = false"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_BALANCE_TRANSFER"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business custodial wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSFER"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["NFT (721/1155)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["metadata.ownerBusinessId"]}," matches the engaging business"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_OWNED_MINT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business custodial wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINT"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["NFT (721/1155)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No business-ownership match"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TENANT_DELEGATED_MINT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Tenant master wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINT"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Any"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Non-reward transaction (plain transfer/burn)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["—"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"what-each-mode-means","__idx":4},"children":["What each mode means"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TENANT_DELEGATED_MINT"]}]}," (default)"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The tenant (platform) master wallet mints new supply. The platform absorbs the gas/minting cost."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Applies to all NFTs without a business owner, and to ERC20 tokens where the business is allowed delegated minting."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_OWNED_MINT"]}]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The business owns the NFT template (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TokenMetadata.ownerBusinessId"]},"). Its custodial smart wallet is the on-chain ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["msg.sender"]}," for the mint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINTER_ROLE"]}," is granted to the business wallet ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["eagerly"]},", at the moment metadata ownership is assigned (see §4), so minting works instantly at claim time."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_BALANCE_TRANSFER"]}]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No new supply is created. The business transfers ERC20 tokens ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["from its own on-chain balance"]}," to the user."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The cap is the business wallet's balance; a balance pre-check is enforced before submission."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Used when the business is ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["not"]}," permitted delegated minting (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken = false"]},")."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Wallet routing:"]}," For ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_OWNED_MINT"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_BALANCE_TRANSFER"]},", the business custodial smart wallet signs via the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["EIP-712 meta-transaction path"]},". Non-custodial business wallets fall back to the tenant master wallet (EIP-1559) for backward compatibility."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3-spending-tokens--transfer-vs-burn","__idx":5},"children":["3. Spending tokens — transfer vs burn"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Spending semantics depend on the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["token type"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["who is spending"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"point-of-sale-charge-business-charges-a-user","__idx":6},"children":["Point-of-sale charge (business charges a user)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a business pulls tokens from a user (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sender = user"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient = business"]},", requires ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canChargeToken = true"]},"), ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["the caller decides what happens to the token"]}," via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["web3TransactionType"]},". If it isn't set explicitly, the platform infers it from whether a recipient is present:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient"]}," present → ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TRANSFER"]}," (to the business wallet)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient"]}," absent → ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BURN"]}," (destroyed on-chain)"]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Token type"},"children":["Token type"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Recommended behavior"},"children":["Recommended behavior"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"When to use"},"children":["When to use"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ERC20"]}," (credit/points)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TRANSFER"]}," to business wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Always — points are fungible value the business reuses"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ERC721 / ERC1155"]}," (ticket/stamp — consumed)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BURN"]}," — omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User presents a single-use ticket, stamp, or voucher; it is destroyed on-chain"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ERC721 / ERC1155"]}," (NFT — custody transfer)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TRANSFER"]}," to business wallet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Business takes custody (trade, deposit, secondary market)"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both paths are valid and fully supported. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canChargeToken"]}," guard is the only authorization check — what happens to the token on-chain is your design decision."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"redemption-spend","__idx":7},"children":["Redemption spend"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a user redeems (pays credit tokens for a reward), the spend flows ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["USER → BUSINESS"]},":"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Recipient priority: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redemption.ownerBusinessId"]}," → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dto.businessId"]}," → tenant fallback."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Business-owned redemptions always carry ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ownerBusinessId"]},", so the spend always reaches the owning business."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The reward the user receives in return is issued using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TokenIssuanceMode"]}," matrix above."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"4-business-minting-rights--minter_role-","__idx":8},"children":["4. Business minting rights (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINTER_ROLE"]},")"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_OWNED_MINT"]}," to work, the business's custodial smart wallet must hold ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINTER_ROLE"]}," on the NFT contract."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The role is granted ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["automatically and eagerly"]}," when an NFT ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TokenMetadata.ownerBusinessId"]}," is set (on create) or changed (on update)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The grant runs on ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["both testnet and mainnet"]}," contracts if both are configured."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["It is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["retried"]}," up to 3 times with exponential backoff (1s / 2s / 4s). A persistent failure surfaces to the API caller so the operation can be retried, rather than silently leaving the business unable to mint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The grant is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["idempotent"]}," on-chain — re-granting an already-held role is a no-op."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"5-transaction-record-fields","__idx":9},"children":["5. Transaction record fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every transaction exposes the following tokenomics-relevant fields via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TransactionDTO"]},":"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Meaning"},"children":["Meaning"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MINT"]}," | ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSFER"]}," | ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BURN"]}," — the on-chain operation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TENANT_DELEGATED_MINT"]}," | ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_OWNED_MINT"]}," | ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BUSINESS_BALANCE_TRANSFER"]}," | ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["engagedBusinessId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The business economically attributed to the transaction (for analytics)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["triggerProcessType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CAMPAIGN_USER_CLAIM"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REDEMPTION_SPEND"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REDEMPTION_RECEIVE"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SPEND"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSFER"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode"]}," is intended for ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["audit, analytics, and AML reporting"]}," — it records economic intent/attribution independent of the on-chain executor."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"6-worked-examples","__idx":10},"children":["6. Worked examples"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["A. Café gives loyalty points (delegated ERC20 mint)"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Business ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken = true"]},", token is ERC20."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User claims → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode = TENANT_DELEGATED_MINT"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type = MINT"]},", minted by tenant master wallet."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B. Brand funds cashback from its own treasury (ERC20 transfer)"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Business ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["canMintToken = false"]},", token is ERC20."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User claims → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode = BUSINESS_BALANCE_TRANSFER"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type = TRANSFER"]},", sent from the business wallet balance."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["C. Museum issues its own NFT ticket (business-owned mint)"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["NFT metadata ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ownerBusinessId = museum"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User claims → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["issuanceMode = BUSINESS_OWNED_MINT"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type = MINT"]},", minted by the museum's custodial wallet (MINTER_ROLE pre-granted)."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["D. User redeems points for a coffee"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User pays ERC20 credits → ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRANSFER"]}," USER → BUSINESS (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REDEMPTION_SPEND"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["User receives a reward token issued per the matrix (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REDEMPTION_RECEIVE"]},")."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["E. User presents an NFT ticket at the gate (consumed)"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Business charges the NFT → caller passes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["web3TransactionType: \"BURN\""]},", no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient"]}," → ticket destroyed on-chain."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["F. User deposits an NFT to a business (custody transfer)"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Business charges the NFT → caller passes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["web3TransactionType: \"TRANSFER\""]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipient = business"]}," → NFT moves to the business wallet."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All of this is resolved automatically by the platform"]}," — integrators create campaigns, redemptions, and transactions using the standard endpoints, and PERS records the correct issuance mode and spend semantics."]}]},"headings":[{"value":"PERS Tokenomics","id":"pers-tokenomics","depth":1},{"value":"1. Token types recap","id":"1-token-types-recap","depth":2},{"value":"2. Reward issuance — TokenIssuanceMode","id":"2-reward-issuance--tokenissuancemode","depth":2},{"value":"Decision matrix","id":"decision-matrix","depth":3},{"value":"What each mode means","id":"what-each-mode-means","depth":3},{"value":"3. Spending tokens — transfer vs burn","id":"3-spending-tokens--transfer-vs-burn","depth":2},{"value":"Point-of-sale charge (business charges a user)","id":"point-of-sale-charge-business-charges-a-user","depth":3},{"value":"Redemption spend","id":"redemption-spend","depth":3},{"value":"4. Business minting rights ( MINTER_ROLE )","id":"4-business-minting-rights--minter_role-","depth":2},{"value":"5. Transaction record fields","id":"5-transaction-record-fields","depth":2},{"value":"6. Worked examples","id":"6-worked-examples","depth":2}],"frontmatter":{"seo":{"title":"PERS Tokenomics"}},"lastModified":"2026-07-24T12:04:41.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/4.tokenomics","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}