26 votes

Pourquoi Solidity me suggère-t-il d'implémenter une fonction de réception d'éther alors que j'ai une fonction de repli ?

Le changement récent dans Solidity a changé le format de la fonction fallback de simplement function() à fallback(), ce qui est plutôt bien pour les débutants pour comprendre ce qui se passe, mais j'ai une question à propos d'une suggestion que le compilateur me donne quand j'implémente un tel fallback.

Par exemple, un morceau de code de mon projet :

pragma solidity ^0.6.1;

contract payment{
    mapping(address => uint) _balance;

    fallback() payable external {
        _balance[msg.sender] += msg.value;
    }
}

Tout se passe bien, mais le compilateur suggère ce qui suit :

Warning: This contract has a payable fallback function, but no receive ether function.
Consider adding a receive ether function.

Qu'entend-on par fonction de réception d'éther ? J'ai essayé de faire des recherches et les nombreux exemples que j'ai pu trouver ne sont qu'une autre fonction de repli.

J'utilise la version 0.6.1+commit.e6f7d5a4

27voto

En complément de la réponse acceptée, voici comment vous devez définir le non nommé repli y recevoir pour résoudre cette erreur :

contract MyContract {

    fallback() external payable {
        // custom function code
    }

    receive() external payable {
        // custom function code
    }
}

21voto

Fariha Abbasi Points 454

Avec la version 0.6.0 de Solidity, nous avons un changement important. La fonction sans nom communément appelée "fonction de repli" a été scindée en une nouvelle fonction de repli définie à l'aide du mot-clé fallback et une fonction de réception d'éther définie à l'aide du mot-clé receive. Si elle est présente, la fonction de réception d'éther est appelée chaque fois que les données d'appel sont vides (que de l'éther soit reçu ou non). Cette fonction est implicitement payable. La nouvelle fonction de repli est appelée lorsqu'aucune autre fonction ne correspond (si la fonction receive ether n'existe pas, cela inclut les appels avec des données d'appel vides). Vous pouvez rendre cette fonction payante ou non. Si elle n'est pas payable, les transactions ne correspondant à aucune autre fonction qui envoie une valeur seront annulées. Vous ne devriez avoir besoin d'implémenter la nouvelle fonction de repli que si vous suivez un modèle de mise à niveau ou de proxy.

https://solidity.readthedocs.io/en/v0.6.7/060-breaking-changes.html#semantic-and-syntactic-changes

0voto

Andy Points 140

Après quelques recherches supplémentaires, j'ai réalisé que dans la dernière version de Solidity, la fonction fallback a été divisée en receive() et fallback(). C'est un nouveau changement du compilateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X