Quelle est la différence entre une adresse approuvée et une adresse d’opérateur?

John DeBord

Quelle est la différence entre une adresse approuvée et une adresse d’opérateur?


Je regarde la mise en œuvre d’OpenZeppelin d’un jeton ERC721 et je suis perdu à la différence entre une adresse approuvée et une adresse d’opérateur.

Voici un extrait de code:

 /// @dev Checks msg.sender can transfer a token, by being owner, approved, or operator 
 /// @param _tokenId uint256 ID of the token to validate modifier canTransfer ( uint256 _tokenId )   { 
     require ( isApprovedOrOwner ( msg . sender ,  _tokenId )); _ ; 
 } 

Quelqu’un pourrait-il m’expliquer quelles sont les principales différences?
Les exemples inclus seraient très utiles.

Réponses


 Richard Horrocks

Voici le code pertinent:

   /** * @dev Returns whether the given spender can transfer a given token ID * @param _spender address of the spender to query * @param _tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ 
   function  isApprovedOrOwner ( address _spender , uint256 _tokenId ) 
     internal view returns ( bool ) 
   { address owner =  ownerOf ( _tokenId ); 
     // Disable solium check because of 
     // https://github.com/duaraghav8/Solium/issues/175 
     // solium-disable-next-line operator-whitespace 
     return   ( _spender ==  owner || getApproved ( _tokenId )   ==  _spender || isApprovedForAll ( owner ,  _spender ) 
     ); 
   } 

La première vérification est de savoir si la personne qui souhaite dépenser le jeton est son propriétaire (de l’appel à ownerOf() ):

 _spender ==  owner || 

La cartographie pertinente est:

 // Mapping from token ID to owner mapping ( uint256 =>  address )   internal  tokenOwner ; 

Sinon, nous passons à la vérification suivante, qui consiste à savoir si l’adresse du dépensier a été approuvée par le propriétaire pour contrôler cet ID de jeton particulier. (Donc, ici, la délégation fait référence au jeton. C’est-à-dire que le dépensier a l’autorisation pour ce jeton particulier .)

 getApproved ( _tokenId )   ==  _spender || 

La cartographie pertinente est:

 // Mapping from token ID to approved address mapping ( uint256 =>  address )   internal  tokenApprovals ; 

Si ce n’est pas le cas, et même si le dépensier n’est pas le propriétaire ou a l’approbation d’un seul jeton, il se peut qu’il figure dans la liste des opérateurs approuvés. (Dans ce cas, la délégation fait référence au propriétaire du jeton. Autrement dit, le dépensier est autorisé à « fonctionner » à la place du propriétaire, sur tous les jetons qu’il possède.)

 isApprovedForAll ( owner ,  _spender ) 

Cartographie:

 // Mapping from owner to operator approvals mapping ( address =>  mapping ( address =>   bool ))   internal  operatorApprovals ; 

John DeBord

Ok, donc essentiellement une adresse approuvée est celle qui est autorisée à contrôler les jetons individuels. Alors qu’une adresse d’opérateur est celle qui est autorisée à contrôler chaque jeton que le propriétaire possède?

Richard Horrocks

Oui, c’est vrai 🙂

 

#(une, #et, #la, adresse, approuvée, d’opérateur?, différence, entre, est, quelle

 

yahoo

Laisser un commentaire

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