Use Cases

Programmi Fedeltà

Sostituisci i punti fedeltà frammentati e isolati con token on-chain programmabili che i clienti possiedono davvero e con cui le aziende possono interoperare.

Il Problema con i Programmi Fedeltà Tradizionali

I punti scadono. Vivono in sistemi proprietari. I clienti non possono trasferirli. Le aziende non possono collaborare. Il risultato: bassi tassi di riscatto e clienti disimpegnati. La fedeltà on-chain cambia completamente il modello.

Vantaggi della Fedeltà On-Chain

Punti Trasferibili

I clienti possiedono i loro punti come token. Possono trasferirli, venderli o regalarli liberamente.

Coalizioni Multi-Brand

Più aziende accettano lo stesso token. Punti guadagnati da un brand, spesi da un altro.

Regole Programmabili

Ricompense a livelli, logica di scadenza, moltiplicatori bonus — tutto definito nel codice del contratto, non nei fogli di calcolo.

Prevenzione delle Frodi

L'emissione on-chain significa nessun punto duplicato, nessuna manipolazione. Ogni transazione è verificabile.

Esempio: Token Fedeltà

// LoyaltyToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";

contract LoyaltyToken is ERC20, AccessControl {
    bytes32 public constant ISSUER_ROLE = keccak256("ISSUER_ROLE");

    event PointsEarned(address indexed customer, uint256 amount, string reason);
    event PointsRedeemed(address indexed customer, uint256 amount, string reward);

    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _grantRole(ISSUER_ROLE, msg.sender);
    }

    function earn(address customer, uint256 amount, string calldata reason)
        external onlyRole(ISSUER_ROLE) {
        _mint(customer, amount);
        emit PointsEarned(customer, amount, reason);
    }

    function redeem(address customer, uint256 amount, string calldata reward)
        external onlyRole(ISSUER_ROLE) {
        _burn(customer, amount);
        emit PointsRedeemed(customer, amount, reward);
    }
}