¿Qué es el contenedor BigMap y por qué es importante?
1 respuesta
- votos
-
- 2019-02-22
- El contenedor BigMapes unmapaespecial (diccionario) cuyo almacenamiento solo se lee oescribepor clave apedido.
Lamotivaciónparatener un contenedor deestetipoes la siguiente. Suponga quetiene un contrato que contienemuchos datosmás omenosindependientes yno desea leer/escribirtodos los datos a la vez,sino solo unapequeñaparte. Pienseen cripto-gatitos,colecciones,STO (tokens de seguridad),etc. Engeneral,esmuchomáseficienteen cuanto a recursos (gas ytiempo deejecución) acceder solo a laparte quenecesitaen lugar de cargartodo.
-
La limitación de solo unopor contratoes realmentepormotivos de simplicidaden laimplementación de Michelson.
-
Con laimplementación actual,tener solo un BigMap significa que sinecesita dos cosas comomap1 ymap2,necesita codificar la combinación demap1 ymap2 haciendo algo como:
key=Teclaizquierda1| Tecla derecha2
Unejemploen el que desearíatener dosmapas deestetipopuede ser un contrato que representebienes raíces ypropietarios o coleccionables ypropietarios. Esposible que desee acceder a lospropietarios de algunosbienes obienes de algunospropietarios.
Personalmente,creo queeliminaresta restricciónen Michelson seríabueno.
- 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.
-
Desafortunadamente,nopuede usartipos de suma como clavesparabigmapsporque lostipos de sumano son comparables (sin unabuena razón).Tendría que usarel hash deltipo sun o su representación debytesempaquetados.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
-
@ArthurB Meperdíesta limitación cuandoescribíesta respuesta.Graciaspor laprecisión.Podría ser razonableeliminaresta restriccióneventualmente (y hacer la unidad y la opcióntambién,supongo).@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
-
... yemparejar. Y sí,es unparchebastante sencillopara hacer queestostipos sean comparables... and Pair. And yes, it's a pretty straightforward patch to make these types comparable
- 1
- 2019-03-20
- Arthur B
Heescuchadoen muchos lugares que Tezosestá haciendo uso de untipoespecífico de contenedor llamado BigMappara almacenar datos dentro de un contratointeligente.
El objeto debe ser relativamente complejoporque hasta ahora solo sepermite unainstancia de BigMap dentro de un solo contratointeligente.
Mispreguntas son las siguientes: