Solidity的继承中的调用关系与多继承(二十六)|入门系列
在继承链中,由于继承实现是代码复制。如果出现函数名重写,最终使用的是继承链上哪个合约定义的代码呢?实际执行时,依据的是最远继承的原则(most derived)1。下面来看一个例子:
Solidity发送ether最佳实践(二十四)|入门系列
发送ether的最佳实践1。
send()与fallback():
Solidity中当签名不匹配任何的函数方法时,将会触发回退函数。比如,当你调用address.call(bytes4(bytes32(sha3("thisShouldBeAFunction(uint,bytes32)"))), 1, "test")
时,EVM实际尝试调用地址中的thisShouldBeAFunction()
,当这个函数不存在,会触发fallback函数。
由于send()
函数指定了一个空函数签名,所以当fallback函数存在时,它总是会调用它。
Solidity的fallback函数(二十三)|入门系列
fallback函数,回退函数,是合约里的特殊无名函数,有且仅有一个1。它在合约调用没有匹配到函数签名,或者调用没有带任何数据时被自动调用。
Solidity的event的支持指引(二十二)|入门系列
这篇文章是来自ConsenSys
1。事件和日志在以太坊中异常重要。因为它是合约之间,合约与终端间的沟通桥梁。在传统的Web开发中,服务器通过前端回调函数返回结果(这里更多的想说明的是结果同步返回)。在以太坊中,当交易打包后,某个事件才真正发生,合约将这个事件写入区块链后,前端才能进行对应的响应。有各种方式来跟踪事件和日志。这个技术指引将会解释一些关于事件的困惑,以及对应的解决方案示例。
Solidity的event事件(二十一)|入门系列
在介绍事件前,我们先明确事件,日志这两个概念。事件发生后被记录到区块链上成为了日志。总的来说,事件强调功能,一种行为;日志强调存储,内容。
事件是以太坊EVM提供的一种日志基础设施。事件可以用来做操作记录,存储为日志。也可以用来实现一些交互功能,比如通知UI,返回函数调用结果等1。
Solidity的函数修改器的一些最佳实践(二十)|入门系列
在上篇系列文章中,我们介绍了函数修改器相关知识。这篇文章,我们来看一些应用函数修改器的最佳实践1。主要是对于单管理员,多管理员,数据检验,以及防重入漏洞等相关问题,应用函数修改器的实践。
Solidity的函数修改器(十九)|入门系列
函数修改器(Function Modifiers)1可以方便的控制函数的逻辑,比如可以在某个行为执行前检查某个前置条件,函数修改器还支持继承和重写。可以大家会想,一些检查行为提升为一个语言级特性到底是必要的么?由于整个区块链运行环境是透明的,分布式的,且是图灵完备的。为保证其上运行的代码安全,势必存在大量的检查行为,升级为语言特性可以让检查代码复用,看起来也更简洁。
Solidity的getter访问器(十八)|入门系列
对于所有public
的状态变量,Solidity语言编译器,提供了自动为状态变量生成对应的getter(访问器)
的特性1。语言暂不提供setter
,因为不能很好控制访问权限的改值函数,不一定实用。
状态变量所创建的访问器函数,与变量同名。以interal
访问时,按状态变量的方式使用,若以external
的方式访问时,则要通过访问器函数,下面来看一个的例子:
Solidity变量的声明及作用域(十五)|入门系列
Solidity中的作用域规则同于Javascript。1
1. 声明及默认值
变量声明后均有一个初值,是对应类型的“零态”,意即对应的类型的字节表示的全0
。使用中需要特别小心的是这与其它语言的默认值如null
或undefined
有所不同,因为有时0
也是一种业务值。下面我们来看一些常见类型的声明,以及它们的默认值:
Solidity的delete操作符深入详解(十三)|入门系列
Solidity中有个特殊的操作符delete
用于释放空间,因为区块链做为一种公用资源,为避免大家滥用。且鼓励主动对空间的回收,释放空间将会返还一些gas
。
delete
1关键字的作用是对某个类型值a
赋予初始值。比如如果删除整数delete a
等同于a = 0
。