montana/Русский/Бот/test_phone.py

183 lines
7.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Тест телефонной системы Montana Protocol
"""
import sys
from pathlib import Path
# Add parent to path
sys.path.insert(0, str(Path(__file__).parent))
from montana_auction import (
get_auction_registry,
get_phone_service,
get_call_pricing_service,
ServiceType
)
def test_phone_numbers():
"""Тест регистрации виртуальных номеров"""
print("=" * 70)
print("Montana Phone Service — Virtual Numbers Test")
print("=" * 70)
data_dir = Path(__file__).parent / "data_test"
phones = get_phone_service(data_dir)
auction = get_auction_registry(data_dir)
# 1. Проверить текущую цену
print("\n1. Текущая цена номера:")
price = auction.get_current_price(ServiceType.PHONE_NUMBER)
sold = auction.get_total_sold(ServiceType.PHONE_NUMBER)
print(f" Следующий номер: {price} Ɉ")
print(f" Уже продано: {sold}")
# 2. Зарегистрировать несколько номеров
print("\n2. Регистрация номеров через аукцион:")
test_numbers = [1, 2, 3, 42, 100]
for num in test_numbers:
price = auction.get_current_price(ServiceType.PHONE_NUMBER)
formatted = phones.format_number(num)
if phones.is_available(num):
result = phones.register(
number=num,
owner_address=f"mt{'0' * 38}{num:02d}",
price_paid=price
)
print(f"{formatted}{price:4d} Ɉ (Purchase #{result['purchase_number']})")
else:
print(f"{formatted} — Already taken")
# 3. Обновленная статистика
print("\n3. Статистика после регистрации:")
price = auction.get_current_price(ServiceType.PHONE_NUMBER)
sold = auction.get_total_sold(ServiceType.PHONE_NUMBER)
print(f" Следующий номер: {price} Ɉ")
print(f" Уже продано: {sold}")
# 4. Lookup номеров
print("\n4. Lookup зарегистрированных номеров:")
for num in [1, 2, 42]:
info = phones.lookup(num)
if info:
formatted = phones.format_number(num)
print(f" {formatted}{info['owner'][:16]}... ({info['price_paid']} Ɉ)")
print("\n" + "=" * 70)
def test_call_pricing():
"""Тест ценообразования звонков"""
print("\n" + "=" * 70)
print("Montana Call Pricing Test")
print("=" * 70)
print("\n📞 Модель ценообразования Montana Protocol:")
print(" • Если у тебя есть номер → Фиксированная цена: 1 Ɉ/сек")
print(" • Аудио звонки: 1 Ɉ за секунду")
print(" • Видео звонки: 1 Ɉ за секунду")
print(" • Номер работает как 'подписка' на фиксированную цену")
# Примеры расчета стоимости
durations = [60, 300, 600, 1800, 3600] # 1min, 5min, 10min, 30min, 1hr
print("\n1. Стоимость аудио звонков (1 Ɉ/сек):")
for duration in durations:
cost = duration * 1 # Fixed: 1 Ɉ per second
minutes = duration // 60
print(f" {minutes:3d} минут ({duration:5d} сек) = {cost:5d} Ɉ = ${cost * 0.1605:.2f} USD")
print("\n2. Стоимость видео звонков (1 Ɉ/сек):")
for duration in durations:
cost = duration * 1 # Fixed: 1 Ɉ per second
minutes = duration // 60
print(f" {minutes:3d} минут ({duration:5d} сек) = {cost:5d} Ɉ = ${cost * 0.1605:.2f} USD")
print("\n" + "=" * 70)
def test_economics():
"""Тест экономической модели"""
print("\n" + "=" * 70)
print("Montana Economics — Phone Number Auction Model")
print("=" * 70)
print("\n💰 Аукционная модель номеров:")
print(" • 1-й номер: 1 Ɉ")
print(" • 2-й номер: 2 Ɉ")
print(" • N-й номер: N Ɉ")
print("\n📊 Примеры покупки номеров:")
numbers = [1, 10, 42, 100, 1000, 10000]
for n in numbers:
price = n # N-th number costs N Ɉ
usd = price * 0.1605
print(f" Номер #{n:5d}: {price:6d} Ɉ = ${usd:8.2f} USD")
print("\n💡 Экономика сети:")
print(" После покупки номера за N Ɉ:")
print("Все звонки: фиксированная цена 1 Ɉ/сек")
print(" → Аудио и видео одинаково")
print(" → Номер = кошелек (Montana адрес)")
# Расчет выручки от первых N номеров
print("\n📈 Выручка от продажи номеров:")
for count in [100, 1000, 10000]:
revenue = count * (count + 1) // 2 # Sum of 1+2+...+N
usd = revenue * 0.1605
print(f" Первые {count:5d} номеров: {revenue:10d} Ɉ = ${usd:12,.2f} USD")
print("\n" + "=" * 70)
def demo_call_scenario():
"""Демонстрация сценария звонка"""
print("\n" + "=" * 70)
print("Montana Call Scenario Demo")
print("=" * 70)
print("\n👤 Алиса (alice@efir.org):")
print(" 1. Регистрирует домен 'alice' → 6 Ɉ (6-й домен)")
print(" 2. Покупает номер +montana-000042 → 42 Ɉ (42-й номер)")
print(" 3. Теперь может звонить по 1 Ɉ/сек")
print("\n👤 Боб (bob@efir.org):")
print(" 1. Регистрирует домен 'bob' → 7 Ɉ (7-й домен)")
print(" 2. Покупает номер +montana-000043 → 43 Ɉ (43-й номер)")
print(" 3. Теперь может звонить по 1 Ɉ/сек")
print("\n📞 Алиса звонит Бобу:")
print(" • Длительность: 5 минут (300 секунд)")
print(" • Тип: видео звонок")
print(" • Стоимость: 300 × 1 Ɉ = 300 Ɉ")
print("В USD: 300 × $0.1605 = $48.15 USD")
print(" • Списано с баланса Алисы: 300 Ɉ")
print("\n💡 Итого Алиса потратила:")
domain_cost = 6
phone_cost = 42
call_cost = 300
total = domain_cost + phone_cost + call_cost
total_usd = total * 0.1605
print(f" Домен alice@efir.org: {domain_cost:4d} Ɉ")
print(f" Номер +montana-000042: {phone_cost:4d} Ɉ")
print(f" Видео звонок 5 минут: {call_cost:4d} Ɉ")
print(f" {'' * 40}")
print(f" Итого: {total:4d} Ɉ = ${total_usd:.2f} USD")
print("\n" + "=" * 70)
if __name__ == '__main__':
test_phone_numbers()
test_call_pricing()
test_economics()
demo_call_scenario()
print("\n✓ All phone tests passed!")