【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然后跟该值对比看图像对不对.这就是它的用处,在 ...
随机推荐
- Ubuntu 通过apt安装VSCode
1. sudo vim /etc/apt/sources.list.d/vscode.list 并向里面添加:deb [arch=amd64] http://packages.microsoft.co ...
- VS2017用正则表达式替换多行代码
await IndexManyAsync\(item.Value, item.Key, "doc"\);\r\n.*\}.*\r\n.*\} 上面的代码,匹配的是下面的代码 awa ...
- 4-21 嵌套选择器 、块级元素和内联元素、光标、布局-overflow
1.嵌套选择器 p{ }: 为所有 p 元素指定一个样式.(默认,,也就是说可以被改变样式) .marked{ }: 为所有 class="marked" 的元素指定一个样式. . ...
- BP算法的矩阵推导
目录 1. 需要的微积分知识 1.1 导数 1.2 求导的链式法则 2. 梯度下降法 2.1 梯度 2.2 梯度算法的解释 3.误差反向传播算法 3.1 理论推导 3.1.1 符号说明 3.1.2 推 ...
- srs之深入浅出看流媒体
本文转载:https://blog.csdn.net/zjqlovell/article/details/50786040 CDN这几年爆炸式增长,带宽提速是根源,而HTTP始终还是那个屌样,因此目前 ...
- Mac使用Charles进行HTTPS抓包
技术来源: PengYunjing 第一步 配置HTTP代理,这步与抓取HTTP请求是一样的: 选择在8888端口上监听,然后确定.够选了SOCKS proxy,还能截获到浏览器的http访问请求. ...
- select 的选中问题
function bind(pageIndex) { if (getQueryString("_status") == "3") {//从首页中慢病管理人数进入 ...
- g++编译X265
自己参考用: msys2 编译X265的命令 编译用工具安装 pacman -S git make tar automake autoconf libtool pkg-config mingw-w64 ...
- python 15 常用模块三 re模块
一.正则模块 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...
- Python之路(第三十四篇) 网络编程:验证客户端合法性
一.验证客户端合法性 如果你想在分布式系统中实现一个简单的客户端链接认证功能,又不像SSL那么复杂,那么利用hmac+加盐的方式来实现. 客户端验证的总的思路是将服务端随机产生的指定位数的字节发送到客 ...