# 3 - Jeu de prédiction sur Alephium

La troisième partie va se concentrer sur le contrat utilisé par les personnes qui parient et les TxScript qui sont utilisés pour interagir avec les contrats sur la chaîne. Les deux articles précédents ont traité du contrat principal PredictALPH ([pour le lire](https://blog.notrustverify.ch/1-jeu-de-prediction-sur-alephium)) et de Round qui se charge des rounds et y stocke les informations relatives ([pour le lire](https://blog.notrustverify.ch/2-jeu-de-prediction-sur-alephium)).

Pour tester l'application : [ALPH.bet](https://alph.bet)

Un rappel de ce qu'est [Alephium](https://alephium.org) :

*Alephium est la première blockchain shardée de couche 1 extensible qui améliore les concepts de Proof of Work & UTXO. La décentralisation, l'auto-souveraineté et la sécurité rencontrent l'efficacité énergétique dans un réseau adapté aux développeurs optimisé pour les applications DeFi et les contrats intelligents.*

# Contrat Punter.ral

Le contrat "Punter" ([argot pour "bidder"](https://www.merriam-webster.com/dictionary/punter)) est relativement simple et permet de stocker le montant misé, le choix "Up" ou "Down", et à partir de quel moment tout le monde peut réclamer les gains des autres.

## Etats

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705772910937/c062bd62-9bbd-4678-9ed8-1c23f1e30570.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/punter.ral#L1-L8)

## Code d'erreur

Un seul code d'erreur est implémenté et permet de contrôler si l'adresse qui appelle les fonctions du contrat.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705773523050/7909bfd1-7bc5-4819-ac76-f3c048b89c7e.png align="center")

## Fonctions

Ces différentes fonctions permettent d'accéder rapidement aux états du smart contract et donc de la personne qui a parié dans un round.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705773599267/097cf425-f24d-47a6-9a2b-d942166e4c88.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/punter.ral#L15-L33)

L'autre fonction de ce contrat est `destroy` qui permet de détruire le contrat de la personne qui a parié et de retrouver son ALPH utilisé pour parier au round. Une autre fonction, `destroyByOther`, est actuellement mise en place mais sera remplacée au détriment d'une seule et même fonction.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705787173926/f1333de7-5dbc-4297-8f95-6f9bd82a4076.png align="center")

## TxScript

Les TxScript sont les fonctions qui vont permettre d'interagir avec les smart contracts. Ces scripts ne sont pas inscrits dans la blockchain d'Alephium.

Quand un utilisateur va interagir avec la dapp, plusieurs TxScripts seront utilisés selon l'action. C'est aussi en partie avec cela que l'interaction avec la blockchain sera possible depuis TypeScript, par exemple, le SDK se trouve ici : [Dapp SDK](https://docs.alephium.org/dapps/ecosystem#dapp-sdk)

La fonction `Bid` permet de parier, et [APS (Asset Permission System)](https://docs.alephium.org/ralph/asset-permission-system) qui va autoriser uniquement le montant voulu à être envoyé. Dans ce cas, la personne qui parie va autoriser ce qu'il y a dans `amount`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705946894652/aa2b66a4-7de7-422e-8562-c58efaf8a486.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/bid.ral#L1-L3)

Et voilà comment l'interaction en TypeScript se fait avec le smart contract et donc la blockchain. Il y a 1 ALPH qui est rajouté car la personne qui parie va devoir créer un nouveau contrat et donc mettre du ALPH supplémentaire (qui pourra être retrouvé).

`attoAlphAmount` est le montant approuvé (APS) et envoyé au smart contrat.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705951439323/0a1edb9b-a077-4c8f-a7f9-387545f7f36f.png align="center")

[Github](https://github.com/notrustverify/predictalph-frontend/blob/cb888bfef5584841887ae1ea774ca3825e70fba9/src/services/token.service.ts#L17-L25)

Un autre script pour la personne qui joue est `Withdraw`, qui sera utile pour récupérer ses gains et détruire le contrat associé.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705952129421/944c3f44-f13a-4bfa-9a1c-dd7d7ffeb3d4.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/withdraw.ral#L1-L3)

Et la partie en TypeScript pour interagir avec la chaîne. Les paramètres de l'image du dessus se retrouvent sous `initialFields`.

À nouveau, `attoAlphAmount` est utilisé mais uniquement les frais doivent être approuvés car aucun ALPH n'est envoyé au contrat, uniquement récupéré.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705951359073/a790e653-9815-4177-834b-f6c1ac5b0daa.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/withdraw.ral#L1-L3)

Pour la partie round, un TxScript est utilisé pour démarrer et stopper. Une même fonction peut être utilisée pour automatiquement en relancer un. Ou encore détruire un round se fait aussi au travers d'un script

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705956020441/64930294-9601-4f55-8f9c-c494d9c19225.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/contracts/roundState.ral#L1-L12)

Et par exemple en TypeScript l'utilisation d'un de ces fonctions ressemble à cela:

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1705956230167/57596f49-70e1-4680-a981-6f55e9137b60.png align="center")

[Github](https://github.com/notrustverify/predictalph-contracts/blob/fd94d87b7f7fa7555d70b4bead8a9330713daf31/src/manage.ts#L148-L155)

# Fin

Cet article conclut la série sur [ALPH.bet](https://alph.bet), un jeu de prédiction développé sur [Alephium](https://alephium.org). L'expérience de développement est vraiment agréable. Après avoir saisi les différents concepts tels que l'Asset Permission System et la nécessité de louer de l'espace, l'application a pu être mise en place rapidement et de manière sécurisée. Moins de lignes de code ont été nécessaires par rapport à la version sur Ethereum, ce qui nous a confortés dans l'idée d'avoir fait d'Alephium notre choix.

Pour les personnes intéressées à approfondir le sujet :

* Comment développer un dapp : [https://docs.alephium.org/dapps/getting-started](https://docs.alephium.org/dapps/getting-started)
    
* Ralph : [https://docs.alephium.org/ralph/getting-started](https://docs.alephium.org/ralph/getting-started)
    
* APS : [https://medium.com/@alephium/alephiums-aps-eliminating-evm-token-approval-risks-5407e7e70a33](https://medium.com/@alephium/alephiums-aps-eliminating-evm-token-approval-risks-5407e7e70a33)
    

D'autres articles verront le jour, l'interface web sera mise à jour, et avec cela, de nouveaux développements verront le jour. Par exemple, la possibilité de parier sur d'autres événements, comme le prix du bitcoin, ou encore si la mise à jour [Rhône](https://twitter.com/alephium/status/1745820715054698901) sera effective en mars 2024. Pour suivre No Trust Verify : [Twitter](https://twitter.com/notrustverif), [LinkedIn](https://www.linkedin.com/feed/hashtag/?keywords=notrustverify) ou [Telegram](https://t.me/notrustverify).

---

%%[footer-french]
