Was ist der BigMap-Container und warum ist es wichtig?
1 Antworten
- Stimmen
-
- 2019-02-22
- .
- Der BigMap-Containeristeine spezielle Karte (Wörterbuch),deren Speichernurpro Schlüssel auf Anfragegelesen odergeschrieben wird.
Die Motivation,einen solchen Behälter zu haben,ist derfolgende. Angenommen,Sie habeneinen Vertrag,der vielemehr oder weniger unabhängige Datenenthält,und Siemöchtennichteinmal alle Daten aufeinmal lesen/schreibenmöchten,sondernnureinen kleinen Teil davon. Denken Sie an Crypto-Kätzchen,Sammlungen,Stoten (Sicherheitstiken) usw. Esistim Allgemeineneine vieleffizientere Ressourcen (Gas- und Ausführungszeit),umnur auf dengewünschten Teil zuzugreifen,anstatt alles zu laden.
-
Die Einschränkung vonnureinem pro Vertragist wirklichfüreinfachheitliche Zweckein der Michelson-Implementierung.
-
Mit der heutigen Implementierungbedeutet,dass Sienureine BigMap haben,wenn Sie zwei solcher Dinge MAP1 und MAP2benötigen,müssen Sie das Mischen von MAP1 und MAP2 codieren,indem Sieetwastun:
key=links key1| Right Key2
Ein Beispiel,in dem Sie zwei solcher Karten habenmöchten,kannein Vertrag sein,der Immobilien und Besitzer oder Collectibles und Besitzer darstellt. Möglicherweisemöchten Sie auf Eigentümer von Waren oder Wareneiniger Eigentümer zugreifen.
Ich denkepersönlich,dass das Anheben dieser Einschränkungin Michelsonnett sein würde.
- 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.
-
Leider können Sie SUMP-Typennicht als Schlüssel zu BigMaps verwenden,da SUM-Typennicht vergleichbar sind (ohneeinen guten Grund).Siemüssten den Hash des Sonnenarts oder der verpackten Byte-Darstellung verwenden.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
-
@Thurturb Ich habe diese Einschränkung vermisst,alsich diese Antwort schrieb.Dankefür die Präzision.Es kann sinnvoll sein,diese Einschränkung schließlich zu heben (und die Einheit und Option auch,denkeich).@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
-
... und Paar. Undja,esistein ziemlich unkomplizierter Patch,um diese Typen vergleichbar zumachen... and Pair. And yes, it's a pretty straightforward patch to make these types comparable
- 1
- 2019-03-20
- Arthur B
Ich habe an vielen Ortengehört,dass Tezoseine bestimmte Art von Behälternamens BigMapnutzt,um Datenin einem Smart-Vertrag zu speichern.
Das Objektmuss relativ komplex sein,dabishernureine BigMap-Instanzinnerhalbeineseinzelnen Smart-Vertragserlaubtist.
Meine Fragen sindfolgende:
.- Was sind Bigmaps und wie unterscheiden sie sich von den anderen Standardtypen von Containern?(Ich habe keine Informationen über BigMapin der Tezos-Dokumentation )
- Warumgibt eseine Einschränkungeinereinzigen Singlein einemintelligenten Vertrag?
- was wäre der Vorteil,mehr alseins zu haben?(In der Tat seheich,dasses derzeit WIPgibt,um diese Einschränkung zu heben,siehe dieses Gitlab-Problem)