Réalisations

Pronostiquer gratuitement, avec quelque chose à perdre.

Cage Calls est le marché de prédiction d'Armored MMA : les fans votent gratuitement sur l'issue de chaque combat et repartent avec des Relics, les NFT qui composent l'archive on-chain des victoires de la ligue. zKorp a construit et opère toute la couche on-chain : les contrats, le SDK, l'application de marché et l'appchain qui porte l'ensemble.

Rôle
Couche on-chain de bout en bout
Durée
14 mois, depuis juillet 2025
Stack
Cairo · Dojo · React · AWS
Réseau
Starknet mainnet · appchain Katana/Torii
/cage-calls/cage-calls-hero-desktop.webp · 1800 × 1125

L'application de marché : les cotes qui bougent pendant la carte, l'historique de chaque combat, la collection de Relics.

Le problème

Un marché gratuit s'effondre sur le consensus

Quand se tromper ne coûte rien, tout le monde vote pour le favori et le marché ne dit plus rien. C'est la maladie des marchés de prédiction gratuits. MediEvil Tech voulait la traiter sans lancer de token et sans demander un centime aux joueurs. Ces deux portes fermées d'entrée écartaient les réponses habituelles.

La solution

Remettre un coût sur le fait d'avoir tort.

Un pronostic juste donne un Relic, toujours. Ce qui se gagne et se perd, c'est la rareté. Les STRIKES sont distribués selon le moment où le joueur prend position par rapport au marché, et ce sont eux qui déterminent son exposition aux Relics rares. Il ne suffit plus d'avoir raison. Il faut avoir raison tôt, souvent à contre-courant. Le marché redevient un signal.

01
Voter, gratuitement

Un vote par combat, ouvert jusqu'au début du troisième round. Aucune mise, aucun token, aucun portefeuille à approvisionner.

02
Encaisser ses STRIKES

Chaque pronostic juste vaut un Relic. Le nombre de STRIKES dépend du moment de l'engagement. Tôt et à contre-courant, on en récolte davantage.

03
Tenter, ou garder

Chaque STRIKE révèle un Relic du pool. On le garde et on jette les STRIKES restants, ou on retente pour plus rare, jamais deux fois le même. Le dernier STRIKE réclame automatiquement, donc personne ne repart les mains vides.

/cage-calls/cage-calls-flow.webp · 2000 × 604

D'un vote à un Relic : le combat se termine, l'oracle tranche, le pool est frappé d'après le nombre de pronostics justes, et les STRIKES ouvrent le gacha.

Ce qu'on a construit

Toute la couche on-chain, et la chaîne sous les pieds.

Les contrats

Marchés et tokens conditionnels, fight factory, registre des combattants, oracle de résultat, STRIKES en ERC-1155 non transférables, gacha et le Relic NFT lui-même. Environ 18 600 lignes de Cairo et 324 tests sur 12 suites.

L'offre pilotée par l'engagement

Le pool d'un combat n'est pas fixé d'avance. Il est frappé d'après le nombre de pronostics justes. Sous huit gagnants, un Relic chacun, du plus rare au moins rare ; au-delà, le Shiny reste unique et les classes se répartissent en proportion. Le total égale toujours le nombre de gagnants.

Une rareté vérifiable

Le tirage du gacha passe par le VRF de Cartridge, le repli pseudo-aléatoire étant coupé sur mainnet. Le Relic révélé reste sous séquestre tant qu'il n'est pas réclamé, et il ne retourne au pool qu'après le tirage suivant. C'est ce qui garantit qu'on ne peut jamais retomber sur le même.

L'application de marché

Reprise d'un prototype pour en faire une base sur laquelle une équipe peut continuer à livrer, puis remise aux couleurs d'Armored MMA. Environ 14 400 lignes de TypeScript sur 93 fichiers, en Vite, React, Tailwind et Radix.

Le SDK

Un paquet publié par lequel l'app mobile du client et l'application de marché lisent la chaîne, pour qu'elles ne divergent jamais sur l'état d'un marché ou d'un Relic. Onze versions en trois semaines, et une vérification qui casse la CI si l'app lit en contournant le SDK.

L'appchain

Quand le testnet hébergé a cessé d'être maintenu, on a rapatrié la chaîne plutôt que d'attendre la roadmap d'un tiers. Katana et Torii auto-hébergés sur AWS, chain ID dédié, paymaster épinglé, sidecar VRF, et un déploiement d'indexeur en blue/green en production.

+25 %
de votes et d'utilisateurs d'un événement au suivant
> 35 %
de rétention entre deux soirées de combat
11
contrats Cairo en production sur Starknet mainnet
0
incident de sécurité, aucun fonds perdu
L'expérience

La blockchain, invisible

Les joueurs viennent du web2 et entrent par l'application Armored MMA. Au premier vote, un Controller Cartridge se crée tout seul (mot de passe, passkey ou login social), avec clés de session et paymaster. Ils jouent gratuitement et possèdent leurs Relics sans jamais voir passer une transaction. Cette promesse ne tient que si le gas ne s'épuise pas. C'est pour ça qu'on a livré une console paymaster sur mainnet, avec recharge de slot et alarme de budget bas.

/cage-calls/cage-calls-mobile-vote.webp · 780 × 1688
/cage-calls/cage-calls-mobile-relics.webp · 780 × 1688
La mise en production

Trois portes avant de toucher la chaîne

Les combats ont lieu à date fixe, devant un public. Un chemin de lecture cassé pendant le combat principal ne se rattrape pas après coup. Deux montées de version sont parties sur mainnet en août 2026 ; les deux ont suivi le même runbook, et l'ordre compte.

  1. 01
    Prouver à vide

    Suite de tests complète, comparaison statique avec les classes déployées, et une vérification on-chain qui doit répondre « ready ». Aucune écriture tant que la porte n'est pas verte.

  2. 02
    Exécuter par script

    Un script idempotent par montée de version, lancé depuis un keystore matériel, avec le hash de classe précédent conservé comme paire de rollback.

  3. 03
    Vérifier et consigner

    On rejoue la même vérification jusqu'au « already-applied », on confirme les hashes via RPC, puis on commit le manifest, pour que le prochain ingénieur hérite de la vérité.

Le fil de la mission

Quatorze mois, calés sur le calendrier des combats

  1. Juillet 2025

    Ouverture de la mission : premiers contrats Cairo et modèle de marché sur Dojo.

  2. Déc. 2025 – fév. 2026

    Poussée vers la production : déduplication des environnements, travail sur les presets et les policies, mécaniques de gacha et de Relics durcies. Cent cinquante-huit commits en trois mois.

  3. Mars – juin 2026

    Saisons en direct sur mainnet : analytics recalées sur la fenêtre de combat effective, garde-fous de mint corrigés, pipeline média en place.

  4. Juillet 2026

    Le SDK est extrait puis publié. Katana et Torii auto-hébergés remplacent le testnet hébergé non maintenu, quelques jours après la décision.

  5. Août 2026

    Deux montées de version mainnet (performances de lecture, puis paiements à cotes verrouillées avec tirage bonus VRF), vérifiées on-chain et consignées.

  6. La suite

    Une deuxième ligue prête à signer, et le produit packagé pour des ligues au-delà d'Armored MMA.

Le périmètre, honnêtement

Ce qu'on possède, de bout en bout.

Les ingénieurs de MediEvil Tech tiennent l'app mobile, le backend et le portail d'administration. zKorp possède la couche on-chain : les contrats, le SDK par lequel les deux clients lisent la chaîne, l'application de marché, et l'appchain et l'infrastructure AWS en dessous. Sur le dépôt des contrats, 37 des 38 pull requests sont les nôtres ; vingt sur vingt côté SDK ; dix-huit des vingt-trois côté infrastructure. C'est pour tenir cette frontière que le SDK a été extrait et publié plutôt que gardé en interne.

Voir notre expertise Web3
Travailler avec nous c’est

Prêt à renforcer votre équipe ?

Réserver un appel →
On cadre votre premier projet ? Quinze minutes suffisent.