- Add Forgejo Actions deploy workflow - Add documentation (ARCHITECTURE, DEPLOYMENT, SMART_CONTRACT, API_REFERENCE) - Add Tailwind and PostCSS configs for web app - Configure Git remote for Forgejo Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
Smart Contract — RPSArena.sol
Pattern Commit-Reveal
Le contrat RPSArena.sol implémente un mécanisme anti-triche basé sur le commit-reveal :
- Commit : chaque joueur envoie
keccak256(abi.encodePacked(choice, nonce)) - Reveal : après que les deux ont commité, chaque joueur dévoile son
choiceetnonce - Vérification : le contrat recalcule le hash et le compare au commit
- Résultat : le gagnant est déterminé et le pot est distribué
Fonctions principales
createMatch(address _player2) payable
Crée un nouveau match en spécifiant l'adversaire. La mise est verrouillée dans le contrat.
commit(uint256 _matchId, bytes32 _commitHash)
Envoie le hash du choix. Le hash est calculé côté client avec :
keccak256(abi.encodePacked(uint256(choice), uint256(nonce)))
reveal(uint256 _matchId, Choice _choice, uint256 _nonce)
Dévoile le choix et le nonce. Le contrat vérifie que le hash correspond.
claimTimeout(uint256 _matchId)
Permet à un joueur de réclamer le pot si l'adversaire n'a pas commité ou révélé dans les délais (5 minutes).
Économie
- Mise minimale : configurable (0.001 ETH en testnet)
- Frais plateforme : 3% du pot total
- Gain : 97% du pot au gagnant
- Match nul : remboursement intégral des deux joueurs
Événements
MatchCreated(uint256 matchId, address p1, address p2, uint256 bet)Committed(uint256 matchId, address player)Revealed(uint256 matchId, address player, Choice choice)MatchFinished(uint256 matchId, address winner, uint256 payout)MatchDraw(uint256 matchId, uint256 refund)MatchTimeout(uint256 matchId, address winner)
Déploiement
Local (Hardhat)
pnpm contract:deploy:local
Sepolia (Testnet)
export SEPOLIA_RPC_URL=https://rpc.sepolia.org
export PRIVATE_KEY=0x...
pnpm contract:deploy:sepolia