函数过载

合约内允许定义同名函数,但是输入参数不一致

pragma solidity ^0.4.17;

contract A {
function f(uint _in) public pure returns (uint out) {
out = 1;
} function f(uint _in, bytes32 _key) public pure returns (uint out) {
out = 2;
}
}
pragma solidity ^0.4.16;

contract A {
function f(B _in) public pure returns (B out) {
out = _in;
} function f(address _in) public pure returns (address out) {
out = _in;
}
} contract B {
}

事件

// 事件可方便使用EVM的日志工具,通过dapp的用户接口调用回调函数进行监听。

pragma solidity ^0.4.0;

contract ClientReceipt {
event Deposit(
address indexed _from,
bytes32 indexed _id,
uint _value
); function deposit(bytes32 _id) public payable {
// 任何调用当前函数的操作都会被检测到
Deposit(msg.sender, _id, msg.value);
}
}
var abi = /* abi as generated by the compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceipt = ClientReceipt.at("0x1234...ab67"); /* address */ var event = clientReceipt.Deposit();
event.watch(
function(error, result) {
if (!error)
console.log(result);
}); /*或者
var event = clientReceipt.Deposit(function(error, result) {
if (!error)
console.log(result);
});
*/

使用log低层接口

log0, log1, log2, log3, log4 ~ logN

pragma solidity ^0.4.10;

contract C {
function f() public payable {
bytes32 _id = 0x420042;
log3(
bytes32(msg.value),
bytes32(0x50cb9fe53daa9737b786ab3646f04d0150dc50ef4e75f59509d83667ad5adb20),
bytes32(msg.sender),
_id
);
}
}

用于理解事件的其他资源

接口

当合约继承其他合约,仅一个单独的合约被区位链建立,代码从基础合约复制到建立的合约中。

pragma solidity ^0.4.16;

contract owned {
address owner; // 构造函数
function owned() {
owner = msg.sender;
}
} // 继承合约owned的所有属性,但不能使用通过this进行外部访问
contract mortal is owned {
function kill() {
if (msg.sender == owner)
selfdestruct(owner);
}
} // These abstract contracts are only provided to make the
// interface known to the compiler. Note the function
// without body. If a contract does not implement all
// functions it can only be used as an interface.
contract Config {
function lookup(uint id) public returns (address adr);
} contract NameReg {
function register(bytes32 name) public;
function unregister() public;
} contract named is owned, mortal {
function named(bytes32 name) {
Config config = Config(0xD5f9D8D94886E70b06E474c3fB14Fd43E2f23970);
NameReg(config.lookup(1)).register(name);
} function kill() public {
if (msg.sender == owner) {
Config config = Config(0xD5f9D8D94886E70b06E474c3fB14Fd43E2f23970);
NameReg(config.lookup(1)).unregister();
mortal.kill();
}
}
} contract PriceFeed is owned, mortal, named("GoldFeed") {
function updateInfo(uint newInfo) public {
if (msg.sender == owner)
info = newInfo;
} function get() public view returns(uint r) {
return info;
} uint info;
}
pragma solidity ^0.4.0;

contract owned {
address owner; function owned() public {
owner = msg.sender;
}
} contract mortal is owned {
function kill() public {
if (msg.sender == owner)
selfdestruct(owner);
}
} contract Base1 is mortal {
function kill() public {
/* do cleanup 1 */
mortal.kill();
}
} contract Base2 is mortal {
function kill() public {
/* do cleanup 2 */
mortal.kill();
}
} contract Final is Base1, Base2 {
}
pragma solidity ^0.4.0;

contract owned {
function owned() public {
owner = msg.sender;
} address owner;
} contract mortal is owned {
function kill() public {
if (msg.sender == owner)
selfdestruct(owner);
}
} contract Base1 is mortal {
function kill() public {
/* do cleanup 1 */
super.kill();
}
} contract Base2 is mortal {
function kill() public {
/* do cleanup 2 */
super.kill(); }
}
contract Final is Base1, Base2 {
}

solidity语言13的更多相关文章

  1. Solidity语言系列教程

    Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的目的是能在 以太坊虚拟机(EVM) 上运行. ...

  2. 用solidity语言开发代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

  3. 第一行代码:以太坊(2)-使用Solidity语言开发和测试智能合约

    智能合约是以太坊的核心之一,用户可以利用智能合约实现更灵活的代币以及其他DApp.不过在深入讲解如何开发智能合约之前,需要先介绍一下以太坊中用于开发智能合约的Solidity语言,以及相关的开发和测试 ...

  4. solidity语言介绍以及开发环境准备

    solidity语言介绍以及开发环境准备   Solidity 是一门面向合约的.为实现智能合约而创建的高级编程语言.这门语言受到了 C++,Python 和 Javascript 语言的影响,设计的 ...

  5. 用C++生成solidity语言描述的buchi自动机的初级经验

    我的项目rvtool(https://github.com/Zeraka/rvtool)中增加了生成solidity语言格式的监控器的模块. solidity特殊之处在于,它是运行在以太坊虚拟机环境中 ...

  6. Solidity语言基础 和 Etherum ERC20合约基础

    1. 类型只能从第一次赋值中推断出来,因此以下代码中的循环是无限的,  小. for (var i = 0; i < 2000; i++) { ... } --- Solidity Types ...

  7. solidity语言

    IDE:Atom 插件:autocomplete-solidity 代码自动补齐   linter-solium,linter-solidity代码检查错误   language-ethereum支持 ...

  8. solidity语言14

    库(Libraries) 库类似合约,实现仅在专门地址部署一次,使用EVM的DELEGATECALL的功能重复使用的目的.意思是当库函数被调用后,代码执行在被调用的合约的环境.例如,使用this调用合 ...

  9. solidity语言12

    View Functions 函数声明为视图,将无权修改状态 pragma solidity ^0.4.16; contract C { function f(uint a, uint b) publ ...

随机推荐

  1. 【算法笔记】B1018 锤子剪刀布

    1018 锤子剪刀布 (20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. ...

  2. 洛谷 P2056 [ZJOI2007]捉迷藏 题解【点分治】【堆】【图论】

    动态点分治入 门 题? 题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由 \(N\) 个屋 ...

  3. npm install时 报错Maximum call stack size exceeded

    给npm降级或者升级 降级 : npm install -g npm@5.4.0 升级 : npm install -g npm  升级到最新版

  4. sql语句中变量的写法

        $sql = "update cat set num=num+1 where cat_id=$art[cat_id]";    $sql = "update ca ...

  5. flume将数据发送到kafka、hdfs、hive、http、netcat等模式的使用总结

    1.source为http模式,sink为logger模式,将数据在控制台打印出来. conf配置文件如下: # Name the components on this agent a1.source ...

  6. Hibernate Annotation

    [转自] http://blog.sina.com.cn/s/blog_7ebc1b7e0100w58e.html Table Table用来定义entity主表的name,catalog,schem ...

  7. UI组件化介绍

    组件化相关概念 怎么理解组件化开发 https://www.cnblogs.com/zs-note/p/7093323.html 前端组件化框架之路 https://blog.csdn.net/hap ...

  8. C#接收emoji表情存到sqlserver数据库

    1.将就的方法已找到,在保存前,Emoji表情字符串进行utf-8编码,然后写入数据表的nvarchar(max)字段,取出时再进行解码即可. c#的写法如下: 写入数据表前编码: string sH ...

  9. docker jenkins安装(一)

    https://hub.docker.com/r/jenkins/jenkins  jenkins的docker官方镜像地址 https://jenkins.io/  jenkins官方网站 环境: ...

  10. 转帖 css的块元素、内联元素、内联块元素、display属性、浮动、定位

    块元素 块元素,也可以称为行元素,布局中常用的标签如:div.p.ul.li.h1~h6.dl.dt.dd等等都是块元素,它在布局中的行为:1.支持全部的样式.2.如果没有设置宽度,默认的宽度为父级宽 ...