博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
solidity_mapping_implementation
阅读量:5835 次
发布时间:2019-06-18

本文共 1022 字,大约阅读时间需要 3 分钟。

solidity 中 mapping 是如何存储的

为了探测 solidity mapping 如何实现,我构造了一个简单的合约. 先说结论,实际上 mapping的访问成本并不比直接访问storage变量多花费更多的 gas.两者几乎差不多.

构造合约

pragma solidity ^0.4.23;contract TestMap{     mapping(uint256 => uint256) public channels;     function TestSet() external{        channels[0x39]=0x77;     }}

合约非常简单,就是写一个 mapping.

汇编指令

最主要是这些指令里面就有一条昂贵的就是 sstore, 至少需要5000gas.

/* "testmapping.sol":151:155  0x77 */      0x77        /* "testmapping.sol":136:144  channels */      0x0        /* "testmapping.sol":136:150  channels[0x39] */      dup1        /* "testmapping.sol":145:149  0x39 */      0x39        /* "testmapping.sol":136:150  channels[0x39] */      dup2      mstore      0x20      add      swap1      dup2      mstore      0x20      add      0x0      keccak256        /* "testmapping.sol":136:155  channels[0x39]=0x77 */      dup2      swap1      sstore      pop

总结

由于指令的成本较低,写 storage 最少需要5000gas, 而 sha3只需要30+gas, 可以忽略不计,其他指令也很便宜.

当然如果是读的话,就稍微贵一点点,读 storage 是200gas, 那么 sha3加上这些指令,估计就有接近100了.
不过如果mapping 确实可以带来便利,那就用 mapping 吧.

转载地址:http://ljycx.baihongyu.com/

你可能感兴趣的文章
Hibernate download
查看>>
防止 JavaScript 自动插入分号
查看>>
Java工厂模式
查看>>
TMS320F28335项目开发记录5_28335之CCS编程基础
查看>>
hive列转行
查看>>
GridView编辑删除操作
查看>>
二叉树的三种遍历的应用(表达式,求深度,叶子数,结点数,二叉树的建立,复制)...
查看>>
说说JSON和JSONP,也许你会豁然开朗
查看>>
依据道路的shape获得high_cross和low_cross
查看>>
SAE+Java+jetty
查看>>
Java 权限框架 Shiro 实战一:理论基础
查看>>
大话数据结构之四(串)
查看>>
加热炉简是新来的整个系统的板
查看>>
Mockito使用注意事项
查看>>
[LeetCode] Palindrome Linked List 回文链表
查看>>
UVA - 825Walking on the Safe Side(dp)
查看>>
android大概是通过logcat拦截Log
查看>>
android HDMI 清晰度 分辨率
查看>>
Codeforces 480C Riding in a Lift dp
查看>>
JQuery发送Put、Delete请求 - 摘自网络
查看>>