Solidity
// Ajoutez ces variables d'état à votre contrat
mapping(address => uint256) public syntheticBalance ;
uint256 public totalSyntheticSupply ;
Dans l'extrait ci-dessus :
syntheticBalance
est un mappage qui permet de suivre le solde des actifs synthétiques pour chaque adresse.totalSyntheticSupply
est une variable qui permet de suivre l'offre totale d'actifs synthétiques en circulation.Solidity
// Mise à jour de la fonction mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
Dans la fonction mintSyntheticAsset
:
obligatoire
vérifie s'il y a suffisamment de garanties pour monnayer le montant demandé d'actifs synthétiques.solde synthétique
de l'appelant(msg.sender
) est augmenté de _amount
.totalSyntheticSupply
est également augmenté de _amount
.garantie
est diminuée de _montant
car elle est utilisée pour garantir les actifs synthétiques nouvellement créés.Solidity
// Mise à jour de la fonction redeemSyntheticAsset
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
Dans la fonction redeemSyntheticAsset
:
obligatoire
vérifie si l'appelant dispose d'un solde suffisant d'actifs synthétiques à racheter.balance synthétique de
l'appelant est diminuée de _montant
.totalSyntheticSupply
est diminué de _amount
.garantie
est augmentée de _montant
au fur et à mesure qu'elle est restituée lors du rachat d'actifs synthétiques.TypeScript
// SPDX-License-Identifier : MIT
pragma solidity ^0.8.0 ;
contract SyntheticAsset {
uint256 public underlyingAssetPrice ;
uint256 public collateral ;
address public owner ;
mapping(address => uint256) public syntheticBalance ;
uint256 public totalSyntheticSupply ;
constructor() {
owner = msg.sender;
}
modificateur onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
function updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
function depositCollateral(uint256 _amount) public {
collateral += _amount;
}
function withdrawCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
function getSyntheticAssetPrice() public view returns (uint256) {
return underlyingAssetPrice;
}
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Pour déployer des contrats sur le Goerli Testnet, vous aurez besoin de Goerli ETH (GoerliETH). Bien qu'il n'ait pas de valeur réelle, il est essentiel pour payer les frais d'essence sur le testnet.
Metamask : Assurez-vous que votre Metamask est connecté au réseau de test Goerli.
Allez au robinet Goerli pour demander des GoerliETH. Il vous suffit de coller votre adresse Ethereum Goerli Testnet, et vous devriez recevoir l'ETH de test dans les plus brefs délais.
Dans Remix, accédez à l'onglet Deploy & Run Transactions
.
Pour l'option Environnement
, sélectionnez Fournisseur injecté
. Cette option permet à Remix de se connecter à n'importe quel réseau sur lequel votre Metamask est actuellement réglé, c'est-à-dire Goerli Testnet.
Assurez-vous que votre contrat, OracleIntegratedContract
, est sélectionné dans la liste déroulante Contract
.
Dans le menu déroulant Compte
, vous devriez voir votre adresse Goerli Testnet Ethereum.
Maintenant que les fonctionnalités mises à jour sont en place, compilez et déployez votre contrat en suivant les étapes de la leçon 3.
Avec le contrat étendu déployé :
Appelez les fonctions mintSyntheticAsset
et redeemSyntheticAsset
avec des montants différents pour créer et racheter des actifs synthétiques respectivement.
Observez les changements dans syntheticBalance
, totalSyntheticSupply
, et collateral
à travers l'interface Remix IDE.
Engagez-vous dans le contrat et observez comment les variables d'état et l'état général du contrat évoluent en fonction de vos interactions. Cette expérience pratique permettra de consolider les concepts et les opérations des actifs synthétiques.
Au fur et à mesure que nous enrichissons notre contrat de fonctionnalités essentielles, nous nous rapprochons d'un contrat d'actif synthétique réaliste. Dans la prochaine leçon, nous nous attacherons à tester ce contrat pour nous assurer qu'il fonctionne comme prévu dans différents scénarios. La compréhension pratique des actifs synthétiques continue de s'approfondir au fur et à mesure que nous progressons. Restez à l'écoute pour plus d'apprentissage pratique dans la prochaine leçon !
Solidity
// Ajoutez ces variables d'état à votre contrat
mapping(address => uint256) public syntheticBalance ;
uint256 public totalSyntheticSupply ;
Dans l'extrait ci-dessus :
syntheticBalance
est un mappage qui permet de suivre le solde des actifs synthétiques pour chaque adresse.totalSyntheticSupply
est une variable qui permet de suivre l'offre totale d'actifs synthétiques en circulation.Solidity
// Mise à jour de la fonction mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
Dans la fonction mintSyntheticAsset
:
obligatoire
vérifie s'il y a suffisamment de garanties pour monnayer le montant demandé d'actifs synthétiques.solde synthétique
de l'appelant(msg.sender
) est augmenté de _amount
.totalSyntheticSupply
est également augmenté de _amount
.garantie
est diminuée de _montant
car elle est utilisée pour garantir les actifs synthétiques nouvellement créés.Solidity
// Mise à jour de la fonction redeemSyntheticAsset
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
Dans la fonction redeemSyntheticAsset
:
obligatoire
vérifie si l'appelant dispose d'un solde suffisant d'actifs synthétiques à racheter.balance synthétique de
l'appelant est diminuée de _montant
.totalSyntheticSupply
est diminué de _amount
.garantie
est augmentée de _montant
au fur et à mesure qu'elle est restituée lors du rachat d'actifs synthétiques.TypeScript
// SPDX-License-Identifier : MIT
pragma solidity ^0.8.0 ;
contract SyntheticAsset {
uint256 public underlyingAssetPrice ;
uint256 public collateral ;
address public owner ;
mapping(address => uint256) public syntheticBalance ;
uint256 public totalSyntheticSupply ;
constructor() {
owner = msg.sender;
}
modificateur onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
function updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
function depositCollateral(uint256 _amount) public {
collateral += _amount;
}
function withdrawCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
function getSyntheticAssetPrice() public view returns (uint256) {
return underlyingAssetPrice;
}
function mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
function redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
Pour déployer des contrats sur le Goerli Testnet, vous aurez besoin de Goerli ETH (GoerliETH). Bien qu'il n'ait pas de valeur réelle, il est essentiel pour payer les frais d'essence sur le testnet.
Metamask : Assurez-vous que votre Metamask est connecté au réseau de test Goerli.
Allez au robinet Goerli pour demander des GoerliETH. Il vous suffit de coller votre adresse Ethereum Goerli Testnet, et vous devriez recevoir l'ETH de test dans les plus brefs délais.
Dans Remix, accédez à l'onglet Deploy & Run Transactions
.
Pour l'option Environnement
, sélectionnez Fournisseur injecté
. Cette option permet à Remix de se connecter à n'importe quel réseau sur lequel votre Metamask est actuellement réglé, c'est-à-dire Goerli Testnet.
Assurez-vous que votre contrat, OracleIntegratedContract
, est sélectionné dans la liste déroulante Contract
.
Dans le menu déroulant Compte
, vous devriez voir votre adresse Goerli Testnet Ethereum.
Maintenant que les fonctionnalités mises à jour sont en place, compilez et déployez votre contrat en suivant les étapes de la leçon 3.
Avec le contrat étendu déployé :
Appelez les fonctions mintSyntheticAsset
et redeemSyntheticAsset
avec des montants différents pour créer et racheter des actifs synthétiques respectivement.
Observez les changements dans syntheticBalance
, totalSyntheticSupply
, et collateral
à travers l'interface Remix IDE.
Engagez-vous dans le contrat et observez comment les variables d'état et l'état général du contrat évoluent en fonction de vos interactions. Cette expérience pratique permettra de consolider les concepts et les opérations des actifs synthétiques.
Au fur et à mesure que nous enrichissons notre contrat de fonctionnalités essentielles, nous nous rapprochons d'un contrat d'actif synthétique réaliste. Dans la prochaine leçon, nous nous attacherons à tester ce contrat pour nous assurer qu'il fonctionne comme prévu dans différents scénarios. La compréhension pratique des actifs synthétiques continue de s'approfondir au fur et à mesure que nous progressons. Restez à l'écoute pour plus d'apprentissage pratique dans la prochaine leçon !