Qual é o contêiner Bigmap e por que isso importa?
1 responda
- votos
-
- 2019-02-22
- .
- O contêiner Bigmap é ummapaespecial (dicionário) cujo armazenamento só é lido ouescritopor chave sob demanda.
Amotivaçãoparateresse contêiner é o seguinte. Suponha que vocêtenha um contrato contendomuitos oumenos dadosindependentese não queira ler/escrevatodos os dados de uma só vez,mas apenas umapequenaparte dela. Penseem crypto-kitties,coleções,stos (tokens de segurança),etc. É,em geral,muitomaiseficiente recurso sábio (tempo degáse execução)para acessar apenas apeça que vocêprecisaem vez de carregartudo.
-
A limitação de apenas umpor contrato é realmenteparafins de simplicidadenaimplementação de Michelson.
-
com aimplementação de hoje,tendo apenas umbigmap significa que,se vocêprecisar de duas coisasmap1e map2,vocêprecisa codificar amistura de MAP1e MAP2fazendo algo como:
.
key=esquerda key1| Chave direita2
Umexemploem que vocêgostaria deter doismapaspodem ser um contrato que representaimóveise proprietários ou colecionáveis eproprietários. Vocêpode querer acessar osproprietários de algunsbens oubens de algunsproprietários.
Eupessoalmente acho que levantaresta restriçãoem Michelson seria legal.
- 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.
-
Infelizmente,vocênãopode usartipos de soma como chavesparabigmapsporque ostipos de somanão são comparáveis (pornenhumbommotivo).Vocêteria que usar o hash dotipo sol,ou sua representação debytesembalada.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
-
@Arthurth Euperdiessa limitação quandoescreviesta resposta.Obrigadopelaprecisão.Pode ser razoável levantaressa restriçãoeventualmente (efazer unidadee opçãotambém,eu acho).@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 par. E sim,é umpatchbastante diretoparatornaressestipos comparáveis... and Pair. And yes, it's a pretty straightforward patch to make these types comparable
- 1
- 2019-03-20
- Arthur B
Eu ouviem muitos lugares que Tezosestáfazendo uso de umtipoespecífico de contêiner chamadobigmappara armazenar dados dentro de um contratointeligente.
O objeto deve ser relativamente complexoporque até agora apenas umainstância BigMAP épermitidaem um único contratointeligente.
Minhasperguntas são as seguintes:
.- O que são o Bigmape comoeles diferem dos outrostipos de contêinerespadrão?(Eunãoencontreinenhumainformaçãono BigMAPno documentação Tezos )
- por que há uma limitaçãopara um únicoem um contratointeligente?
- Qual seria a vantagem determais de um?(Defato,vejo que atualmente há WIPpara levantaressa restrição,ver Esteproblemagitlab)