マップとビッグマップの相対的なガスコスト
1 回答
- 投票
-
- 2020-01-29
調べてみましょう.サンドボックスノードを実行することから始めます. 2つの契約を作成します.1つはマップ用、もう1つはビッグマップ用です.
パラメータ(ペアアドレスNAT); ストレージ(big_mapアドレスNAT); コード {{ ペアリング解除; ペアリング解除; DIP {SOME}; 更新; NIL操作; ペア; };
(これはbig_mapバージョンです.マップバージョンは、タイプ「bigmap」が「map」に変更されたものと同じです).
最初の違いは、マップバージョンでは、ビッグマップバージョンの
0.391tez
と比較して、オリジネーションバーンで0.361tez
が必要です.小さなPythonプログラムを使用して、ダミーアドレス
を生成します.genadd.py
#!/usr/bin/python3 base58をインポート、ランダム print(base58.b58encode_check(b '\ x06 \ xa1 \ x9f' +bytes([random.getrandbits(8) fori in range(0,20)])).decode( 'ascii'))
契約を次のように呼びます:
tezos-clienttransfer 0frombootstrap1to Bench_map --arg '(Pair "'
./genadd.py'" 0)' -D --burn-cap 0.031 コード>
燃焼キャップは0.031で、13363のガスが消費されます.
対照的に、ビッグマップの場合、必要な燃焼キャップは0.067で、消費ガスは13395です.利点:マップ.
2回目の挿入:バーンキャップは変更されていません.ビッグマップでは13395ガスですが、現在はマップで14285ガスです.
これで完了です.最初の要素が挿入された後、マップではなくビッグマップを使用することはガス節約になります.
好奇心から3番目の要素を見てみましょう.バーンキャップは変更されていません.マップのガスは15231で、ビッグマップのガスは13395で変更されていません.
これから、マップ内の各要素について、ガスコストに約900を追加することが明らかになります.これはすぐに加算されます.
ただし、そのベンチマークはすべてを示しているわけではありません. 1つのキーのみにアクセスする場合は、明らかにビッグマップの方が適していますが、すべてのキーまたは多くのキーにアクセスする場合は、マップの方が適している可能性があります.
Let's find out. We start by running a sandbox node. We'll originate two contracts, one for maps, the other for bigmap.
parameter (pair address nat); storage (big_map address nat); code { UNPAIR; UNPAIR; DIP { SOME }; UPDATE; NIL operation; PAIR; };
(this is the big_map version, the map version is the same with the type "bigmap" changed to "map").
First difference, the map version takes
0.361 tez
in origination burn compared to0.391 tez
for the bigmap version.We'll use a small python program to generate dummy addresses,
genadd.py
#!/usr/bin/python3 import base58, random print(base58.b58encode_check(b'\x06\xa1\x9f' + bytes([random.getrandbits(8) for i in range(0,20)])).decode('ascii'))
We call the contract as:
tezos-client transfer 0 from bootstrap1 to bench_map --arg '(Pair "'
./genadd.py'" 0)' -D --burn-cap 0.031
The burn cap is 0.031 and 13363 of gas is consumed.
In contrasts, for the bigmap, the burn cap needed is 0.067 and the gas consummed is 13395. Avantage: map.
Second insertion: burn caps are unchanged, 13395 gas for the bigmap, but, now, 14285 gas for the map.
So there you have it. After the first element is inserted, it becomes gas-sparing to use a bigmap as opposed to a map.
Let's look at a third element out of curiosity. Burn caps are unchanged, gas for the map is 15231 and gas for the bigmap is unchanged at 13395.
From this is becomes clear that for each element in the map, we add about 900 to the gas cost. This adds up quickly.
However, that benchmark does not show everything! If you want to access only one key, clearly the bigmap is better, but if you wanted to access all of the keys, or many keys, the map might be better.
-
素晴らしい説明、どうもありがとう!コントラクトに複数のbig_mapを含めること、またはbig_map内にbig_mapを含めることは可能ですか?Awesome Description, Thanks a lot! is it feasible to have multiple big_maps in a contract or big_map inside a big_map ?
- 0
- 2020-04-06
- CryptoScroller
-
1.複数のbig_maps:はい.2.big_mapのbig_map:いいえ.1.Multiple big_maps: YES. 2. big_map of big_map: NO.
- 1
- 2020-05-12
- Daly
マップ/ビッグマップ間に現実的なパフォーマンスベンチマークはありますか?
ガスコストの最適化に大きな地図を使用する方が理にかなっている転換点を探しています