Quel est le conteneur BigMap et pourquoi cela compte-import-il?
1 réponses
- votes
-
- 2019-02-22
- Le conteneur BigMapest une carte spéciale (dictionnaire) dont le stockagen'est que lu ou écritpar clé à la demande.
Lamotivation d'avoir untel conteneurest la suivante. Supposons que vous ayez un contrat contenantbeaucoup de donnéesplus oumoinsindépendanteset que vousne voulezpas lire/écriretoutes les données à lafois,mais seulement unepetite partie de celui-ci. Pensez à Crypto-Kitties,collections,STOS (Jetons de sécurité),etc. Il s'agiten généralbeaucoupplusefficace des ressources (temps degazet d'exécution)pour accéder uniquement à lapièce dont vous avezbesoin au lieu detout charger.
-
La limitation d'un seulpar contratest vraiment à desfins de simplicité dans lamiseen œuvre de Michelson.
-
Avec lamiseen oeuvre d'aujourd'hui,avoir un seul BIGMAP signifie que si vous avezbesoin de deux éléments de cetype1et demap2,vous devez coder lemélange de cartes1et demap2en faisant quelque chose comme:
clé=touchegauche1| Clé droite 2
Unexemple où vous voudriez avoir deux cartes de cetypepeut être un contrat représentant l'immobilieret lespropriétaires ou les collectibleset lespropriétaires. Vous voudrezpeut-être accéder auxpropriétaires debiens ou debiens de certainspropriétaires.
Jepensepersonnellement que soulever cette restriction à Michelson seraitbien.
- The BigMap container is a special map (dictionary) whose storage is only read or written per key on demand.
The motivation to have such a container is the following. Suppose that you have a contract containing lots of more or less independent data and you don't want to read / write all of the data at once but only a small part of it. Think of crypto-kitties, collections, STOs (security tokens), etc. It is in general much more efficient resource wise (gas and execution time) to only access the part you need instead of loading everything.
The limitation of only one per contract is really for simplicity purposes in the Michelson implementation.
With today's implementation, having only one BigMap means that if you need two such things map1 and map2, you need to encode the mixing of map1 and map2 by doing something like:
key = Left key1 | Right key2
An example where you would wish to have two such maps can be a contract that represents real estate and owners or collectibles and owners. You may wish to access owners of some goods or goods of some owners.
I personally think that lifting this restriction in Michelson would be nice.
-
Malheureusement,vousne pouvezpas utiliser lestypes de sommets comme des clés de BigMaps car lestypes de sommene sontpas comparables (sans raisonpour unebonne raison).Vous devriez utiliser le hachage dutype de soleil ou sa représentation d'octetsemballés.Unfortunately, you can't use sum types as keys to bigmaps because sum types aren't comparable (for no good reason). You would have to use the hash of the sun type, or its packed byte representation.
- 1
- 2019-03-19
- Arthur B
-
@Arthurbj'ai raté cette limitation lorsquej'ai écrit cette réponse.Mercipour laprécision.Ilpourrait être raisonnable de soulever cette restrictionfinalement (et defaire une unitéet une option aussi,je suppose).@ArthurB I missed this limitation when I wrote this answer. Thanks for the precision. It might be reasonable to lift this restriction eventually (and do unit and option as well I guess).
- 0
- 2019-03-19
- FFF
-
...et paire. Et oui,c'est unpatch assez simplepour rendre cestypes comparables... and Pair. And yes, it's a pretty straightforward patch to make these types comparable
- 1
- 2019-03-20
- Arthur B
J'aientendu dans denombreuxendroits que Tezos utilise untype de conteneur spécifique appelé BigMap afin de stocker des données à l'intérieur d'un contratintelligent.
L'objet doit être relativement complexe car une seuleinstance BIGMAPest autorisée dans un seul contratintelligent.
Mes questions sont les suivantes: