// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title WambliSovereignPass (WMB-PASS) * @notice Contract Inteligent Oficial cu Preț Fix în USDC (Zero Speculație / Zero Volatilitate "Sus-Jos") * @dev Inspirat din modelul de abonament verificat: intră doar abonații activi și instituțiile educaționale. * 90% din fiecare abonament merge instantaneu în Seiful Suveran (0xae59947267761B521EBaB71f000277DffFB5c83B) * 10% merge în Rezerva de Extindere a Hostului (controlată 100% de același Proprietar Suveran). */ interface IERC20 { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); } contract WambliSovereignPass { string public constant name = "Wambli Sovereign Access Pass"; string public constant symbol = "WMB-PASS"; string public constant version = "1.0.0"; address public immutable sovereignOwner; address public treasuryVault; address public hostScalingReserve; IERC20 public immutable stableTokenUsdc; struct Tier { string name; uint256 priceUsdc6Decimals; // Preț fix în USDC (6 zecimale: ex. 9 USDC = 9_000_000) uint256 durationSeconds; bool active; } struct SubscriberPass { uint256 passId; uint8 tierId; uint256 expiresAt; uint256 totalContributedUsdc; bytes32 workspaceHash; } uint256 public nextPassId = 1; uint256 public totalStableCapitalInflowUsdc = 0; mapping(uint8 => Tier) public tiers; mapping(address => SubscriberPass) public subscriberPasses; event PassActivated( address indexed subscriber, uint256 indexed passId, uint8 tierId, uint256 amountUsdc, uint256 vaultShare90, uint256 hostReserveShare10, uint256 expiresAt ); modifier onlyOwner() { require(msg.sender == sovereignOwner, "Wambli: Doar Proprietarul Suveran"); _; } constructor(address _usdcTokenAddress) { sovereignOwner = 0xae59947267761B521EBaB71f000277DffFB5c83B; treasuryVault = 0xae59947267761B521EBaB71f000277DffFB5c83B; hostScalingReserve = 0xae59947267761B521EBaB71f000277DffFB5c83B; stableTokenUsdc = IERC20(_usdcTokenAddress); // Pachetele Oficiale cu Preț Fix (Fără volatilitate speculativă) tiers[1] = Tier("Scut Familial Offline", 5_000_000, 30 days, true); // 5 USDC tiers[2] = Tier("Constructor Suveran", 9_000_000, 30 days, true); // 9 USDC tiers[3] = Tier("Arhitect Web 4.0 & Wambli Pro", 29_000_000, 30 days, true);// 29 USDC tiers[4] = Tier("Scut Industrial & IMM", 39_000_000, 30 days, true); // 39 USDC tiers[5] = Tier("Nod Institutional & Swarm", 79_000_000, 30 days, true); // 79 USDC tiers[6] = Tier("Infrastructura Critica", 99_000_000, 30 days, true); // 99 USDC } /** * @notice Achită abonamentul la preț fix în USDC și activează instantaneu Permisul Wambli (WMB-PASS) */ function subscribeFixedUsdc(uint8 tierId, bytes32 workspaceHash) external returns (uint256) { Tier memory t = tiers[tierId]; require(t.active && t.priceUsdc6Decimals > 0, "Wambli: Pachet inactiv"); uint256 amount = t.priceUsdc6Decimals; uint256 vaultShare90 = (amount * 90) / 100; uint256 hostShare10 = amount - vaultShare90; require(stableTokenUsdc.transferFrom(msg.sender, treasuryVault, vaultShare90), "Transfer 90% Seif esuat"); if (hostShare10 > 0) { require(stableTokenUsdc.transferFrom(msg.sender, hostScalingReserve, hostShare10), "Transfer 10% Host esuat"); } SubscriberPass storage p = subscriberPasses[msg.sender]; if (p.passId == 0) { p.passId = nextPassId++; } uint256 baseTime = p.expiresAt > block.timestamp ? p.expiresAt : block.timestamp; p.tierId = tierId; p.expiresAt = baseTime + t.durationSeconds; p.totalContributedUsdc += amount; p.workspaceHash = workspaceHash; totalStableCapitalInflowUsdc += amount; emit PassActivated(msg.sender, p.passId, tierId, amount, vaultShare90, hostShare10, p.expiresAt); return p.passId; } /** * @notice Verifică dacă un abonat are permisul WMB-PASS activ (pentru accesul la nodul Wambli) */ function isSubscriberActive(address user) external view returns (bool active, uint8 tierId, uint256 expiresAt) { SubscriberPass memory p = subscriberPasses[user]; return (p.expiresAt > block.timestamp, p.tierId, p.expiresAt); } }