memory & storage
storage的结构是在合约部署创建时,根据你的合约中状态变量的声明,就固定下来了,并且不能在将来的合约方法调用中改变这个结构。但是,storage中的内容是可以通过交易来改变的。这些交易调用因此将修改合约的状态。

memory关键字告诉solidity应当在该函数运行时为变量创建一块空间,使其大小和结构满足函数运行的需要。(应该是可以改变这个结构的)

首先局部变量默认是storage类型,状态变量是强制为storage类型。

全局的状态变量和局部变量存储在storage(存储器中)
函数参数和返回的参数存放在memory(内存中)

数据类型举例:
uint
bool
address
bytes32
uint[]
string
enum
mapping

push:
1.面对uint[], push可以加一个uint
2.面对bytes[],push只可以加256以内的(2的8次方)

pragma solidity ^0.4.0;
contract ArrayExample{uint[] uintArray;bytes b;function arrayPush() returns (uint){uint[2] memory a =[uint(1), 2];uintArray = a;return uintArray.push(3);}function bytesPush() returns (uint){b = new bytes(3);return b.push(255);//must be lower than 256(1 byte)}
}

看看结果吧,显示arrayPush()的,push后返回的是长度:

至于bytesPush()的话,由于只能加一位,返回当然就是4:

mapping:
映射就是键值对,这里用的是Keccak-256哈希,因此映射查找速度特别快。
映射的值类型也可以是映射,提供键值递归访问。

pragma solidity ^0.4.0;
contract MappingExample{mapping(address => uint) public balances;uint balance;function updateBalance(uint amount) returns (uint){balances[msg.sender] += amount;balance = balances[msg.sender];return balance;}
}

通过mapping实现虚拟的存款累加,例如我累加了两次20,查询balances的时候就会发现有40:


总结:
mapping在合约资金的投入与账户管理中的作用非同寻常,如何将交易的钱挂钩到mapping数组中的操作也是我要在后续阅读中学会的。

Solidity ——push mapping 探赜索隐相关推荐

  1. Solidity基础四

    あなたもきっと.誰かの奇跡 (你也一定会是某个人的奇迹) 目录 一.Solidity的结构体 1.结构体的实例化 2.结构体的基本使用 访问和修改结构体成员 3.结构体的修饰符 二.Solidity的 ...

  2. Solidity – 代码注释

    章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...

  3. Solidity - 介绍

    章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...

  4. Knockout中ko.utils中处理数组的方法集合

    每一套框架基本上都会有一个工具类,如:Vue中的Vue.util.Knockout中的ko.utils.jQuery直接将一些工具类放到了$里面,如果你还需要更多的工具类可以试试lodash.本文只介 ...

  5. [译] 论 Rust 和 WebAssembly 对源码地址索引的极限优化

    原文地址:Oxidizing Source Maps with Rust and WebAssembly 原文作者:Nick Fitzgerald 译文出自:掘金翻译计划 本文永久链接:github. ...

  6. Navicate模型文件(ndm2)解析成易读json

    Navicate的模型文件ndm2文件本身就是json文件,以下方法主要是提取模型的schema及表字段和关联关系json function transMappingType(mapping){swi ...

  7. solidity mapping of mapping

    solidity mapping of mapping,两层映射,用的时候可以像二维数组一样去访问和修改值,非常方便. 以下代码示例中的这一句: mapping(string => mappin ...

  8. solidity合约访问其他合约的mapping

    solidity合约访问其他合约的mapping的方式 更多区块链技术与应用分类: 区块链应用    区块链开发 以太坊 | Fabric | BCOS | 密码技术 | 共识算法 | 比特币 | 其 ...

  9. 第132篇 solidity 中的 mapping

    Mapping 创建语法: mapping(keyType => valueType). keyType 可以是任何内置值类型.字节.字符串或任何约定. valueType 可以是任何类型,包括 ...

最新文章

  1. python是用c写的吗-python和c语言的区别是什么
  2. oracle 年龄计算 岁 月 天
  3. iview admin npm install报错_聊聊NPM镜像那些险象环生的坑
  4. linux 网络设置
  5. 商汤科技2020数据分析师0820笔试题目整理
  6. python程序设计实验七_Python程序设计实验报告七:组合数据类型
  7. mysql进程线程_MySQL 内核线程简要分析
  8. odoo tree 排序
  9. MS DTC服务无法启动解决方法
  10. sshd报错Privilege separation user sshd does not exist的解决办法
  11. wo-27s管理员账户和密码_Mac管理员忘记密码怎么办?
  12. ODC(Orthogonal Defect Classification)简介——正交缺陷分类法
  13. 如何做一款有灵魂的App——关于hope的启发以及对于追梦App的思考
  14. 谈个人网站发展及赚钱
  15. 检测到远端X服务正在运行中
  16. 华为鸿蒙系统支持旧机型,华为鸿蒙系统2.0来了! 华为鸿蒙2.0系统支持手机机型...
  17. java过滤微信昵称emoji表情
  18. 植物大战僵尸 for Mac(策略游戏)m1
  19. scanf()函数的使用
  20. 为什么我要用GoEasy替代WebSocket

热门文章

  1. C# 添加、删除PPT水印
  2. Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-buil
  3. 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
  4. 哈工大计算机网络第一章——计算机网络概述复习
  5. 恭贺新春-杨建荣敬祝
  6. Field accountDao in com.mdxl.service.AccountService required a bean of type 'com.mdxl.dao.MbAccountD
  7. 五险一金真的那么重要吗?为什么很多人宁愿做小时工不要五险一金?
  8. Java实现菱形图案
  9. 如何投稿iMeta期刊?ScholarOne投审稿系统作者使用教程
  10. CODESOFT6 二维码中追加回车