Solidity基本数据结构
任何一个智能合约都会在最开头表示使用的编译器版本
如:prama solidity ^0.4.0
数组:
//静态数组 大小长度确定
uint[2] fixedArray;
//动态数组,可以随意添加元素
uint[ ] fixedArray;
使用push指令来添加 fixedArray,push()//添加后会返回一个引索值
//公共数组,使用关键字public。可以被别人调用读取但是不能修改
uint[ ] public people;
//struct数组
结构体[ ] 数组名
数组.push()返数组的长度跟C一样的应用数组下标
定义函数:
function eatHamburgers(string_name,uint _amout){
}
function 函数名(参数){
}
在solidity中的函数默认为公有,但是可以设置为私有。可以保护合约
function _addToArray(uint _number) private{
函数体
}//在函数后面添加private即可。和函数的参数类似私有函数的用下划线开始
除了public和private在solidity中还有internal和external两种描述函数可见性的修饰词
internal和private类似表示私有,但是internal修饰的函数在另一个继承合约是可以使用的
external和public类似,但是只能在其他合约中调用这个函数,在该合约一种不能被其他函数调用。
跟Go语言同样是可以定义返回值的类型
function _addToArray() public returns (string){ //需要注意的是这里是returns
}
函数修饰分为 view和pure:
view指只能读取数据不能更改数据//使用view标记的函数只用提取,所以可以节省gas但只能是在该合约里面如果从别人的合约中提取view一样需要提供gas。
pure函数 指函数不访问应用的数据,返回值完全取决于输入的参数
函数修饰符:函数修饰符跟函数是类似的,不用是用来修饰已有的函数,在其他语句执行前,为它先检验条件。关键字modifier(修饰符)
Ownable合约非常常用,大多数Solidity DApp首先继承出它的子类再在上面开发
调用函数修饰符常常用在函数的后面跟public和private等一个位置用来判断是否执行该函数
函数修饰符通常使用下划线结尾
如:modifier olderThan(uint _age,uint _userId){
require(age[_userID]>= _age);
_; //以_;结尾表示函数正常返回继续执行之前的功能
}
Keccak256:
ethereum内部有散列函数keccak256,用SHA3版本。这散列函数的作用就是把这字符串转化为一256位的16进制数字。
映射(Mapping)和地址(Address):
1.Address
在区块链中Address相当于你的账户名字。
当用户使用你的DApp交互时,生成的所有权被设置在调用者的Address
2.Mapping:
其实就是键值对
定义:
创建映射:
mapping(键类型 => 值类型)名字
运用映射:(得使用msg.sender)//在solidity中有一些全局变量可以被所有函数调用,msg.sender就是其中的一个变量,它指的是当前调用者(或智能合约的address)
在mapping中存储数据跟数组类似: 名字[键名] = value
时间单位:
Solidity使用自己的本地时间单位变量now将返回当前的unix世界戳(自1970年1月1日以来经历的描述)(Unix传统用32位来存储,但导致2038年不够用)调整到64位会导致gas使用太多。
Solidity还包含了seconds,minutes,hours,days,weeks,years等会转化为对应的秒数放入uint中。可直接对变量进行赋值
Solidity基本数据结构的更多相关文章
- 智能合约语言 Solidity 教程系列4 - 数据存储位置分析
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 这部分的内容官方英文文档讲的不是很透,因此我在参考Soli ...
- 智能合约语言 Solidity 教程系列6 - 结构体与映射
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本系列文章一部分是参考Solidity官方文档(当前最新版 ...
- Solidity 中文文档 —— 第一章:Introduction to Smart Contracts
第一章:智能合约简介 粗略地翻译了 Ethereum 的智能合约开发语言的文档:Solidity.欢迎转载,注明出处. 有任何问题请联系我,本人微信:wx1076869692,更多详情见文末. 我是 ...
- Solidity by Example详解 - Voting
Example地址:https://solidity.readthedocs.io/en/develop/solidity-by-example.html#voting Voting程序的功能: 这个 ...
- 智能合约开发solidity编程语言开发一个以太坊应用区块链投票实例
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力.智能合约其实是"执行合 ...
- solidity learning (1)
学习文档笔记:http://solidity-cn.readthedocs.io/zh/develop/layout-of-source-files.html 1.pragma solidity ^0 ...
- Solidity合约记录——(三)如何在合约中对操作进行权限控制
合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...
- solidity学习-cryptoPunks为实例
在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...
- 以太坊智能合约介绍,Solidity介绍
以太坊智能合约介绍,Solidity介绍 一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. Storage contract SimpleSt ...
随机推荐
- 【网易官方】极客战记(codecombat)攻略-地牢-橱柜里的骷髅
关卡连接: https://codecombat.163.com/play/level/cupboards-of-kithgard 谁知道什么样的恐怖事情潜伏在 Kithgard 的橱柜里? 简介: ...
- JS高级---案例贪吃蛇,把封装的函数移动到js文件中
案例贪吃蛇,把封装的函数移动到js文件中 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 6月28日至7月6日第一周小学期学习c++编程收获
6.28日开始,进入小学期,也就是在10天十天时间内集中练习,以提高编程能力.此次小学期的作业共有十道题,其中分为四大类,系统类,数学类,游戏类,链表类. 我开始的时候面对第一,二题,系统类,因为当时 ...
- java 子线程异常处理
如何在父线程中捕获来自子线程的异常呢 方法一:子线程中try... catch... 方法二:为线程设置异常处理器UncaughtExceptionHandler (异常处理也是在子线程中执行,相当于 ...
- buuctf 二维码
首先下载文件 然后用解压工具解压之后 发现是一个二维码 扫描二维码 并没有拿到 flag 然后将图片拖进 hxd中搜索PK发现有一个压缩包 将压缩包提取出来 暴力破解 然后得到密码 然后解压 然后得 ...
- rancher 方式创建nfs-client 存储类流程
rancher 方式创建nfs-client 存储类流程 待办 https://www.iamle.com/archives/2514.html
- ubuntu的dpkg命令安装和卸载软件
实际使用中,可以先到网上下载deb文件,然后用dpkg命令来安装. sudo dpkg -l | grep 360 #查看包含360的软件sudo dpkg -i browser360-cn-stab ...
- 【游戏体验】Haunted House(鬼屋历险记)
>>>点此处可试玩无敌版<<< 这款游戏可谓是经典,很多人的童年都有过它的陪伴,不妨重拾当年的快乐 个人测评 游戏性 9/10 音乐 7/10 剧情 4/10 总评 ...
- 图片上传至/target/upload目录下后,通过ip:port/upload/无法访问
做以下配置即可 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { try { registry ...
- tkinter学习(5)messagebox、pack、grid和place方法
1.messagebox信息弹出框 1.1 代码: import tkinter as tk #导出tk模块 import tkinter.messagebox #导出弹出信息框 #定义窗口.标题.大 ...