【Solidity】学习(3)
函数
重定义
不支持重定义,会在编译时候报错
pragma solidity ^0.4.0;
contract test {
uint public a =100;
function changeA () view returns(uint ){
a = 700;
return a;
}
}

继承
- 属性继承:public internal
- 方法继承:public internal external
- 继承重载
- 多重继承按顺序,同名属性(方法)按最后一个为准,如果子合约自身有,覆盖其他
构造函数
在合约部署时候就自动执行
- 使用合约同名的方法名,0.4版本
- 直接使用constructor()函数
pragma solidity ^0.4.0;
contract test {
address public add;
constructor(){
//合约部署之际就会将当前地址赋值给add
add = msg.sender;
}
}
析构函数
kill合约
pragma solidity ^0.4.0;
contract father{
address add;
uint public a = 1;
constructor (){
add = msg.sender;
}
function ins() {
a += 10;
}
//执行之后,再次点击a报错提示
function kill(){
if(add == msg.sender)
selfdestruct(add);
}
}
constant
- 函数内部的constant在4.0版本中和view等价,在5.0版本中被废弃
- 全局变量,constant变量,局部变量没有这个属性
- 全局变量加上constant属性,就不能被修改
getter
- public修饰符默认生产get方法,用于外部调用,不能在函数内部调用
function get() external view returns(uint){
return a;
}
- mapping特殊,会生成以下函数
mapping(int =>string) map;
function mapTest(int _a) view returns(string){
return map[_a];
}
modifier
pragma solidity ^0.4.0;
contract test {
uint public a;
address public add;
constructor(){
add = msg.sender;
}
modifier OnlyAdd{
require(add == msg.sender);
_;
}
//首先会判断是否满足modifier中require的条件,如果满足则执行语句,不满足则回滚
function changeA(uint _a) OnlyAdd{
a = _a;
}
}
执行顺序(1)
pragma solidity ^0.4.0;
contract test {
uint public a;
modifier m1{
a = 1;
_;
a = 2;
}
//讲_中的内容全部替换成changeA中的内容
function changeA() m1{
a = 100 ;
}
}

执行顺序(2)
pragma solidity ^0.4.0;
contract test {
uint public a;
modifier m1{
a = 1;
_;
a = 2;
}
modifier m2{
a = 3;
_;
a = 4;
}
//执行顺序是,先遇到m1,执行a=1,接着将m2替换m1中的_
//执行m2中的a=3,遇到_,用函数体替代之,执行完m2
//最后执行m1中剩余部分
function changeA() m1 m2{
a = 100 ;
}
}

【Solidity】学习(3)的更多相关文章
- solidity学习-cryptoPunks为实例
在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...
- solidity 学习笔记(7)内联汇编
为什么要有内联汇编? //普通循环和内敛汇编循环比较 pragma solidity ^0.4.25; contract Assembly{ function nativeLoop() public ...
- solidity 学习笔记(6)call 函数
call() 方法 call()是一个底层的接口,用来向一个合约发送消息,也就是说如果你想实现自己的消息传递,可以使用这个函数.函数支持传入任意类型的任意参数,并将参数打包成32字节,相互拼接后向合约 ...
- solidity 学习笔记(5)接口
接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...
- solidity 学习笔记(3) 函数修饰符/继承
修饰符: 函数修饰符有 constant view pure 其中 constant和view的功能是一样的 不会消耗gas 也就是说不会做任何存储 constant在5.0以后的版本中被废弃 ...
- solidity 学习笔记 2 (二维数组)
solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...
- solidity学习笔记
一 pragam solidity ^0.4.23; contract helloword{ string public name ="hello"; function getN ...
- 以太坊智能合约开发 Solidity学习
1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...
- solidity 学习笔记(4)library库
library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...
- cryptopunks的代码解释
1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...
随机推荐
- 【mybatis】使用mybatis框架中踩过的坑
好久没来记录一下自己的学习情况,最近都在学框架,今天来记录一下关于mybatis框架的学习过程中碰过的一些问题: 以下内容可能稍微有点凌乱,因为是把之前遇到过的错误或异常都集中一起了,不过我已经把问题 ...
- 【相关网站 - 01】- Java 相关网站
一.官方网站 1. Java 官方网站 https://www.java.com/zh_CN/ 2. Spring 官方网站 http://spring.io/ 1. Spring Framework ...
- 爬虫学习--MOOC爬取豆瓣top250
scrapy框架 scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片. scrapy E ...
- C#入门课程之基础认识
命名规则: 注意变量名的第一个字符必须是字母.下划线.以及@字符 字面值: 字符串字面值: 用Unicode表示一个字符方式:\uxxxx,其中xxxx表示4位的十六进制数,下面两种表示方式一致: u ...
- CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-1虚拟机安装及环境初始化
1.软件准备: VMware-workstation-full-14.1.2-8497320.exe CentOS-7-x86_64-DVD-1804.iso 2.VMare激活码: AU5WA-0E ...
- 批量替换表中某字段的“\t”
update dbo.Hishop_Products set [Description]=replace(cast([Description] as varchar(8000)),' ',' ')
- IIS发布MVC ASP.NET网站
发布网站后,发现无法访问,最后在配置文件上添加一段: <system.codedom> <compilers> <compiler language="c#;c ...
- Docker代理设置方法
1.注意Docker版本(此处版本为docker-ce-18.06.1) docker version 2.编辑Docker服务配置文件 vim /usr/lib/systemd/system/doc ...
- eclipse Filter web.xml 问题解决 异步请求@WebServlet
<filter> <filter-name>AsynServlete</filter-name> <filter-class>com.kad.app.a ...
- Linux下docker报错syntax error:unexpected protocol at end of statement
---恢复内容开始--- [Linux]Shell脚本“syntax error: unexpected end of file”原因及处理 :::https://blog.csdn.net/u013 ...