web-dev-qa-db-fra.com

Quelle est l'adresse (0) dans Solidity

Quelqu'un peut-il m'expliquer ce que address(0) est dans Solidity? J'ai trouvé ce qui suit dans la documentation, mais cela n'a pas vraiment de sens pour moi:

Si le compte cible est le compte zéro (le compte d'adresse 0), la transaction crée un nouveau contrat. Comme nous l’avons déjà mentionné, l’adresse de ce contrat n’est pas l’adresse zéro, mais une adresse dérivée de l’expéditeur et du nombre de transactions envoyées (le "nonce"). La charge utile d'une telle transaction de création de contrat est considérée comme un bytecode EVM et est exécutée. La sortie de cette exécution est stockée en permanence en tant que code du contrat. Cela signifie que pour créer un contrat, vous n'envoyez pas le code réel du contrat, mais bien le code qui renvoie ce code.

http://solidity.readthedocs.io/en/develop/introduction-to-smart-contracts.html?highlight=address (0) # index-8

27
pizza-r0b

Dans une transaction Ethereum, le compte zéro est simplement un cas particulier utilisé pour indiquer qu'un nouveau contrat est en cours de déploiement. Il est littéralement '0x0' défini sur le champ to de la transaction brute.

Chaque transaction Ethereum, qu'il s'agisse d'un transfert entre deux comptes externes, d'une demande d'exécution de code de contrat ou d'une demande de déploiement d'un nouveau contrat, est codée de la même manière. Un objet de transaction brut ressemblera à ceci:

transaction = {
  nonce: '0x0', 
  gasLimit: '0x6acfc0', // 7000000
  gasPrice: '0x4a817c800', // 20000000000
  to: '0x0',
  value: '0x0',
  data: '0xfffff'
};

Si to est défini sur autre chose que '0x0', cette requête aura pour effet de transférer l'éther à l'adresse (si value est différent de zéro) et d'exécuter la fonction encodée dans le fichier data champ. N'oubliez pas que l'adresse peut être un contrat ou un compte externe.

Lorsque l'adresse to est l'adresse zéro, un nouveau contrat sera créé en exécutant le code dans data (c'est ce que l'on entend par "code qui renvoie le code"). L'adresse du contrat nouvellement créé est techniquement connue à l'avance car elle est basée sur l'adresse de l'expéditeur et sur son adresse actuelle. Cette adresse devient l'adresse officielle du contrat après extraction.

Pour une bonne lecture des transactions Ethereum, consultez ceci blog post .

Remarque: Il existe également l'instruction de code Solidity réelle address(0), qui est la valeur initiale d'une variable de type address. La documentation que vous avez publiée, cependant, fait spécifiquement référence à lorsque l'adresse du compte to dans une transaction est définie sur '0x0'.

20
Adam Kipnis