当前位置:主页 > 区块链 > 区块链技术 > 智能合约

小白快速理解智能合约

2024-07-07 21:29:10 | 来源: | 作者:树哥
当小白学习区块链的时候,有一个叫“智能合约”的词会反复出现,可什么是“智能合约”呢?这篇就为大家简单介绍一下

当小白学习区块链的时候,有一个叫“智能合约”的词会反复出现。可什么是“智能合约”呢?今天树哥尝试用自己的语言说清楚啥叫“智能合约”。

一、什么是“智能合约”?

最初的概念:“智能合约”(smart contract):是一套以数字形式定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。—-1995年尼克·萨博(Nick Szabo)(跨领域法律学者)

请注意两个关键点:

1、这是1995年提出来的,那会儿还只是互联网的早期阶段,区块链的概念远未诞生。

2、提出的人是一个跨领域法律学者,是想通过计算机解决法律问题。

可以看出,当初“智能合约”的概念是通过计算机解决法律合约执行的问题。

那么,当前大家谈的“智能合约”还是当初的这些含义吗?

当区块链世界引入了“智能合约”这个概念时,它的概念已经发生了种种变化!

1、当前谈的**“智能合约”,都在区块链范畴内讨论。

2、“智能合约”已经不局限在“合约”本身了,其它类的应用都可以称之为“智能合约”!

谈到第一点,我们现在“智能合约”因为是部署到区块链上,所以需要很具有“区块链特色”。

谈到第二点,“智能合约”可以是合约,当然也可以不是合约。当前很多描述“智能合约”的文章还把“智能合约”局限在“合约”上,是不准确的。

当前的定义是:

“智能合约”:是区块链系统上的应用,是可执行的代码。

二、区块链上的“智能合约”

我们既然谈到是区块链上的智能合约,因此区块链本身的特性也会决定智能合约的相应特性。我们用一张图,来进行比较说明,部署在中心化的传统互联网上与部署在分布式的区块链上有何不同。见下图:

互联网与区块链网络智能合约

最直接显著的区别有两点:

1、 在中心化的互联网上,智能合约(代码)只需要部署在中心节点服务器上就可以。

而区块链网络上,由于没有中心化的节点,所以智能合约必须部署在所有的节点上。

2、 在中心化互联网上,智能合约(代码)可以比较随意、限制比较少的创建、执行、升级或终止。

而在区块链网络上,由于体系是采用按时间出区块,一个区块链接一个区块的方式,决定了智能合约必须打包入区块之中,并且复制到全网的节点之中。决定了智能合约代码会有一些要求,智能合约的创建、执行、升级、终止也会复杂得多,必须符合区块链本身的技术要求。

也是由于这两点,决定了区块链上的智能合约有如下的特色:

1、代码即法律:不同于中心化节点,区块链上的智能合约一经部署便复制到全网节点,满足条件会自动执行,所有人都可以看到但无法修改,即使代码的创始人也无法终止。

2、机器信任:不同于传统信任中心或第三方(例如淘宝信任的是第三方支付宝),智能合约的履行完全靠机器代码完成,不依赖任何第三方或权威中心机构,因此变中心信任为机器信任。

3、升级困难:不同于中心化互联网发现问题修改代码非常容易,区块链网络中的智能合约一经部署,修改完善过程就比较复杂。这点也是区块链本身的特色,区块链的网络本身升级就很困难,容易导致分叉,比特币现金就是比特币网络想把区块从1M改成8M后导致硬分叉而来的。

3、 决策靠共识:不同于中心化服务器的任何决策都可以有权威中心直接负责,区块链由于是布局到全网节点上的,没有了权威中心,很多决策都是靠全网共识来达成,所以就有了社区、技术开发者、矿工、交易所等等多方利益的博弈过程。

4、 功能相对弱:不同于中心化服务器的软件功能强大,在区块链上的智能合约受限于区块大小、出块速度和区块链本身的网络带宽等多种因素,在功能上远没有中心化服务器的那么强大;当然,由于每个区块都需要全网同步,所以并发的交易速度也远不如传统中心化互联网那么强大(双十一淘宝的并发量是极其可怕的)。

5、 外部数据交互难度大:区块链本身就是要保证在网的数据不可篡改、可以溯源;就会面对如何保证上链的数据是可信数据,如果源数据不准确那上链就没有了意义。另外,数据上链的时间、花费、储存都是一些复杂的问题。所以相对来讲,区块链的智能合约和外部数据交互难度大一些,与传统互联网的方式不同。

小结:智能合约就是一段代码,需要实现的一些应用。由于部署在区块链上,区块链的多方存储、多方计算、规则透明、不可篡改等特性,恰好为智能合约提供了安全可靠的记录载体和执行环境。智能合约变得不可篡改,陌生人都可以信任机器而不再关心合约的对方是谁,当然同时也就存在了区块链固有的一些问题,例如升级困难,功能目前还没有那么强大等问题。

三、智能合约的创建和执行

一个智能合约的生命周期包含合约创建、合约部署、合约执行等过程。我们以以太坊为例,来说明区块链上的“智能合约”是如何创建和执行的。

案例:我们新建一个发工资的智能合约,树哥是老板,是需要给两个员工A和B发工资。先简单构建一下发工资的逻辑,如下:

1、合约创立

从上图可以看出,在以太坊上是分为外部账户和合约账户的。树哥的外部账户存着钱,合约账户存着相应的代码。代码执行的操作就是30号的时候,先检查A和B的工作量,满足要求后给A账户和B账户转账工资。那么,合约的创立就是要给三个用户建立账户,通过要编写合约账户内的代码。

1) 创建账户

需要先了解以太坊的账户体系

2)编译,打包,数据上区块链

根据要求创建完账户、编写完代码(以太坊的官方智能合约开发语言为:solidity),开始对编写的代码进行编译。

一旦完成了智能合约打包上链的过程,就意味着:全网的验证节点都会接受到树哥和员工A与B之间的智能合约,并进行了保存。

需要注意的,在以太坊上部署和执行智能合约都是要有花费的,这样的花费是用GAS来表示的(挺像我们的汽车烧的燃气),这个GAS是可以是用以太坊来购买。设置GAS而没有直接用以太坊的原因是,以太坊价格波动太大,不能今天执行一段代码要50块明天就变成5块钱吧?所以用GAS代表以太坊上执行操作的代价相对不会波动太大。

2、合约的执行

智能合约会定期检查相关事件和触发条件,满足条件的事件会推送到待验证的队列之中。例如每月30日,会触发条件把树哥账户里的钱转给员工A和员工B的账户中。

区块链的验证节点会对这个事件进行签名验证,等大多数的验证节点对此事件达成共识后,智能合约将被成功执行,并通知用户。

需要说明的是,智能合约是存储在区块链网络的代码,但区块链本身是不执行代码的。真正执行代码的是以太坊虚拟机(EVM),准确一点来说是每一台本地的以太坊虚拟机来执行代码,再来相互验证,然后再将结果写入到区块链当中。示意图如下:

以太坊智能合约执行示意

小结:通过树哥给员工发工资的智能合约的创建、部署和执行的过程,就可以了解到:资金是保存在外部账户中,代码是保存在合约账户中;部署智能合约就是在把智能合约打包进区块中,然后分发到全网中;执行智能合约就是在触发条件达到后本地的以太坊虚拟机执行智能合约,然后再将结果保存在区块链中这样的一个过程。

四、智能合约的安全性讨论

最近出了很多起智能合约被黑客攻破而导致资产大量损失的事件,但发生的这些事件都不是因为以太坊网络系统的问题,而是属于开发者开发的智能合约存在漏洞的原因。那么,智能合约开发需要注意哪些问题呢?一般就是两个问题,一是确保智能合约的确定性,二是确定智能合约的可以关闭性。

1、确定性:就是确保智能合约在不同的计算机上执行的效果都是相同的。

在区块链网络上,是不同的计算机节点参与运行智能合约,如果执行的结果有差异那么无疑会导致不同节点达不成共识,相应的区块也会认为是非法的。那么如何保证智能合约的确定性呢?

1)不进行调用不确定性的函数,

2)不使用不确定性的数据源。

2、可以关闭性:就是确保智能合约在一定的情况下可以关闭。

如果一段有问题的智能合约在不断地运行,它会不断的消耗区块链的网络资源,也有可能会攻击者利用来攻击整个网络。是可以通过一些手段限制资源的使用来执行智能合约关闭。

1)限制最大使用的资源。在以太坊上执行智能合约或存储都是需要有消耗(gas),智能合约有gas limit (最大消耗的gas值)来限制智能合约。当智能合约消耗到规定的最大值时,会自动关闭。

2)限制执行代码行数或执行时间。当智能合约执行代码行数达到规定最大行或执行时间,则认为智能合约有可能进入死循环或出现问题,强行关闭。

3)采用虚拟机方式,隔离资源。以太坊就是采用虚拟机EVM的方式,把执行环境虚拟化,将资源进行隔离,避免由于一个智能合约问题感染整个系统,也可以通过关闭智能合约的执行虚拟机关闭智能合约。

小结:部署在区块链上的智能合约,由于其具备的区块链的复杂特性而会凸显出安全性的重要性。如果要真正理解如何提升智能合约的安全性,那需要对区块链底层逻辑和智能合约有一定了解。

总结:智能合约本质是应用,不局限于电子合约本身。在区块链上的智能合约具备着区块的规则透明、不可篡改、分布存储等特征,它的创建、部署和执行也是有一定的复杂度,在安全防护上也有了较高一些的要求。也正因为如此,区块链上的智能合约可以完成传统互联网程序没有办法完成的任务,不仅可以在金融、拍卖、借贷、遗嘱、注册、众筹、股权、投票、保险等领域发挥巨大作用,而且随着技术的不断发展,在其他方面也将展现出巨大的作用。

以上,为树哥区块链从小白到精通

作者介绍:树哥,树哥区块链创始人、《区块链从入门到精通》作者,U赞签约作者,对话区块链合伙人。立志用最通俗的语言让小白透彻了解区块链技术。公众号\头条号\新浪博客\百度百家:树哥区块链,星球:区块链从小白到精通。

声明:文章内容不代表本站观点及立场,不构成本平台任何投资建议。本文内容仅供参考,风险自担!
Tag:智能合约  

你可能感兴趣的文章

币圈快讯

  • PudgyPenguins合伙人:系统已恢复,可再次尝试申领

    2024-12-17 22:24
    ChainCatcher消息,PudgyPenguins首席创意官兼合伙人Chef在X平台发文表示,系统已恢复,可再次尝试申领。 需要注意的是,如果只能申领一部分PENGU代币,请刷新网站并再次执行流程。
  • 代币化证券公司Prometheum宣布完成2000万美元融资

    2024-12-17 22:23
    代币化证券公司Prometheum宣布完成2000万美元融资,这笔资金来自一份未公开的个人和机构名单,使Prometheum的融资总额达到约6430万美元。Prometheum旗下有两家子公司。根据该公司发布的消息,其中一个是替代交易系统,预计将于2025年第一季度推出。另一个是一家托管公司,目前为机构投资者提供少数几种熟悉的加密资产服务。这笔资金将支持增加更多的加密资产和即将推出的安全代币。
  • 美国银行:美元有望在2025年跑赢大盘

    2024-12-17 22:23
    ChainCatcher消息,美国银行全球基金经理最新调查显示,预计到2025年,美元将成为表现最佳的货币。40%的投资者预计美元将在2025年跑赢大盘,高于11月份的31%。美元多头头寸被认为是仅次于看涨“美股七巨头”的第二大热门交易。12月,认为美元估值过高的投资者比例上升至59%,高于11月的51%,为2023年1月以来的最高水平。(金十)
  • Pudgy Penguins 已恢复 PENGU 代币申领

    2024-12-17 22:22
    Pudgy Penguins合伙人和首席创意官 Chef 在 X 平台发文称:“系统状态良好,可以尝试再次申领 PENGU。需要特别注意的是,如果您只能领取部分PENGU,请刷新网站并再次执行流程。您将看到已领取的PENGU和您未领取的剩余PENGU 。”
  • 某鲸鱼花费 15,300 枚SOL买入 647 万枚 PENGU,均价 0.053 美元

    2024-12-17 22:20
    据 Lookonchain 监测,一鲸鱼花费 15,300 枚SOL(346 万美元),以 0.053 美元的价格买入 647 万枚 PENGU。一小时前,鲸鱼还从 Wintermute 收到了 12,471 枚 SOL(280 万美元)。
  • 查看更多