- Création lib/platformCommissions.ts : configuration centralisée des commissions - Articles : 800 sats (700 auteur, 100 plateforme) - Avis : 70 sats (49 lecteur, 21 plateforme) - Sponsoring : 0.046 BTC (0.042 auteur, 0.004 plateforme) - Validation des montants à chaque étape : - Publication : vérification du montant avant publication - Paiement : vérification du montant avant acceptation - Erreurs explicites si montant incorrect - Tracking des commissions sur Nostr : - Tags author_amount et platform_commission dans événements - Interface ContentDeliveryTracking étendue - Traçabilité complète pour audit - Logs structurés avec informations de commission - Documentation complète du système Les commissions sont maintenant systématiques, validées et traçables.
106 lines
5.9 KiB
TypeScript
106 lines
5.9 KiB
TypeScript
interface MnemonicIcon {
|
|
name: string
|
|
emoji: string
|
|
}
|
|
|
|
const FRUITS: MnemonicIcon[] = [
|
|
{ name: 'apple', emoji: '🍎' }, { name: 'banana', emoji: '🍌' }, { name: 'orange', emoji: '🍊' },
|
|
{ name: 'grape', emoji: '🍇' }, { name: 'strawberry', emoji: '🍓' }, { name: 'watermelon', emoji: '🍉' },
|
|
{ name: 'pineapple', emoji: '🍍' }, { name: 'mango', emoji: '🥭' }, { name: 'peach', emoji: '🍑' },
|
|
{ name: 'cherry', emoji: '🍒' }, { name: 'pear', emoji: '🍐' }, { name: 'kiwi', emoji: '🥝' },
|
|
{ name: 'lemon', emoji: '🍋' }, { name: 'coconut', emoji: '🥥' }, { name: 'avocado', emoji: '🥑' },
|
|
{ name: 'tomato', emoji: '🍅' }, { name: 'eggplant', emoji: '🍆' }, { name: 'corn', emoji: '🌽' },
|
|
{ name: 'pepper', emoji: '🌶️' }, { name: 'cucumber', emoji: '🥒' }, { name: 'carrot', emoji: '🥕' },
|
|
{ name: 'broccoli', emoji: '🥦' }, { name: 'lettuce', emoji: '🥬' }, { name: 'potato', emoji: '🥔' },
|
|
{ name: 'onion', emoji: '🧅' }, { name: 'mushroom', emoji: '🍄' }, { name: 'peanuts', emoji: '🥜' },
|
|
{ name: 'chestnut', emoji: '🌰' }, { name: 'bread', emoji: '🍞' }, { name: 'croissant', emoji: '🥐' },
|
|
{ name: 'baguette', emoji: '🥖' }, { name: 'pretzel', emoji: '🥨' }, { name: 'pancakes', emoji: '🥞' },
|
|
]
|
|
|
|
const PLANTS: MnemonicIcon[] = [
|
|
{ name: 'rose', emoji: '🌹' }, { name: 'tulip', emoji: '🌷' }, { name: 'sunflower', emoji: '🌻' },
|
|
{ name: 'hibiscus', emoji: '🌺' }, { name: 'cherry_blossom', emoji: '🌸' }, { name: 'blossom', emoji: '🌼' },
|
|
{ name: 'bouquet', emoji: '💐' }, { name: 'maple_leaf', emoji: '🍁' }, { name: 'fallen_leaf', emoji: '🍂' },
|
|
{ name: 'leaf', emoji: '🍃' }, { name: 'herb', emoji: '🌿' }, { name: 'shamrock', emoji: '☘️' },
|
|
{ name: 'four_leaf_clover', emoji: '🍀' }, { name: 'bamboo', emoji: '🎋' }, { name: 'tanabata_tree', emoji: '🎋' },
|
|
{ name: 'palm_tree', emoji: '🌴' }, { name: 'cactus', emoji: '🌵' }, { name: 'evergreen_tree', emoji: '🌲' },
|
|
{ name: 'deciduous_tree', emoji: '🌳' }, { name: 'seedling', emoji: '🌱' }, { name: 'potted_plant', emoji: '🪴' },
|
|
{ name: 'wheat', emoji: '🌾' }, { name: 'rice', emoji: '🌾' }, { name: 'barley', emoji: '🌾' },
|
|
{ name: 'oak', emoji: '🌳' }, { name: 'pine', emoji: '🌲' }, { name: 'cedar', emoji: '🌲' },
|
|
{ name: 'birch', emoji: '🌳' }, { name: 'willow', emoji: '🌳' }, { name: 'elm', emoji: '🌳' },
|
|
]
|
|
|
|
const ANIMALS: MnemonicIcon[] = [
|
|
{ name: 'dog', emoji: '🐕' }, { name: 'cat', emoji: '🐈' }, { name: 'mouse', emoji: '🐭' },
|
|
{ name: 'hamster', emoji: '🐹' }, { name: 'rabbit', emoji: '🐰' }, { name: 'fox', emoji: '🦊' },
|
|
{ name: 'bear', emoji: '🐻' }, { name: 'panda', emoji: '🐼' }, { name: 'koala', emoji: '🐨' },
|
|
{ name: 'tiger', emoji: '🐯' }, { name: 'lion', emoji: '🦁' }, { name: 'cow', emoji: '🐮' },
|
|
{ name: 'pig', emoji: '🐷' }, { name: 'frog', emoji: '🐸' }, { name: 'monkey', emoji: '🐵' },
|
|
{ name: 'chicken', emoji: '🐔' }, { name: 'penguin', emoji: '🐧' }, { name: 'bird', emoji: '🐦' },
|
|
{ name: 'duck', emoji: '🦆' }, { name: 'eagle', emoji: '🦅' }, { name: 'owl', emoji: '🦉' },
|
|
{ name: 'bat', emoji: '🦇' }, { name: 'wolf', emoji: '🐺' }, { name: 'boar', emoji: '🐗' },
|
|
{ name: 'horse', emoji: '🐴' }, { name: 'unicorn', emoji: '🦄' }, { name: 'bee', emoji: '🐝' },
|
|
{ name: 'bug', emoji: '🐛' }, { name: 'butterfly', emoji: '🦋' }, { name: 'snail', emoji: '🐌' },
|
|
{ name: 'shell', emoji: '🐚' }, { name: 'turtle', emoji: '🐢' }, { name: 'snake', emoji: '🐍' },
|
|
{ name: 'dragon', emoji: '🐲' }, { name: 'sauropod', emoji: '🦕' }, { name: 't-rex', emoji: '🦖' },
|
|
{ name: 'whale', emoji: '🐋' }, { name: 'dolphin', emoji: '🐬' }, { name: 'fish', emoji: '🐟' },
|
|
{ name: 'tropical_fish', emoji: '🐠' }, { name: 'blowfish', emoji: '🐡' }, { name: 'shark', emoji: '🦈' },
|
|
{ name: 'octopus', emoji: '🐙' }, { name: 'spiral_shell', emoji: '🐚' }, { name: 'crab', emoji: '🦀' },
|
|
{ name: 'lobster', emoji: '🦞' }, { name: 'shrimp', emoji: '🦐' }, { name: 'squid', emoji: '🦑' },
|
|
{ name: 'elephant', emoji: '🐘' }, { name: 'rhino', emoji: '🦏' }, { name: 'hippo', emoji: '🦛' },
|
|
{ name: 'giraffe', emoji: '🦒' }, { name: 'zebra', emoji: '🦓' }, { name: 'deer', emoji: '🦌' },
|
|
{ name: 'camel', emoji: '🐫' }, { name: 'llama', emoji: '🦙' }, { name: 'goat', emoji: '🐐' },
|
|
{ name: 'ram', emoji: '🐏' }, { name: 'sheep', emoji: '🐑' }, { name: 'chipmunk', emoji: '🐿️' },
|
|
]
|
|
|
|
const ALL_ICONS: MnemonicIcon[] = [...FRUITS, ...PLANTS, ...ANIMALS]
|
|
|
|
function expandDictionary(): MnemonicIcon[] {
|
|
const expanded: MnemonicIcon[] = []
|
|
const base = ALL_ICONS.length
|
|
const variants = ['', '🌙', '⭐', '✨', '💫', '🌟', '💎', '🔮', '⚡', '🔥']
|
|
|
|
for (let i = 0; i < 3000; i++) {
|
|
const baseIndex = i % base
|
|
const variantIndex = Math.floor(i / base) % variants.length
|
|
const baseIcon = ALL_ICONS[baseIndex]
|
|
|
|
if (variantIndex === 0) {
|
|
expanded.push(baseIcon)
|
|
} else {
|
|
expanded.push({
|
|
name: `${baseIcon.name}_${variantIndex}`,
|
|
emoji: `${baseIcon.emoji}${variants[variantIndex]}`,
|
|
})
|
|
}
|
|
}
|
|
|
|
return expanded
|
|
}
|
|
|
|
const DICTIONARY = expandDictionary()
|
|
|
|
function hashString(str: string): number {
|
|
let hash = 0
|
|
for (let i = 0; i < str.length; i++) {
|
|
const char = str.charCodeAt(i)
|
|
hash = ((hash << 5) - hash) + char
|
|
hash = hash & hash
|
|
}
|
|
return Math.abs(hash)
|
|
}
|
|
|
|
export function generateMnemonicIcons(pubkey: string): string[] {
|
|
const baseHash = hashString(pubkey)
|
|
const icons: string[] = []
|
|
|
|
for (let i = 0; i < 4; i++) {
|
|
const segment = pubkey.slice(i * 8, (i + 1) * 8) || pubkey.slice(-8)
|
|
const segmentHash = hashString(segment)
|
|
const combinedHash = (baseHash + segmentHash + i * 1000) % DICTIONARY.length
|
|
icons.push(DICTIONARY[combinedHash].emoji)
|
|
}
|
|
|
|
return icons
|
|
}
|