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中。可直接对变量进行赋值
最新文章
- 部署samba服务之后,在客户端用挂载访问的方式,错误信息:mount: block device //192.168.1.108/mysqldata is write-protected, mounting read-only mount: cannot mount block device //192.168.1.108/mysqldata read-only
- JavaWeb开发学习(二)-配置Tomcat服务器
- ES6:JavaScript 新特性
- JS获取IP
- 在Eclipse中编译maven项目出的问题
- hdu 1196
- 走进C标准库(6)——";string.h";中函数的实现memchr
- sql中的for xml path() 实现字符串拼接
- win10配置Memcached及MVC5测试分布式缓存入门
- linux查看和修改PATH环境变量的方法
- 【Python基础】lpthw - Exercise 41 学习面向对象术语
- centos7 php-apache镜像添加redis/memcache/gd/mysql_pdo/mysqli/imagick
- leetCodelinked-list-cycle-ii找到链表的环
- Qt532.数值转为16进制(并填充)
- thinkphp 5 wherein
- NC 6系分配组织方法
- stl中的map经验
- linux下php安装
- Python中for、while、break、continue、if的使用
- Pathway富集分析气泡图
热门文章
- 结合webpack使用vue-router和它的子路由,即路由嵌套
- Git的基本使用 -- 创建本地仓库
- C++转换构造函数和隐式转换函数
- 第二十篇 Linux条件测试语句相关知识点介绍
- springboot整合mybatis连接oracle
- python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计
- CPI和PPI,谁代表了通膨?
- Codeforces Round #618 (Div. 1)A(观察规律)
- Linux Mysql8每天定时备份数据库并自动删除7天之前的备份
- Bugku-CTF加密篇之+[]- (+++++ +++++ [->;++ +++++ +++<;] >;++.+ +++++ .<;+++ [->;-- -<;]>;- -.+++ +++.<; ++++[ ->;.........)