Solidity ——push mapping 探赜索隐
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 探赜索隐相关推荐
- Solidity基础四
あなたもきっと.誰かの奇跡 (你也一定会是某个人的奇迹) 目录 一.Solidity的结构体 1.结构体的实例化 2.结构体的基本使用 访问和修改结构体成员 3.结构体的修饰符 二.Solidity的 ...
- Solidity – 代码注释
章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...
- Solidity - 介绍
章节 Solidity – 介绍 Solidity – 环境搭建 Solidity – 基础语法 Solidity – 第一个程序 Solidity – 代码注释 Solidity – 数据类型 So ...
- Knockout中ko.utils中处理数组的方法集合
每一套框架基本上都会有一个工具类,如:Vue中的Vue.util.Knockout中的ko.utils.jQuery直接将一些工具类放到了$里面,如果你还需要更多的工具类可以试试lodash.本文只介 ...
- [译] 论 Rust 和 WebAssembly 对源码地址索引的极限优化
原文地址:Oxidizing Source Maps with Rust and WebAssembly 原文作者:Nick Fitzgerald 译文出自:掘金翻译计划 本文永久链接:github. ...
- Navicate模型文件(ndm2)解析成易读json
Navicate的模型文件ndm2文件本身就是json文件,以下方法主要是提取模型的schema及表字段和关联关系json function transMappingType(mapping){swi ...
- solidity mapping of mapping
solidity mapping of mapping,两层映射,用的时候可以像二维数组一样去访问和修改值,非常方便. 以下代码示例中的这一句: mapping(string => mappin ...
- solidity合约访问其他合约的mapping
solidity合约访问其他合约的mapping的方式 更多区块链技术与应用分类: 区块链应用 区块链开发 以太坊 | Fabric | BCOS | 密码技术 | 共识算法 | 比特币 | 其 ...
- 第132篇 solidity 中的 mapping
Mapping 创建语法: mapping(keyType => valueType). keyType 可以是任何内置值类型.字节.字符串或任何约定. valueType 可以是任何类型,包括 ...
最新文章
- python是用c写的吗-python和c语言的区别是什么
- oracle 年龄计算 岁 月 天
- iview admin npm install报错_聊聊NPM镜像那些险象环生的坑
- linux 网络设置
- 商汤科技2020数据分析师0820笔试题目整理
- python程序设计实验七_Python程序设计实验报告七:组合数据类型
- mysql进程线程_MySQL 内核线程简要分析
- odoo tree 排序
- MS DTC服务无法启动解决方法
- sshd报错Privilege separation user sshd does not exist的解决办法
- wo-27s管理员账户和密码_Mac管理员忘记密码怎么办?
- ODC(Orthogonal Defect Classification)简介——正交缺陷分类法
- 如何做一款有灵魂的App——关于hope的启发以及对于追梦App的思考
- 谈个人网站发展及赚钱
- 检测到远端X服务正在运行中
- 华为鸿蒙系统支持旧机型,华为鸿蒙系统2.0来了! 华为鸿蒙2.0系统支持手机机型...
- java过滤微信昵称emoji表情
- 植物大战僵尸 for Mac(策略游戏)m1
- scanf()函数的使用
- 为什么我要用GoEasy替代WebSocket
热门文章
- C# 添加、删除PPT水印
- Command “python setup.py egg_info“ failed with error code 1 in /tmp/pip-buil
- 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
- 哈工大计算机网络第一章——计算机网络概述复习
- 恭贺新春-杨建荣敬祝
- Field accountDao in com.mdxl.service.AccountService required a bean of type 'com.mdxl.dao.MbAccountD
- 五险一金真的那么重要吗?为什么很多人宁愿做小时工不要五险一金?
- Java实现菱形图案
- 如何投稿iMeta期刊?ScholarOne投审稿系统作者使用教程
- CODESOFT6 二维码中追加回车