Comment déboguer la note «Le constructeur doit être payable si vous envoyez de la valeur»?

aditya

Comment déboguer la note «Le constructeur doit être payable si vous envoyez de la valeur»?


Je suis assez nouveau dans les contrats intelligents de solidité et d’éthereum, donc j’essaie de créer un nouveau contrat de table, à partir d’un contrat de salle existant, mais j’ai rencontré ce problème.

 Note :   The   constructor  should be payable if  you send value 

Même si mon constructeur Table est un constructeur payable .

Voici mon code:

 pragma solidity ^ 0.4 . 0 ; contract Room   { address []   public   Tables ; 

     function   Room ()   public  payable {} 

     function  createTable ( uint  minimum )   public  payable { address createdTable =   new   Table ( minimum ); 
         Tables . push ( createdTable ); 
     } 

     function  getCreatedTables ()   public  view returns ( address [])   { 
         return   Tables ; 
     } 
 } contract Table   { 
     struct   Player   { address player ; 
         uint  value ; 
     } 

     Player []   public  players ; 
     uint   public  minimumBet ; 
     uint   public  maxPlayers =   2 ; mapping ( address =>   bool )   public  availablePlayers ; 

     function   Table ( uint  minimum )   public  payable { minimumBet =  minimum ; enterTable (); 
     } modifier restricted ()   { 
         require ( players . length <  maxPlayers ); _ ; 
     } 

     function  getTotalPlayers ()   public  view returns ( uint )   { 
         return  players . length ; 
     } 

     function  enterTable ()   public  restricted payable { 
         require ( msg . value >=  minimumBet ); 
         require (! availablePlayers [ msg . sender ]); availablePlayers [ msg . sender ]   =   true ; 
         Player  memory newPlayer =   Player ({ player :  msg . sender , value :  msg . value }); players . push ( newPlayer ); 
     } 
 } 

smarx

Je pense que ce message apparaît chaque fois qu’une transaction est annulée, alors ne lisez pas trop dedans. Que faisiez-vous lorsque vous avez vu l’erreur de retour? Avez-vous déployé le contrat ou appeliez-vous l’une de ses fonctions?

aditya

j’ai appelé la fonction createTable et ce message est apparu, il n’y avait pas non plus de contrat de table déployé.

Réponses


 smarx

L’erreur est createTable lors de l’appel de createTable . Le problème avec cette fonction est qu’elle n’envoie pas d’éther au constructeur de Table . Essaye ça:

 address createdTable =   ( new   Table ). value ( msg . value )( minimum ); 

Ceci attache tout l’éther envoyé à createTable à l’appel au constructeur de Table .

 

#de, #la, comment, Constructeur, déboguer, doit, Envoyez, être, Le, note, payable, si, valeur, vous

 

yahoo

Laisser un commentaire

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