CryptoWines est un contrat intelligent Ethereum permettant la création, la vente et le transfert de jetons non fongibles (NFT) représentant des bouteilles de vin.
Ce contrat intelligent permet aux utilisateurs de :
- Créer de nouveaux NFT représentant des bouteilles de vin.
- Définir des prix pour les NFT.
- Acheter des NFT avec de l'Ether.
- Transférer des NFT entre utilisateurs.
- Retirer les fonds accumulés dans le contrat.
Le propriétaire du contrat peut créer de nouveaux NFT avec une URI spécifiant les métadonnées du NFT.
Les propriétaires de NFT peuvent définir le prix de vente de leurs NFT.
Les utilisateurs peuvent acheter des NFT disponibles en envoyant le montant d'Ether spécifié au vendeur.
Les propriétaires de NFT peuvent transférer leurs NFT à d'autres utilisateurs.
Le propriétaire du contrat peut retirer les fonds accumulés dans le contrat.
Pour déployer ce contrat, suivez ces étapes :
-
Installez les dépendances nécessaires :
npm install @openzeppelin/contracts
-
Déployez le contrat sur le réseau Ethereum de votre choix.
Pour créer un nouveau NFT, le propriétaire du contrat doit appeler la fonction mint
:
function mint(address vOwner, uint256 _tokenId, string calldata _uri) external onlyOwner {
_mint(vOwner, _tokenId);
_setTokenURI(_tokenId, _uri);
}
Pour définir le prix d'un NFT, le propriétaire du NFT doit appeler la fonction setPrice
:
function setPrice(uint256 _tokenId, uint256 _price) external {
require(msg.sender == ownerOf(_tokenId), "Not owner of this token");
tokenIdToPrice[_tokenId] = _price;
}
Pour acheter un NFT, un utilisateur doit appeler la fonction buy
en envoyant le montant d'Ether spécifié :
function buy(uint256 _tokenId) external payable {
uint256 price = tokenIdToPrice[_tokenId];
require(price > 0, "This token is not for sale");
require(msg.value == price, "Incorrect value");
address seller = ownerOf(_tokenId);
payable(seller).transfer(msg.value);
tokenIdToPrice[_tokenId] = 0;
emit NftBought(seller, msg.sender, price);
}
Pour transférer un NFT, le propriétaire du NFT doit appeler la fonction transferNFT
:
function transferNFT(address from, address to, uint256 tokenId) external {
require(ownerOf(tokenId) == from, "Sender is not the owner");
safeTransferFrom(from, to, tokenId);
}
Pour retirer les fonds accumulés dans le contrat, le propriétaire du contrat doit appeler la fonction withdraw
:
function withdraw() external onlyOwner {
(bool callSuccess, ) = payable(msg.sender).call{value: address(this).balance}("");
require(callSuccess, "Call failed");
}
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
- OpenZeppelin pour leurs contrats Solidity sécurisés et réutilisables.