IA / Economy /token_system.py
Barouia's picture
Update Economy/token_system.py
a8133c4 verified
Raw
History Blame Contribute Delete
6.87 kB
import asyncio
import json
import random
from typing import Dict, List, Any, Optional
from datetime import datetime
import logging
class BarouiaTokenEconomy:
"""
Système économique tokenisé Barouia
Gestion des tokens, récompenses et échanges internes
"""
def __init__(self):
self.logger = logging.getLogger("token_economy")
self.total_supply = 1000000
self.circulating_supply = 500000
self.token_holders = {}
self.transaction_history = []
self.token_value = 0.01
self.market_cap = self.circulating_supply * self.token_value
async def initialize(self):
"""Initialise l'économie tokenisée"""
self.logger.info("💰 Initialisation de l'économie tokenisée...")
try:
await self._load_token_data()
await self._setup_initial_distribution()
await self._start_market_simulation()
self.logger.info("✅ Économie tokenisée initialisée")
self.logger.info(f"📊 Market Cap: ${self.market_cap:,.2f}")
return True
except Exception as e:
self.logger.error(f"❌ Erreur d'initialisation économique: {e}")
return False
async def reward_user(self, user_id: str, action: str, value: float) -> Dict[str, Any]:
"""Récompense un utilisateur avec des tokens"""
reward_amount = await self._calculate_reward(action, value)
if user_id not in self.token_holders:
self.token_holders[user_id] = {
"balance": 0,
"first_interaction": datetime.now().isoformat(),
"total_earned": 0
}
# Distribution de la récompense
self.token_holders[user_id]["balance"] += reward_amount
self.token_holders[user_id]["total_earned"] += reward_amount
transaction = {
"type": "reward",
"user_id": user_id,
"amount": reward_amount,
"action": action,
"timestamp": datetime.now().isoformat(),
"token_value": self.token_value
}
self.transaction_history.append(transaction)
return {
"user_id": user_id,
"reward_amount": reward_amount,
"new_balance": self.token_holders[user_id]["balance"],
"transaction_hash": f"TX{len(self.transaction_history):08d}",
"usd_value": reward_amount * self.token_value
}
async def transfer_tokens(self, from_user: str, to_user: str, amount: float) -> Dict[str, Any]:
"""Transfère des tokens entre utilisateurs"""
# Vérification du solde
if from_user not in self.token_holders or self.token_holders[from_user]["balance"] < amount:
return {"error": "Solde insuffisant"}
# Initialisation du destinataire si nécessaire
if to_user not in self.token_holders:
self.token_holders[to_user] = {
"balance": 0,
"first_interaction": datetime.now().isoformat(),
"total_earned": 0
}
# Exécution du transfert
self.token_holders[from_user]["balance"] -= amount
self.token_holders[to_user]["balance"] += amount
transaction = {
"type": "transfer",
"from": from_user,
"to": to_user,
"amount": amount,
"timestamp": datetime.now().isoformat(),
"token_value": self.token_value
}
self.transaction_history.append(transaction)
return {
"success": True,
"from_balance": self.token_holders[from_user]["balance"],
"to_balance": self.token_holders[to_user]["balance"],
"transaction_hash": f"TX{len(self.transaction_history):08d}"
}
async def get_token_metrics(self) -> Dict[str, Any]:
"""Retourne les métriques du token"""
total_holders = len(self.token_holders)
active_holders = len([h for h in self.token_holders.values() if h["balance"] > 0])
return {
"token_name": "BAROUIA",
"total_supply": self.total_supply,
"circulating_supply": self.circulating_supply,
"token_value": self.token_value,
"market_cap": self.market_cap,
"total_holders": total_holders,
"active_holders": active_holders,
"transactions_count": len(self.transaction_history),
"daily_volume": await self._calculate_daily_volume()
}
async def stake_tokens(self, user_id: str, amount: float, duration_days: int) -> Dict[str, Any]:
"""Stake des tokens pour obtenir des récompenses"""
if user_id not in self.token_holders or self.token_holders[user_id]["balance"] < amount:
return {"error": "Solde insuffisant"}
# Calcul des récompenses de staking
apy = await self._calculate_apy(duration_days)
expected_reward = amount * (apy / 100) * (duration_days / 365)
stake_record = {
"user_id": user_id,
"amount": amount,
"duration_days": duration_days,
"start_date": datetime.now().isoformat(),
"expected_reward": expected_reward,
"apy": apy,
"status": "active"
}
return {
"stake_record": stake_record,
"estimated_reward": expected_reward,
"completion_date": await self._calculate_end_date(duration_days)
}
async def _calculate_reward(self, action: str, value: float) -> float:
"""Calcule la récompense basée sur l'action et la valeur"""
reward_weights = {
"quantum_thought": 10.0,
"world_generation": 25.0,
"temporal_prediction": 15.0,
"code_evolution": 20.0,
"system_interaction": 5.0,
"content_creation": 8.0
}
base_reward = reward_weights.get(action, 5.0)
value_multiplier = min(2.0, 1.0 + (value / 100))
return base_reward * value_multiplier * random.uniform(0.8, 1.2)
async def _calculate_apy(self, duration_days: int) -> float:
"""Calcule le APY pour le staking"""
base_apy = 5.0 # 5% de base
duration_bonus = min(10.0, duration_days / 36.5) # Max 10% bonus
return base_apy + duration_bonus
async def _calculate_daily_volume(self) -> float:
"""Calcule le volume quotidien des transactions"""
today = datetime.now().date()
today_transactions = [
t for t in self.transaction_history
if datetime.fromisoformat(t["timestamp