Cos'è il contenitore BigMap e perché è importante?
1 risposta
- voti
-
- 2019-02-22
- Il contenitore BigMap è unamappa (dizionario) speciale la cuimemorizzazione viene letta o scritta soloper chiave su richiesta.
Lamotivazioneper avere untale contenitore è la seguente. Supponiamo di avere un contratto contenentemolti datipiù omenoindipendentie dinon voler leggere/scriveretuttii datiin una voltama solo unapiccolaparte diessi. Pensa a crypto-kitties,collezioni,STO (token di sicurezza),ecc. Ingenerale,èmoltopiùefficientein termini di risorse (gase tempo diesecuzione) accedere solo allapartenecessariainvece di caricaretutto.
-
La limitazione di uno soloper contratto èin realtàper scopi di semplicitànell'implementazione di Michelson.
-
Con l'implementazione odierna,avere una sola BigMap significa che se haibisogno di due cose delgeneremap1e map2,devi codificareilmix dimap1e map2facendo qualcosa come:
key=Tasto sinistro1| Tasto destro2
Unesempioin cui si desidera avere due di questemappepuòessere un contratto che rappresentaimmobilie proprietari o oggetti da collezionee proprietari. Potresti voler accedere aiproprietari di alcunibeni obeni di alcuniproprietari.
Personalmentepenso che sarebbebelloeliminare questa restrizionein Michelson.
- 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.
-
Sfortunatamente,nonpuoi usarei tipi di somma come chiaviperbigmapperchéi tipi di sommanon sono confrontabili (senza unabuona ragione).Dovresti usare l'hash deltipo sole o la sua rappresentazionein byte compressi.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 Mi sonoperso questa limitazione quando ho scritto questa risposta.Grazieper laprecisione.Potrebbeessere ragionevole revocare questa restrizione allafine (e anchefare unitàe opzioniimmagino).@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
-
...e coppia. E sì,è unapatchpiuttosto sempliceper rendere questitipi comparabili... and Pair. And yes, it's a pretty straightforward patch to make these types comparable
- 1
- 2019-03-20
- Arthur B
Ho sentitoin moltiposti che Tezos utilizza untipo specifico di contenitore chiamato BigMappermemorizzarei dati all'interno di uno smart contract.
L'oggetto deveessere relativamente complessoperchéfinora è consentita una solaistanza di BigMap all'interno di un singolo smart contract.
Lemie domande sono le seguenti: