智能合约学习小记

1.什么是智能合约?

        “智能合约”(smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下:“一个智能合约是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。”

智能合约程序不只是一个可以自动执行的计算机程序:它自己就是一个系统参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。

2.智能合约的实现

智能合约概念并不是随着区块链技术诞生的。区块链技术天然给智能合约带来得天独厚的应用前提。如果说区块链落地应用,比特币和以太坊就是最大的应用了。由于技术有限暂时简单的研读了下以太坊的智能合约,Solidity 是一种语法类似 JavaScript 的智能合约高级语言,它被设计成以编译的方式生成 以太坊虚拟机(Ethereum Virtual Machine,EVM) 代码。这段代码发布之后,以太坊将智能合约和交易一起打包成块记录到链上。如图是查询了以太坊官方教程的合约地址。以此保证智能合约的公开透明性以及不可更改。

3.智能合约的安全

    由于智能合约目前还只是初级阶段,相信各种安全问题会不断的发现。新加坡国立大学的Loi Luu提出了现在的智能合约存在的几种安全漏洞。

    智能合约中的安全漏洞交易顺序依赖合约 交易顺序依赖就是智能合约的执行随着当前交易处理的顺序不同而产生差异。例如,有两个交易T和T[j],两个区块链状态S[1]和S[2],并且S[1]     状态处理完交易T[j]后才能转化为状态S[2]。那么,如果矿工先处理交易T,交易T调用的就是S[1]状态下的智能合约;如果矿工先处理交易T[j]再     处理交易T,那么由于先执行的是T[j],合约状态就转化为S[2],最终交易T执行的就是状态S[2]时的智能合约。

    时间戳依赖合约 矿工处理一个新的区块时,如果新的区块的时间戳大于上一个区块,并且时间戳之差小于900秒,那么这个新区块的时间戳就是合法的。这是以 太坊协议所规定的。时间戳依赖顾名思义就是指智能合约的执行依赖当前区块的时间戳,随着时间戳的不同,合约的执行结果也有差别。

    误操作异常 在以太坊中,一个合约调用另一个合约可以通过send指令或直接调用另一个合约的函数。然而在调用过程中可能会出现错误,调用的合约就会回退到之前的状态。那么这个异常就可能无法很好地被调用者获知,这取决于调用方式。例如,通过send指令调用的合约应该通过检查返回值来验证合约是否被正确执行。

可重入攻击 在以太坊中,当一个合约调用另一个合约的时候,当前的操作就要等到调用结束之后才会继续。这时,如果被调用者需要使用调用者当前所处的状态,那么这就产生了问题。著名的DAO攻击事件就是因为这个漏洞而发生的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译:巨蟹 、少平 译者注:中文读者可以到以太坊爱...
    车圣阅读 3,848评论 1 7
  • 【中文版】以太坊白皮书 翻译:少平、 Seven当中本聪在 2009 年 1 月启动比特币区块链时,他同时向世界引...
    __Seven__阅读 4,401评论 0 10
  • 我的译文 ………………………………………………………………………… 原文译文 In the early 1950s...
    琪琪2017阅读 364评论 0 0
  • 今天想写写自尊心,自尊心就是一种尊重自己,维护自己的人格尊严,不容许别人侮辱和歧视的心理状态。具有自尊心的人,能够...
    朱春言阅读 463评论 3 3
  • 我的身份是,一名在校就读的医学生。 没错,就是未来医药卫生事业的接班人大军中的一个。 目前大三。 医学院的学生给大...
    Gober阅读 462评论 0 2