Le code parle de lui meme. Le code est simple a comprendre, les commentaires c'est autre chose, ils peuvent dire ce qu'ils veulent.
C'est là où je ne comprend pas ton avis, le code semble simple et tu n'expliques pas clairement où se situe la création de tokens.
Pour les commentaires bien sur tu peux mettre des explications et faire l'inverse dans le code, ce que je voulais dire c'est que si Binance s'était amusé à faire un truc aussi débile, on aurait du en entendre parler haut et fort.
Il est a noter que ce n'est pas un contract compatible ERC-20. Il manque des fonctions indispensable comme balanceOf et totalSupply.
Tu as raison sur ce point l'interface n'est pas respectée. Mais les fonctionnalités sont dispo, les variables balanceOf et totalSupply sont publiques.
C'est étrange. La fonction "approve" par exemple n'est pas conforme a la definition de celle-ci dans un contrat ERC-20.
La creation est faite de manière très subtile, en utilisant une adresse d'un autre contrat. Donc une adresse d'un autre contrat envoie des token a ce contrat. Le contrat present n'est pas celui que possède tous les token. Un autre contrat, ou plusieurs ont des tokens et peuvent envoyer un nombre indéterminé de token a ce contrat a partir d'une adresse externe.
C'est tordu mais cela ne veut pas dire qu'ils cherchent a masker le nombre total de token. Il faudrait passer plus de temps pour comprendre le mécanisme.
Alors je m'avance encore une fois p/r à ma (non) connaissance de Solidity mais si je regarde au hasard d'autres smart contracts de tokens, j'ai peu ou prou exactement le même code et les mêmes commentaires:
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint _value) public onlyPayloadSize(2 * 32) {
// To change the approve amount you first have to reduce the addresses`
// allowance to zero by calling `approve(_spender, 0)` if it is not
// already 0 to mitigate the race condition described here:
// https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
require(!((_value != 0) && (allowed[msg.sender][_spender] != 0)));
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
}
function approve(address _spender, uint _value) returns (bool) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
*/
function approve(address _spender, uint256 _value) returns (bool) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
Il est aussi possible que ce contrat en particulier ne soit pas celui utilisé par le token BNB actuellement, ils ont put en publier un autre. Celui ci me semble bien simple.
Quand tu vois
ça sur Etherscan il n'y a aucun doute sur le fait que ce soit le contrat officiel:

A noter aussi qu'il n'y a pas de sécurité qui limite l'utilisation de ce contrat a son auteur uniquement.
Etrange.
A quoi fais tu référence ? Je vois dans le code que des références à msg.sender ou tu parles d'autres choses. Des exemples dans d'autres smart contracts ?
PS: merci @guigui371 tu m'as mis un petit coup de vieux
