Est-il possible de supprimer un contrat intelligent si selfdestruct () n’y est pas implémenté? [dupliquer]

Nishant

Est-il possible de supprimer un contrat intelligent si selfdestruct () n’y est pas implémenté? [dupliquer]


Cette question a déjà une réponse ici:

entrez la description de l'image ici

Veuillez expliquer comment puis-je utiliser delegatecall ou callcode. Merci !

Réponses


 hakusaro

Vous vous demandez peut-être cela parce que votre objectif est de supprimer un contrat intelligent qui n’a pas initialement été appelé à selfdestruct() . Si tel est le cas, vous ne pouvez pas atteindre votre objectif.

La note indique qu’un contrat peut toujours exécuter selfdestruct() si callcode ou callcode à un autre contrat est exécuté. Autrement dit, un autre contrat est déjà référencé à partir de votre contrat, et ce contrat peut appeler la méthode, même s’il n’a pas été référencé dans le contrat d’origine.

Vous ne pouvez pas simplement supprimer un contrat arbitraire sur le réseau une fois qu’il a été publié, c’est-à-dire après le déploiement, sans avoir déjà conçu cela. Si quelqu’un pouvait le faire, cela minerait la base de tout comportement de contrat intelligent. Premièrement, si un non-propriétaire pouvait appeler une selfdestruct()selfdestruct() inexistante selfdestruct() , il pourrait retirer le contrat. Évidemment, ce n’est pas possible, mais c’est quand même un exercice de réflexion. Deuxièmement, si un propriétaire pouvait faire exploser arbitrairement n’importe quel contrat et récupérer des fonds, il pourrait effectivement « révoquer » tous les contrats intelligents qu’il avait conclus, les rendant nuls et non avenus.

Disons que vous aviez un contrat qui détenait des fonds communautaires et décidé où ces fonds étaient basés sur une logique interne. Lorsque vous remarquez que les fonds iront probablement à quelqu’un que vous n’aimez pas, vous ne pouvez pas simplement choisir de faire sauter le contrat parce que vous l’avez fait. Tout le monde était d’accord sur la logique interne du contrat intelligent, et cette logique ne vous a jamais donné de « sortie » que vous pourriez utiliser. Tout comme un contrat réel, vous ne pouvez pas résilier le contrat sans clause de résiliation intégrée.


 user32449

Vous devez déléguer l’appel à un autre contrat (d’où le nom delegatecall() ).

Ce qui suit permettrait à B de s’autodétruire en appelant A:

 pragma solidity ^ 0.4 . 2 ; contract A { address owner ; 
     function  A ()   { owner =  msg . sender ; 
     } 
     function  destroy ()   { selfdestruct ( owner ); 
     } 
 } contract B {  
     function  call ( address a )   { a . delegatecall ( bytes4 ( sha3 ( "destroy()" )));  
     } 
 } 


 Jitendra Kumar. Balla

En appelant simplement selfdestruct(<address>) dans le contrat.

 function  destroyContract ()   public  onlyOwner { selfdestruct ( owner ); 
 } 

Mais soyez prudent avec la méthode selfdestruct ().

Vérifiez le lien ci-dessous

Comment fonctionne la méthode delegatecall pour appeler la méthode d’un autre contrat?

Richard Horrocks

Où est votre appel à delegatecall() …? 🙂

 

(), [dupliquer], #de, #pas, contrat, est, Est-il, implémenté, intelligent, n’y, possible, selfdestruct, si, supprimer, un

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *