Modèles de stockage: Transformer plusieurs mappages -> structures avec mappage

NowsyMe

Modèles de stockage: Transformer plusieurs mappages -> structures avec mappage


Actuellement, j’ai quelques mappages silencieux qui, je pense, pourraient globalement être réduits à une structure avec des mappages internes et un mappage global, cependant, je ne sais pas comment le faire moi-même et je recherche donc des conseils.

 mapping ( address =>  uint256 )      public  proposedOfferings ; mapping ( address =>  uint256 )      public  receivedOfferings ; mapping ( address =>  uint256 )      public  acceptedOfferings ; mapping ( address =>  uint256 )      public  rejectedOfferings ; 

Comment puis-je restructurer ci-dessus en dessous, en gardant à l’esprit que chaque mappage se compose de deux variables uint256 distinctes (par exemple uint256 amount et uint256 percentageBonus ).

 struct  offerings { mapping ( address =>  uint256 )  proposed ; mapping ( address =>  uint256 )  received ; mapping ( address =>  uint256 )  accepted ; mapping ( address =>  uint256 )  rejected ; 
 } mapping ( address =>  offerings )  offeringData ; 

aussi, certaines informations sur le paradigme de conception connexe seraient très appréciées. Merci!

Jaime

Votre code ne reflète toujours pas que les adresses sont mappées à un tableau de taille 2.

Réponses


 Jaime

 struct  param { uint256 amount ; uint256 percentageBonus ; 
 } 

 struct  offerings { param proposed ; param received ; param accepted ; param rejected ; 
 } mapping ( address =>  offerings )   public  offeringData ; 

Comme cela, vous allez mapper chaque adresse à une structure avec quatre champs (proposés, reçus … etc) chacun de ces champs a deux champs (montant et pourcentageBonus)

vous pouvez l’utiliser comme ceci, supposons que l’adresse utilisateur est A:

offeringData[A].proposed.amount vous donnera le montant proposé par l’utilisateur avec l’adresse A.

offeringData[A].proposed.percentageBonus vous donne le pourcentage de bonus. Idem pour les autres variables.

Vous pouvez définir ces actions, par exemple: offeringData[A].proposed.amount = value

J’espère que cela t’aides.

NowsyMe

Cependant, chacun des mappages contient deux variables uint256, donc je ne peux pas utiliser votre approche pour autant que je sache. Je vais modifier ma réponse pour plus de clarté.

Jaime

Cela ne se reflète pas dans votre question, vous avez un mappage d’adresse vers un numéro. Vous voulez dire que ce sont des tableaux uint256?

Jaime

J’ai mis à jour la réponse pour faire de chaque variable de la structure un tableau de deux positions, vous utiliserez, par exemple, offerings.proposed[0] pour accéder au premier élément de proposé.

NowsyMe

Je pense que nous nous comprenons mal, peut-être que je ne suis pas complètement clair dans mes définitions. Je m’excuse si c’est le cas. Chaque mappage se compose de deux variables uint256 distinctes (par exemple uint256 amount et uint256 percentBonus), et non d’un tableau de taille 2.

Jaime

les noms des 2 variables sont-ils les mêmes pour chaque mappage?


 bordalix

Votre offre doit être une structure:

 struct  offering { uint256 amount ; uint256 percentageBonus ; 
 } 

Après cela, vous pouvez faire:

 mapping ( address =>  offering )   public  proposedOfferings ; mapping ( address =>  offering )   public  receivedOfferings ; mapping ( address =>  offering )   public  acceptedOfferings ; mapping ( address =>  offering )   public  rejectedOfferings ; 

Ou même:

 struct  offerings {    /* please note that is plural */ mapping ( address =>  offering )  proposed ; mapping ( address =>  offering )  received ; mapping ( address =>  offering )  accepted ; mapping ( address =>  offering )  rejected ; 
 } mapping ( address =>  offerings )  offeringData ; 

Cela aidera à mieux comprendre la logique métier derrière cela, car il semble que vos offres puissent être sur différents états, et une approche alternative pourrait être d’utiliser une énumération pour décrire ces états:

 enum  offeringState {   Received ,   Proposed ,   Accepted ,   Rejected   } 

 struct  offering { uint256 amount ; uint256 percentageBonus ; offeringState state ; 
 } 

Mais je prends vraiment une supposition sauvage maintenant.

NowsyMe

Cela pourrait également être une approche alternative, merci pour votre compréhension!

 

#de, mappages, modèles, plusieurs, stockage, transformer

 

yahoo

Laisser un commentaire

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