Solidity的库驱动开发并重构ERC20 StandardToken最佳实践(二十八)|入门系列

阅读更多→   2017/6/17 posted in  Solidity入门系列

Solidity的库(二十七)|入门系列

库与合约类型,但他们的目的是重用代码1。通过EVM中的DELEGATECALL特性来调用部署到某个位置的库代码,就实现了复用。

阅读更多→   2017/6/17 posted in  Solidity入门系列

Solidity的继承中的调用关系与多继承(二十六)|入门系列

阅读更多→   2017/6/11 posted in  Solidity入门系列

Solidity的继承(二十五)|入门系列

Solidity语言为我们提供了继承的支持1,实现的方式是通过复制包括多态的代码到子类来实现的。

阅读更多→   2017/6/11 posted in  Solidity入门系列

Solidity发送ether最佳实践(二十四)|入门系列

发送ether的最佳实践1

send()与fallback():

Solidity中当签名不匹配任何的函数方法时,将会触发回退函数。比如,当你调用address.call(bytes4(bytes32(sha3("thisShouldBeAFunction(uint,bytes32)"))), 1, "test")时,EVM实际尝试调用地址中的thisShouldBeAFunction(),当这个函数不存在,会触发fallback函数。

由于send()函数指定了一个空函数签名,所以当fallback函数存在时,它总是会调用它。

阅读更多→   2017/6/3 posted in  Solidity入门系列

Solidity的fallback函数(二十三)|入门系列

fallback函数,回退函数,是合约里的特殊无名函数,有且仅有一个1。它在合约调用没有匹配到函数签名,或者调用没有带任何数据时被自动调用。

阅读更多→   2017/6/3 posted in  Solidity入门系列

Solidity的event的支持指引(二十二)|入门系列

这篇文章是来自ConsenSys1。事件和日志在以太坊中异常重要。因为它是合约之间,合约与终端间的沟通桥梁。在传统的Web开发中,服务器通过前端回调函数返回结果(这里更多的想说明的是结果同步返回)。在以太坊中,当交易打包后,某个事件才真正发生,合约将这个事件写入区块链后,前端才能进行对应的响应。有各种方式来跟踪事件和日志。这个技术指引将会解释一些关于事件的困惑,以及对应的解决方案示例。

阅读更多→   2017/5/28 posted in  Solidity入门系列

Solidity的event事件(二十一)|入门系列

阅读更多→   2017/5/28 posted in  Solidity入门系列

Solidity的函数修改器的一些最佳实践(二十)|入门系列

在上篇系列文章中,我们介绍了函数修改器相关知识。这篇文章,我们来看一些应用函数修改器的最佳实践1。主要是对于单管理员,多管理员,数据检验,以及防重入漏洞等相关问题,应用函数修改器的实践。

阅读更多→   2017/5/21 posted in  Solidity入门系列

Solidity的函数修改器(十九)|入门系列

函数修改器(Function Modifiers)1可以方便的控制函数的逻辑,比如可以在某个行为执行前检查某个前置条件,函数修改器还支持继承和重写。可以大家会想,一些检查行为提升为一个语言级特性到底是必要的么?由于整个区块链运行环境是透明的,分布式的,且是图灵完备的。为保证其上运行的代码安全,势必存在大量的检查行为,升级为语言特性可以让检查代码复用,看起来也更简洁。

阅读更多→   2017/5/20 posted in  Solidity入门系列

Solidity的getter访问器(十八)|入门系列

对于所有public的状态变量,Solidity语言编译器,提供了自动为状态变量生成对应的getter(访问器)的特性1。语言暂不提供setter,因为不能很好控制访问权限的改值函数,不一定实用。

状态变量所创建的访问器函数,与变量同名。以interal访问时,按状态变量的方式使用,若以external的方式访问时,则要通过访问器函数,下面来看一个的例子:

阅读更多→   2017/5/14 posted in  Solidity入门系列

在以太坊上创建一个智能合约(十七)|入门系列

我们写好一个合约后,一个合约如何部署到以太坊网络,并实现合约函数的调用呢?合约部署到以太坊网络上,也是一个类似交易的过程。首先向全网发送一个合约创建的交易,待矿工打包交易,并获得全网的认可从而生效后,则得到合约的地址;既而向这个地址发送消息调用,实现调用合约的某个函数。

阅读更多→   2017/5/13 posted in  Solidity入门系列

Solidity变量的声明及作用域(十五)|入门系列

Solidity中的作用域规则同于Javascript。1

1. 声明及默认值

变量声明后均有一个初值,是对应类型的“零态”,意即对应的类型的字节表示的全0。使用中需要特别小心的是这与其它语言的默认值如nullundefined有所不同,因为有时0也是一种业务值。下面我们来看一些常见类型的声明,以及它们的默认值:

阅读更多→   2017/5/7 posted in  Solidity入门系列

Solidity中的基本类型转换(十四)|入门系列

点击查看原文,获得优化的排版。

1. 隐式转换

如果一个运算符能支持不同类型。编译器会隐式的尝试将一个操作数的类型,转为另一个操作数的类型,赋值同理。

一般来说,值类型间的互相转换只要不丢失信息,语义可通则可转换。下面,我们来看一个整数转换的例子:

阅读更多→   2017/4/29 posted in  Solidity入门系列

Solidity的delete操作符深入详解(十三)|入门系列

阅读更多→   2017/4/26 posted in  Solidity入门系列

Solidity的映射类型深入详解(十二)|入门系列

映射1是一种引用类型,存储键值对,提供根据键查找值,与其它语言中的字典,map等类似,但也有非常大的不同,尤其它在区块链中独特的存储模型。

阅读更多→   2017/4/23 posted in  Solidity入门系列

Solidity的自定义结构体深入详解(十一)|入门系列

结构体,Solidity中的自定义类型。我们可以使用Solidity的关键字struct来进行自定义。结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型。数组,映射,结构体也支持自定义的结构体。我们来看一个自定义结构体的定义:

阅读更多→   2017/4/8 posted in  Solidity入门系列

Solidity的数组特性深入详解(十)| 入门系列

数组在所有的语言当中都是一种常见类型。在Solidity中,可以支持编译期定长数组和变长数组。一个类型为T,长度为k的数组,可以声明为T[k],而一个变长的数组则声明为T[]

阅读更多→   2017/4/4 posted in  Solidity入门系列

Solidity的数据位置特性深入详解(九)| 入门系列(老是遇到转换问题的来看看)

代码在执行前,一般会编译成指令。指令就是一个个逻辑,逻辑操作的是数据。代码,或者说业务,操作的其实是数据。非区块链中,代码操作的数据,一般会存到数据库中。

在区块链里,区块链本身就是一个数据库。如果你使用区块链标记物产的所有权,归属信息将会被记录到区块链上,所有人都无法篡改,以标明不可争议的拥有权。所以在区块链中编程中,有一个数据位置的属性用来标识变量是否需要持久化到区块链中。

阅读更多→   2017/4/3 posted in  Solidity入门系列

区块链语言Solidity校验椭圆曲线加密数字签名(附实例)

我们知道整个比特币,以太坊的基石就是椭圆曲线加密算法。所有的数据均需要发起者通过私匙签发,其它人通过非对称的公匙验证确实消息的真实性。下面我们就一起来了解一下椭圆曲线加密算法,并使用以太坊提供的工具对要发送的数据进行数字签名,以及使用Solidity区块链编程语言的ecrecover()校验数字签名的合法性。

椭圆曲线DSA(ECDSA)简介

假如Alice要对消息m加上数字签名,而Bob需要验证该签名。

阅读更多→   2017/3/25 posted in  Solidity入门系列

友情链接: 区块链技术中文社区