0%

区块链 | 区块链本质及特点

这算是资料收集吧,主要是给 EMI 课件提供资料,将从下面两部分梳理。

  • 什么是区块链,本质是什么
  • 区块链的特点
  • 区块链相关名词解释

区块链的本质


区块链的本质其实很难用一个绝对性的语言进行描述,就像是哈姆雷特,区块链的本质也是千人千面。

对于概念性的描述,希望你能形成自己的看法,下面我来说一下我心中区块链的本质。

简单的来说,我认为区块链就是一个分布式记账系统。

我认为区块链网络可以抽象成下面的这个例子:

一个村子里,有一个富豪,其突然有一个很紧急的工程需要做,但这个工程并不需要专业的人士,所以,其就在村里说我这里有一个工作,需要人来帮忙,给的钱多多的。

很快,工人们都召集好了,这个时候就出现下面的问题了

  • 由于缺乏第三方的监管,只是临时组建的队伍,没有人领头
  • 工人不能根据老板口头的承诺就开始做工程,毕竟老板可以反悔

于是,工人就想让老板人手签署一个基本合同。比如:

基本工资 2000 元

然后,老板和工人在每一个合同上都按了手印,为了,这份合同难以伪造,所有的合同除了老板的手印外,还有其他工人的手印。如果一个人想要修改基本工资,除了自己的手印外,还需要老板和其他工人的手印,增加了作恶成本,这套规则也适用于老板。

毕竟是临时组建的队伍,难免干活有人偷懒。老板为了提高积极性,就会给干活多的人额外发钱。

比如,张三的积极性高,那么老板说给你多发 200 元。

但是这就有个问题了。

  • 老板口头说,老板最后可能不承认
  • 工人想要多拿,最后自己修改了金额

老板想了一个办法,把这个工资广而告之,每个人的账本合同上都写上

张三在某年某月某日多得 200 元

然后,在该条盖上老板和张三的手印。

这样做有两个好处

  • 老板和张三可以信任这个方法
  • 其他工人都可以看到这个数据,也就会提高积极性

最后,工程干完,老板和工人开始结账,首先就要比对账本。

如果有人想做恶,那么至少需要修改半数以上的账本才能成功,这个代价是非常大的,在剔除坏账本后,老板和工人都按照约定,各自得到了自己想要的东西。


区块链的特点


区块链并不是单一的种类,而是一类技术的总称。一般我们可以把区块链分为下面的几种

  • 公有链
  • 私有链
  • 联盟链

每一种链的具体应用场景不同,所以,各自具体的特征也并不一样,下面来说一下区块链中常见的属性吧。

匿名性

通常匿名性是针对共有链的,比如 门罗、比特币等。

区块链的匿名性的根据来自于密码学中的非对称加密。我们在公有链的网络上进行交易,不会去管对方是谁,只需要完成各自的交易就好。

分布式数据管理

分布式数据管理是现在区块链的核心特征,是每一个区块链都具备的特征。这个特征是集合当代代码、密码学等领域的大成之作。

我们承接上面老板和工人的例子,就可以推出一下推论

  1. 只修改自己的合同,是不会被承认的
  2. 如果想要被承认,就必须修改半数以上的合同,但是,修改半数以上的数据非常困难

基于分布式的数据管理,我们可以衍生出下面的特点

  • 去中心化
    • 这份账本谁都有,并不是单独存在
  • 透明性
    • 每个人都可以看到其他人的工资,比如张三因为工作努力得到了 200 块。
  • 不可篡改
    • 理论上,所有的数据都是可以篡改的,但是,如果篡改的代价过大,可能性太小了,我们就可以近似为不可篡改。就好像上面的人想要修改成绩,必须讲半数以上的数据全部修改才有可能被承认。

点对点传输

区块链的数据并不是开始就具备全部的数据的,而是在网络中进行传播数据,验证后将数据记录到自己的账本中。

张三因为工作努力,得到 200 块,那么,这件事广为传播,最后,所有人的账本上都记录这一条。

基于上面的例子,我们可以推出下面的特征

  • 可溯源性
    • 我们可以有效的查出张三的 200 块是哪年哪月哪日得到的
  • 区块链共识
    • 上面例子的共识是多劳多得。常见的区块链共识有
      • POW
      • POC
      • POS
      • DPOS

智能合约

智能合约是放置在区块链网络中的一份代码合约。

举一个很简单的例子来说,纸质合约在某一些时候很容易被伪造,并且,即便是有一方违约,那么追回也需要付出一定的代价。

借助于区块链网络的不可篡改性,我们把合约翻译成代码,放置在网络上。那么,在常规情况下,这份合约是不能被修改的,并且,代码没有人为情感,只要都签署方都认可代码中的逻辑,那么,当条件触发的时候,就会被顺利执行。也就是区块链网络尽可能的排除人治。

基于上述的几个特征,我们可以很容易的推出下面的结论:

  • 有效的信用体系
    • 不需要公开身份,数据透明可查询、作恶的成本太高,所以,区块链构成了一个有效的信用体系

除了上面的优良特点外,区块链自然有它自己的缺陷。

  • 资源消耗大
    • 中心化的数据,只需要出一份资源就好了,但是,分布式的全账本,却是每一个节点都需要出相同的资源
  • TPS 低
    • TPS 即单位时间内的吞吐量,可以理解为一秒钟处理多少笔数据。中心化的数据,非常容易处理,但是,由于分布式存在,在处理数据的时候,还需要数据进行广播等操作,导致 TPS 难以追上中心化的 TPS。
  • 安全性
    • 这个其实并不是太大的问题,虽然,区块链的根本来自于密码学,也就是当非对称加密在某一时刻被破解,那么区块链网络自然会失败,但是,这个安全性暂时没轮不到区块链网络去担忧
      • 假设非对称加密被攻克,那么首先担心的应该是银行、政府
      • 即便是非对称加密被攻克,那么也会衍生出其他的加密技术,区块链网络只需要动态升级就好了
  • 数据量过大
    • 区块链的分布式账本需要每一个节点都将全部的数据下载下来,随着时间的推移,这份数据会变的越来越庞大,从而使得网络门槛极具提高

区块链相关的名词解释


区块和链

区块指的是规定时间内出现的有效信息。

以工人和老板为例。一天中的有效信息是

张三得了 200块
小花得了 300块

然后,明天的有效信息,是在昨天的有效信息下面继续添加的,而不是另外又重新签了合同。

所以,以一天的信息作为一个数据总集,我们称之为区块,下一个区块是建立在上一个区块上的,中间是有联系的,我们称之为链。

那么,以比特币网络为例。

其区块是十分钟以内的有效交易信息 + 一个数学求解。

后面的区块是包含上一个区块的,也就形成了链。

公有链/私有链/联盟链

-深度长文:区块链共识机制

公有链

是一个完全开放的分布式系统。公有链中的节点可以很自由的加入或者退出,不需要严格的验证和审核,比如比特币、以太坊、EOS等。共识机制在公有链中不仅需要考虑网络中存在故障节点,还需要考虑作恶节点(拜占庭节点),并确保最终一致性。

联盟链

是一个相对开放的分布式系统。对于联盟链,每个新加入的节点都是需要验证和审核的,比如Fabric、BCOS等。联盟链一般应用于企业之间,对安全和数据的一致性要求较高,所以共识机制在联盟链中不仅需要考虑网络中存在故障节点,还需要考虑作恶节点(拜占庭节点),同时除过确保最终一致性外,还需要确保强一致性。

私有链

是一个封闭的分布式系统。由于私有链是一个内部系统,所以不需要考虑新节点的加入和退出,也不需要考虑作恶节点。私有链的共识算法还是传统分布式系统里的共识算法,比如zookeeper的zab协议,就是类paxos算法的一种。只考虑因为系统或者网络原因导致的故障节点,数据一致性要求根据系统的要求而定。

时间戳和哈希值

时间戳

时间戳赋予了区块链网络上述诸多特性,比如

  • 无中心
  • 防篡改
  • 可追溯
  • 高透明

区块链的时间戳我们称之为分布式时间戳。

1997年,密码朋克成员哈伯和斯托尼塔提出了一个用时间戳的方法保证数字文件安全的协议。哈伯和斯托尼塔对它的简单解释是,用时间戳的方式表达文件创建的先后顺序,协议要求在文件创建后,其时间戳不能改动,这就使得文件被篡改的可能性为零。

以比特币区块链网络为例,比特币区块链是 10 分钟建立一个区块,并盖好时间戳,并广播发送给全网络各个节点,形成分布式时间戳,从密码学来说,一旦盖好时间戳,理论上这个区块就没有办法篡改,因为要想改动一个区块,必须同时改动该区块后面的所有区块。

哈希值

hash 是一种映射函数,简单来说,它把输入转换成一串特定 ID 输出,这个过程是不可逆的。

比如,如果你用的是比特币的 SHA-256 哈希函数,输入「dog」这个单词,就会输出:

cd6357efdd966de8c0cb2f876cc89ec74ce35f0968e11743987084bd42fb8944

但如果你把这个单词稍微改成「doge」, 那么哈希的结果就会变成:

c4e793c81ee40370d827d0cbe748d246cffca2cbe959383edf0976d041ece9e5

输入数据即使只改变一个字节,它的 hash 值也会大不相同。

对于一个数据来说,它的 hash 值是唯一的,最重要的是,你没有办法从输出的这串数字里面推导破解出原始的输入值。

公钥与私钥与数字签名

公开密钥加密也称为”非对称加密“,加密和解密的时候使用不同的秘钥,也就是 key ,其中一个是公钥,是可以公开出去的,另外一个是私钥,要严格保密。

公开密钥加密有两个应用,

  • 加密通信
  • 数字签名

加密通信

对于区块链网络中的加密通信使用的是非对称加密,也就是有公钥和私钥之分。

其中,公钥用于加密,私钥用于解密。所谓的非对称加密,指的是,数学上的不可逆,也就是可以通过私钥推出公钥,但是,不可以通过公钥推出私钥。

通常,非对称加密大致上可以分类两类算法

  • RSA
  • ECC

这里,不讨论非对称加密算法的细节,我们在这里只给出,加密和解密的过程。

小时候经常在《趣味数学》这类书里的一个数学小魔术:

让对方任意想一个3数,并把这个数和91相乘,然后告诉我积的最后三位数,我就可以猜出对方想的是什么数字啦!

比如对方想的是123,那么对方就计算出

123 * 91

等于11193,并把结果的末三位193告诉我。

看起来,这么做似乎损失了不少信息,让我没法反推出原来的数。

不过,我仍然有办法:只需要把对方告诉我的结果再乘以11,乘积的末三位就是对方刚开始想的数了。可以验证一下

193 * 11 = 2123

末三位正是对方所想的秘密数字!其实道理很简单,91乘以11等于1001,而任何一个三位数乘以1001后,末三位显然都不变(例如123乘以1001就等于123123)。先让对方在他所想的数上乘以91,假设乘积为X;我再在X的基础上乘以11,其结果相当于我俩合作把原数乘以了1001,自然末三位又变了回去。然而,X乘以11后的末三位是什么,只与X的末三位有关。因此,对方只需要告诉我X的末三位就行了,这并不会丢掉信息。

其中,上面的 99 就是所谓的 公钥,而 11 就是私钥。

数字签名

数字签名过程跟加密通信有着一定的对称性,这种对称有着一种逻辑上的美。

加密通信是用公钥进行加密,而用私钥进行解密。而数字签名刚好相反,是采用私钥加密,公钥解密。

数字签名,私钥加密过程是通过签名算法来生成数字签名的过程,而公钥解密过程是通过验证算法来确定数字签名是不是有私钥持有者签署的。可以看到,加密算法,解密算法,签名算法,验证算法,对称性是很明显的。

我要签署一个文件,于是拿出自己的私钥,执行签名算法,得到数字签名。那么其他人如何去验证这个数字签名的确出自我呢?首先,我要把自己的公钥放到一个大家都可以访问到的服务器上,这样其他人都可以 的公钥,大家把文件,数字签名以及公钥下载到自己的计算机上,调用验证算法,就可以判断这个文件是不是我签署的了。

共识机制

-深度长文:区块链共识机制

  • POW
  • POS
  • DPOS
  • POC

共识机制,就是一种多方协作机制,用于协调多参与方达成共同接受的唯一结果,且保证此过程难以被欺骗,且持续稳定运行。

根据现有的技术,区块链存在不可能三角,即任何区块链系统在安全、性能和去中心化三个方面都不能完全兼顾。

PoW Proof of Work

所有区块链的网络节点参与者进行竞争记账,所谓竞争记账是指,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的工作量证明谜题,谁先解出答案,谁就获得记账权利,然后开始记账并将将解出的答案和交易记录广播给其他节点进行验证,自己则开始下一轮挖矿。如果区块的交易被其他节点参与者验证有效并且谜题的答案正确,就意味着这个答案是可信的,新的节点将被写入验证者的节点区块链,同时验证者进入下一轮的竞争挖矿。

PoW优点很明显:

  1. 完全去中心化(任何人都可以加入)
  2. 节点自由进出,容易实现
  3. 破坏系统花费的成本巨大

缺点也相当明显:

  1. 对节点的性能网络环境要求高
  2. 浪费资源
  3. 每秒钟最多只能做七笔交易,效率低下
  4. 矿场的出现违背了去中心的初衷
  5. 不能确保最终一致「分叉」
  6. 比特币产量每4年减半,利益驱动性降低导致旷工数量减少从而导致比特币网络瘫痪

POS Proof of Stake

股权证明,与PoW相比,不需要证明你在记账前做了某项工作,而是证明你拥有某些财产。股权决定一起,谁的股权大,谁记账的概率就越大。由于PoS是BitCoin出现后提出的共识算法,目前还有得到实际的验证,并且,PoS不是一个,而是一类共识算法。

PoS优点为:

  1. 节能环保,不需要无用计算
  2. 性能高
  3. 更加安全
  4. 人人可挖矿(获得利息),不用担心算力集中导致中心化出现
  5. 避免货币紧缩

PoS缺点为:

依据权益的结余来选择,会导致首富账户的权利更大,有可能支配记账权,从而使得基于PoS的区块链系统变成几个少数“有钱人”的游戏,这和区块链的去中心化本意背道而驰,同时PoS的性能(1分钟)相比PoW(10分钟)并没有提升多少,这一点仍然被人诟病。

DPoSDelegated Proof of Stake

授权股权证明机制,基于PoS,类似投票选举,由被选举节点记账,如果把PoS看成资本主义的“权利集中制”,那么DPoS可以理解为具有特色社会主义的“民主集中制”。

类似于股东代表大会,每当要决策公司大事(记什么账,谁来记账)的时候,全体股民(节点)依法行使投票权,选出自己心中的股东代表(可信账户),谁得票高谁当选。候选人可以去公开演讲拉票,获得足够多股民(节点)的信任,然后股东代表(被选中的可信节点)代表股民决策公司大事,股东代表的人数由系统决定,比如Bitshares为101个、Asch为51个,EOS为21个。

对于EOS的DPoS优点

  1. 记账节点减少,交易速度更快,EOS号称可达百万TPS
  2. 更加安全,一般不不会发生链分叉并不可逆,确保最终一致性
  3. 相对PoW,解决了资源消耗问题

对于EOS的DPoS缺点

  1. 少量的BP数量牺牲了部分去中心化,相比PoW的5大矿场和PoS的富人玩家,DPoS更加民主,更加去中心化,但是DPoS机制的设计并不能保证一定有足额的真实的区块生产者,因为一个人或一个实体,可能控制着多个节点。比如LBTC,就一度出现半数节点被鱼池一家控制。EOS在启动过程中,也疑似出现一个人虚拟出7个节点的事。
  2. 在真实的网络环境中,EOS实际的运行效率远没有吹的那么厉害,同时超级节点的治理全力和经济利益过于集中,如果他们串通,将进一步形成巨头龙垄断,这和区块链思想南辕北辙。
  3. 对于坏节点的处理存在诸多困难。社区选举不能及时有效的阻止一些破坏节点的出现,给网络造成安全隐患,同时在网络节点数量少的场景,选举的BP代表性不强。

POC Proof of capacity

POC容量证明最早诞生于2014年,其目的在于解决POW资源浪费等问题。

PoC算法的核心是将区块的生成与存储设备的存储密度不能无限提高这一物理规律相绑定,从而限制区块的生成,保障区块链的安全,最终使整个区块链达成共识。

在计算机科学中,一些经常需要用到的数据和中间结果,会被存下来,这就是缓存。

缓存是一种非常常见的做法,让我们举一个例子,假如我们要做如下的计算:

45 x 55、45 x 55 + 934、45 x 55 + 723、45 x 55 + 98如果所有计算都正常执行的话,需要4次乘法和3次加法。

聪明的你一定发现了,45 x 55出现了四次,干嘛每次都要重新算,只算一次,然后把结果记录下来,下次再遇到,就直接用结果,不需要再次计算。

于是,完成同样的工作,我们只需要1次乘法和3次加法。

不过,节约计算量也不是没代价的,代价就是我们需要一块儿空间,来存储这个中间结果。

这种做法就叫空间换时间,越是复杂的计算,缓存就越能提高性能。

PoW算法为了保证公平性,对每个区块进行竞争时,求解的谜题都是全新的,完全没有任何可以复用的中间结果。

PoC同样设计了一种很消耗计算资源的算法,但与PoW不同的是,这个计算过程中,最复杂的部分是可以缓存的,这就造成了消耗存储空间进行缓存的做法可以获得巨大的优势。

正如我们之前提到的,越是复杂的计算,消耗存储空间进行缓存的做法就可以获得越大的优势,也就更可以保证矿工选择更大的存储空间而不是更强的计算能力进行竞争。

但是,计算复杂度是不能无限提高的,因为,非矿工的用户在校验区块的PoC结果时,是需要针对这个结果重新进行一遍计算的,我们不能要求一个不挖矿的用户也配备大量存储资源进行缓存。

过高的计算复杂度会造成普通用户校验区块速度很慢。因此,计算复杂度的高低需要一定的均衡,既不能太复杂造成校验困难,也不能太简单造成缓存优势不足,从而退化成PoW。

分叉-软分叉和硬分叉

任何软件都需要通过不断更新来解决问题或提高性能,在加密货币领域,这些更新被称为“分叉”。

由于加密货币是去中心化的网络,因此网络中的所有参与者(节点)都需要遵循相同的规则才能正确地协同工作,这套规则被称为“协议”。

一份协议中的典型规则包括区块链中每个区块的大小,矿工挖到每个新区块所得的奖励等等。

加密货币领域中有两种类型的分叉

  • 软分叉
  • 硬分叉

这两种分叉的区别是是否兼容之前的版本。

软分叉

软分叉是一种向后兼容的加密货币协议的更新。 这意味着,只要它们不破坏新的协议规则,未更新的节点仍然能够处理交易并将新的区块广播到区块链当中。

让我们想象一个软分叉,它制定了一个新的规则,将区块大小从3mb降低到2mb,旧的节点仍然可以处理交易并将2mb或更小的新区块上链,然而如果旧节点尝试将大于2mb的区块广播到网络中,新的节点则会因为该区块违反了新规则而将它拒绝。这样的话,旧节点会被激励以更新协议,因为旧的节点不如更新的节点高效。

硬分叉

硬分叉是与先前版本不兼容的加密货币协议的更新,意味着未更新到新版本的节点将无法处理交易或将新区块广播到区块链中。 硬分叉可用于变更或改进现有协议,甚至可用于创建新的独立协议和区块链。

让我们想象一下,一个协议更新(硬分叉)将区块大小从2mb增加到4mb,如果一个更新的节点尝试将一个3mb的区块上链,则旧的未更新节点不会将该区块视为有效而将它拒绝。

视情况而不同,硬分叉可以是计划好的或是有争议的。

在一个计划好的分叉中,参与者会自愿升级他们的软件以遵循新规则而抛弃旧版本,未更新的参与者则会留在几乎无人使用旧链上进行挖矿。

但是如果分叉是有争议的,也就是说社区内对于此次升级存在分歧,协议通常被分叉为两个不兼容的区块链——两种不同的加密货币。 两个区块链都会有自己独立的社区,而开发人员沿着他们认为最正确的道路进行开发。

由于分叉基于原来的区块链,因此原版区块链中的所有交易也会被复制到新的分叉中。举例来说,如果你有100个叫做A的加密货币,并且一个基于该加密货币的硬分叉创建了一个名为B的新加密货币,你还将获得100个B。

在现实中,也有硬分叉的存在

清代俞万春仇视以宋江为首的梁山泊起义的思想与金圣叹一致,所以他紧接金圣叹“腰斩”过的七十回本《水浒传》,从七十一回写起,杜撰出一大篇宋江等如何“被张叔夜擒拿正法”的故事,自名其书为《荡寇志》。

例子

2017年8月1日,比特币在其高度为478559时硬分叉为比特币(BTC)和比特币现金(BCH)两条链。这是比特币历史上第一次分叉也是区块链中最成功的一次硬分叉。分叉而来的比特币现金区块大小达到了8MB,因此它除了拥有比特币所有优点之外,其交易速度和矿工确认速度都比比特币快数倍。

2016年7月20日,以太坊进行了一次硬分叉,成功分成了以太坊(ETH)和以太经典(ETC)两条链。此次分叉源于同年6月的黑客事件。北京时间2016年6月17日,以太坊THE DAO被黑客进行攻击,损失了数千万美元的ETH,以太坊开发团队修改源码,强行把第1920000个区块的资金转移到另一个地址,“夺回”黑客控制的合约币。大部分矿工认同这个修改,一部分矿工不认同这个修改,于是形成了两条链,分别为以太坊和以太经典。

零知识证明

零知识证明并不是什么新东西,早在16世纪的文艺复兴时期,意大利有两位数学家为竞争一元三次方程求根公式发现者的桂冠,就采用了零知识证明的方法。当时,数学家塔尔塔里雅和菲奥都宣称自己掌握了这个求根公式,为了证明自己没有说谎,又不把公式的具体内容公布出来(可能在当时数学公式也是一种技术秘密),他们摆开了擂台:双方各出30个一元三次方程给对方解,谁能全部解出,就说明谁掌握了这个公式。比赛结果显示,塔尔塔里雅解出了菲奥出的全部30个方程,而菲奥一个也解不出。于是人们相信塔尔塔里雅是一元三次方程求根公式的真正发现者。

塔尔塔里雅,在没公开自己的公式的情况下,证明了自己发现一元三次方程求根公式。

我们定义一下零知识证明:

在不泄漏具体信息的前提下,向别人证明你知道某个信息。

比特币网络虽然具有匿名性,但是,其任然具有一定的可追踪性,如

比特币需要将所有的交易广播到网络上并通过所有节点达成共识来保证整个系统的安全性,也就是说所有的人都可以看到网络上所有的交易,而原始的比特币协议又并没有对交易发送者和接收者的地址作任何处理,这就导致某些细心的攻击者通过分析一个地址的交易特征并结合一些实际信息,就有可能分析出地址与实际人的对应关系,从而给使用者的隐私带来极大的隐患。

基于此隐患,衍生出很多真正的匿名币,而其用的原理便是零知识证明。

  • ZCash
  • 门罗币

下面我们以 ZCash 为例。

ZCash作为匿名加密货币项目,一开始只是作为比特币的加密匿名层存在,后来因为其优秀的隐私性成为独立的加密货币。与比特币一样,ZCash的总量也是2100万,不同的是它可以实现真正意义上的匿名——各位甚至都不用知道对方有多少钱就能完成交易。

ZCash利用了zk-SNARK技术,也即零知识证明的技术:即使货币的来源与流向信息完全保密,零知识证明技术仍然可以验证花钱的用户确实拥有货币。

这里我们只讲述一下 zk-SNARK 的 同态隐藏 属性。

举例:

A拥有x和y两个秘密的数字,需要向B证明这两个数字的和是7,只需要执行下面三个步骤:

  1. A计算f(x),f(y),并发送给B;

  2. 因为函数f(x)满足加法同态,B可以通过f(x),f(y)计算f(x+y);

  3. B独立计算f(7),并验证f(x+y)=f(7)。

智能合约

智能合约最早是由 Nick Szabo 提出的:

能够将协议与用户界面相结合的一种工具,从而对计算机网络进行规范化和安全加固。

在说智能合约之前,我们先说一下纸质合约。纸质合约是由现实中,主体双方通过协议规则和利益分配所签署的具有法律效益的合同。由于签署方是具有感情成分的主体,所以,在发生利益纠纷的时候,并且有争议的时候,主体中的一方可以不履行责任或者通过仲裁来判定走向。纸质合约最大的缺点在于信用问题,即,如果你和素未谋面的人签署合约,你无法相信他最终可以履行合约。

智能合约其实在生活中便已经有了,比如你还款信用卡,在截止日中,就把你的欠额从账户中划走。电饭煲在煮熟饭之后,可以进行断电操作。在这个层面上叫,智能合约更形象的表达方式是代码合约。

那么为什么智能合约在区块链时代才被人广泛的应用。

首先,我们来看信用卡还款机制。银行给你放贷,你还钱给银行,是因为,这里面有一套信用评定机制。银行通过分析你的还款能力而贷款给你,你也相信银行它不会做恶,也就是不会在你还款的时候,突然调高利息。即便是,双方有任何一方不履行应有的责任,我们还有法律作为保障。

但是,如果把银行变成网络上素未谋面的人呢?你无法判定他放贷给你是出于什么目的,如果双方资金有问题,那么法律也不会成为双方的保障。这个时候,智能合约最大的问题是无法解决信用问题。

而,区块链的出现解决的正是之前解决不了的信用问题,其核心可以用下面的这句话表示

代码即法律

所谓的智能合约,其行为是触发某一条件,执行某一行为,也就是代码中 if else 逻辑语句。将触发条件写入代码中,然后将合约放置在区块链网络中。由于,区块链的特性存在,导致,上传的合约几乎不能修改。并且,合约在区块链网络中广为传播,任何一个节点的执行都能做到一致性、透明性、自动化。

所以,智能合约签署双方无非相互信任,只需要按照智能合约的规定,签定某一服务,在条件达到的时候,由代码自动执行过程,返回结果。理论上,在此过程中,无论项目方、客户都是没办法更改合约执行的。

下面,我们需要回答几个问题:

  • 智能合约真的无法修改吗?
  • 智能合约的缺点在哪里?

智能合约真的无法修改吗?

以太坊智能合约一经部署,则无法再继续添加新功能。但是,如果其合约创建者在代码中预留了名为

SELFDESTRUCT

的函数,那么将来可以“删除”智能合约,也可以用新的合约替换它。如果未在合约代码中预留该函数,则它们将无法被删除。

值得注意的是,所谓的可升级智能合约支持开发人员在不可篡改方面拥有更大的灵活性。有许多方法可以创建可升级的智能合约,每个合约都可具有不同程度的复杂性。

举一个简单的例子,我们假设将智能合约分为多个较小的合约。其中一些被设计为不可变更的,而另一些则启用了“删除”功能。这意味着可以删除和替换部分代码(智能合约),而其他功能保持不变。

智能合约的缺点在哪里

  • 智能合约由人工编写的计算机代码组成。这也带来了许多风险,代码容易受到攻击和漏洞的影响。涉及敏感信息和大量资金时,它们应由经验丰富的程序员编写和部署,这也增加了写代码的成本。

  • 有的时候智能合约出现问题,而又因为区块链的不可篡改,可能会导致硬分叉。

请我喝杯咖啡吧~