函数

重定义

不支持重定义,会在编译时候报错

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)的更多相关文章

  1. solidity学习-cryptoPunks为实例

    在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...

  2. solidity 学习笔记(7)内联汇编

    为什么要有内联汇编? //普通循环和内敛汇编循环比较 pragma solidity ^0.4.25; contract Assembly{ function nativeLoop() public ...

  3. solidity 学习笔记(6)call 函数

    call() 方法 call()是一个底层的接口,用来向一个合约发送消息,也就是说如果你想实现自己的消息传递,可以使用这个函数.函数支持传入任意类型的任意参数,并将参数打包成32字节,相互拼接后向合约 ...

  4. solidity 学习笔记(5)接口

    接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...

  5. solidity 学习笔记(3) 函数修饰符/继承

    修饰符: 函数修饰符有 constant  view pure 其中 constant和view的功能是一样的  不会消耗gas 也就是说不会做任何存储   constant在5.0以后的版本中被废弃 ...

  6. solidity 学习笔记 2 (二维数组)

    solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...

  7. solidity学习笔记

    一 pragam solidity ^0.4.23; contract helloword{ string public  name ="hello"; function getN ...

  8. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  9. solidity 学习笔记(4)library库

    library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...

  10. cryptopunks的代码解释

    1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...

随机推荐

  1. 【mybatis】使用mybatis框架中踩过的坑

    好久没来记录一下自己的学习情况,最近都在学框架,今天来记录一下关于mybatis框架的学习过程中碰过的一些问题: 以下内容可能稍微有点凌乱,因为是把之前遇到过的错误或异常都集中一起了,不过我已经把问题 ...

  2. 【相关网站 - 01】- Java 相关网站

    一.官方网站 1. Java 官方网站 https://www.java.com/zh_CN/ 2. Spring 官方网站 http://spring.io/ 1. Spring Framework ...

  3. 爬虫学习--MOOC爬取豆瓣top250

    scrapy框架 scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬虫框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片. scrapy E ...

  4. C#入门课程之基础认识

    命名规则: 注意变量名的第一个字符必须是字母.下划线.以及@字符 字面值: 字符串字面值: 用Unicode表示一个字符方式:\uxxxx,其中xxxx表示4位的十六进制数,下面两种表示方式一致: u ...

  5. 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 ...

  6. 批量替换表中某字段的“\t”

    update dbo.Hishop_Products set [Description]=replace(cast([Description] as varchar(8000)),' ',' ')

  7. IIS发布MVC ASP.NET网站

    发布网站后,发现无法访问,最后在配置文件上添加一段: <system.codedom> <compilers> <compiler language="c#;c ...

  8. Docker代理设置方法

    1.注意Docker版本(此处版本为docker-ce-18.06.1) docker version 2.编辑Docker服务配置文件 vim /usr/lib/systemd/system/doc ...

  9. eclipse Filter web.xml 问题解决 异步请求@WebServlet

    <filter> <filter-name>AsynServlete</filter-name> <filter-class>com.kad.app.a ...

  10. Linux下docker报错syntax error:unexpected protocol at end of statement

    ---恢复内容开始--- [Linux]Shell脚本“syntax error: unexpected end of file”原因及处理 :::https://blog.csdn.net/u013 ...