简介
不管你们知不知道以太坊(Ethereum blockchain)是什么,但是你们大概都听说过以太坊。最近在新闻里出现过很多次,包括一些专业杂志的封面,但是如果你们对以太坊到底是什么没有一个基本的了解的话,看这些文章就会感觉跟看天书一样。 所以,什么是以太坊?本质上,就是一个保存数字交易永久记录的公共数据库。重要的是,这个数据库不需要任何中央权威机构来维持和保护它。相反的它以一个“无信任”的交易系统来运行—一个个体在不需要信任任何第三方或对方的情况下进行点对点交易的架构。
依然感到很困惑?这就是这篇文章存在的理由。我的目标是在技术层面来解释以太坊的工作原理,但是不会出现很复杂的数学问题或看起来很可怕的公式。即使你不是一个程序员,我希望你看完之后最起码对技术有个更好的认识。如果有些部分技术性太强不好理解,这是非常正常的,真的没有必要完全理解每一个小细节。我建议只要宏观的理解一下事物就行了。
这篇文章中的很多议点都是以太坊黄皮书中讨论过的概念的细分。我添加了我自己的解释和图表使理解以太坊更加简单一点。那些足够勇敢的人可以挑战一下技术,去阅读一下以太坊的黄皮书。
好了, 让我们开始吧!
区块链定义
区块链就是一个具有共享状态的密码性安全交易的单机(cryptographically secure transactional singleton machine with shared-state)。[1]这有点长,是吧?让我们将它分开来看:
“密码性安全(Cryptographically secure)”是指用一个很难被解开的复杂数学机制算法来保证数字货币生产的安全性。将它想象成类似于防火墙的这种。它们使得欺骗系统近乎是一个不可能的事情(比如:构造一笔假的交易,消除一笔交易等等)。
“交易的单机(Transactional singleton machine)”是指只有一个权威的机器实例为系统中产生的交易负责任。换句话说,只有一个全球真相是大家所相信的。
“具有共享状态(With shared-state)”是指在这台机器上存储的状态是共享的,对每个人都是开放的。
以太坊实现了区块链的这个范例。
以太坊模型说明
以太坊的本质就是一个基于交易的状态机(transaction-based state machine)。在计算机科学中,一个 状态机 是指可以读取一系列的输入,然后根据这些输入,会转换成一个新的状态出来的东西。
根据以太坊的状态机,我们从创世纪状态(genesis state)开始。这差不多类似于一片空白的石板,在网络中还没有任何交易的产生状态。当交易被执行后,这个创世纪状态就会转变成最终状态。在任何时刻,这个最终状态都代表着以太坊当前的状态。
以太坊的状态有百万个交易。这些交易都被“组团”到一个区块中。一个区块包含了一系列的交易,每个区块都与它的前一个区块链接起来。
为了让一个状态转换成下一个状态,交易必须是有效的。为了让一个交易被认为是有效的,它必须要经过一个验证过程,此过程也就是挖矿。挖矿就是一组节点(即电脑)用它们的计算资源来创建一个包含有效交易的区块出来。
任何在网络上宣称自己是矿工的节点都可以尝试创建和验证区块。世界各地的很多矿工都在同一时间创建和验证区块。每个矿工在提交一个区块到区块链上的时候都会提供一个数学机制的“证明”,这个证明就像一个保证:如果这个证明存在,那么这个区块一定是有效的。
为了让一个区块添加到主链上,一个矿工必须要比其他矿工更快的提供出这个“证明”。通过矿工提供的一个数学机制的“证明”来证实每个区块的过程称之为工作量证明(proof of work)。
证实了一个新区块的矿工都会被奖励一定价值的奖赏。奖赏是什么?以太坊使用一种内在数字代币—以太币(Ether)作为奖赏。每次矿工证明了一个新区块,那么就会产生一个新的以太币并被奖励给矿工。
你也许会在想:什么能确保每个人都只在区块的同一条链上呢?我们怎么能确定不会存在一部分矿工创建一个他们自己的链呢?
前面,我们定义了区块链就是一个具有共享状态的交易单机。使用这个定义,我们可以知道正确的当前状态是一个全球真相,所有人都必须要接受它。拥有多个状态(或多个链)会摧毁这个系统,因为它在哪个是正确状态的问题上不可能得到统一结果。如果链分叉了,你有可能在一条链上拥有10个币,一条链上拥有20个币,另一条链上拥有40个币。在这种场景下,是没有办法确定哪个链才是最”有效的“。
不论什么时候只要多个路径产生了,一个”分叉“就会出现。我们通常都想避免分叉,因为它们会破坏系统,强制人们去选择哪条链是他们相信的链。
为了确定哪个路径才是最有效的以及防止多条链的产生,以太坊使用了一个叫做“GHOST协议(GHOST protocol.)”的数学机制。
GHOST = Greedy Heaviest Observed Subtree
简单来说,GHOST协议就是让我们必须选择一个在其上完成计算最多的路径。一个方法确定路径就是使用最近一个区块(叶子区块)的区块号,区块号代表着当前路径上总的区块数(不包含创世纪区块)。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就可以允许我们赞同当前状态的权威版本。
现在你大概对区块链是什么有个理性的认识,让我们在再深入了地解一下以太坊系统主要组成部分:
账户(accounts)
状态(state)
损耗和费用(gas and fees)
交易(transactions)
区块(blocks)
交易执行(transaction execution)
挖矿(mining)
工作量证明(proof of work)
在开始之前需要注意的是:每当我说某某的hash, 我指的都是KECCAK-256 hash, 以太坊就是使用这个hash算法。
账户
以太坊的全局“共享状态”是有很多小对象(账户)来组成的,这些账户可以通过消息传递架构来与对方进行交互。每个账户都有一个与之关联的状态(state)和一个20字节的地址(address)。在以太坊中一个地址是160位的标识符,用来识别账户的。
这是两种类型的账户:
外部拥有的账户,被私钥控制且没有任何代码与之关联
合约账户,被它们的合约代码控制且有代码与之关联
外部拥有账户与合约账户的比较
理解外部拥有账户和合约账户的基本区别是很重要的。一个外部拥有账户可以通过创建和用自己的私钥来对交易进行签名,来发送消息给另一个外部拥有账户或合约账户。在两个外部拥有账户之间传送的消息只是一个简单的价值转移。但是从外部拥有账户到合约账户的消息会激活合约账户的代码,允许它执行各种动作。(比如转移代币,写入内部存储,挖出一个新代币,执行一些运算,创建一个新的合约等等)。
不像外部拥有账户,合约账户不可以自己发起一个交易。相反,合约账户只有在接收到一个交易之后(从一个外部拥有账户或另一个合约账户接),为了响应此交易而触发一个交易。我们将会在“交易和消息”部分来了解关于合约与合约之间的通信。
因此,在以太坊上任何的动作,总是被外部控制账户触发的交易所发动的。
账户状态
账户状态有四个组成部分,不论账户类型是什么,都存在这四个组成部分:
nonce:如果账户是一个外部拥有账户,nonce代表从此账户地址发送的交易序号。如果账户是一个合约账户,nonce代表此账户创建的合约序号
balance: 此地址拥有Wei的数量。1Ether=10^18Wei
storageRoot: Merkle Patricia树的根节点Hash值(我们后面在解释Merkle树)。Merkle树会将此账户存储内容的Hash值进行编码,默认是空值
codeHash:此账户EVM(以太坊虚拟机,后面细说)代码的hash值。对于合约账户,就是被Hash的代码并作为codeHash保存。对于外部拥有账户,codeHash域是一个空字符串的Hash值
世界状态
好了,我们知道了以太坊的全局状态就是由账户地址和账户状态的一个映射组成。这个映射被保存在一个叫做Merkle Patricia树的数据结构中
Merkle Tree(也被叫做Merkle trie)是一种由一系列节点组成的二叉树,这些节点包括:
在树底的包含了源数据的大量叶子节点
一系列的中间的节点,这些节点是两个子节点的Hash值
一个根节点,同样是两个子节点的Hash值,代表着整棵树
树底的数据是通过分开我们想要保存到chunks的数据产生的,然后将chunks分成buckets,再然后再获取每个bucket的hash值并一直重复直到最后只剩下一个Hash:根Hash。
这棵树要求存在里面的值(value)都有一个对应的key。从树的根节点开始,key会告诉你顺着哪个子节点可以获得对应的值,这个值存在叶子节点。在以太坊中,key/value是地址和与地址相关联的账户之间状态的映射,包括每个账户的balance, nonce, codeHash和storageRoot(storageRoot自己就是一颗树)。
同样的树结构也用来存储交易和收据。更具体的说,每个块都有一个头(header),保存了三个不同Merkle trie结构的根节点的Hash,包括:
状态树
交易树
收据树
在Merkle tries中存储所有信息的高效性在以太坊中的“轻客户端”和“轻节点”相当的有用。记住区块链就是一群节点来维持的。广泛的说,有两种节点类型:全节点和轻节点。
全节点通过下载整条链来进行同步,从创世纪块到当前块,执行其中包含的所有交易。通常,矿工会存储全节点,因为他们在挖矿过程中需要全节点。也有可能下载一个全节点而不用执行所有的交易。无论如何,一个全节点包含了整个链。
不过除非一个节点需要执行所有的交易或轻松访问历史数据,不然没必要保存整条链。这就是轻节点概念的来源。比起下载和存储整个链以及执行其中所有的交易,轻节点仅仅下载链的头,从创世纪块到当前块的头,不执行任何的交易或检索任何相关联的状态。由于轻节点可以访问块的头,而头中包含了3个tries的Hash,所有轻节点依然可以很容易生成和接收关于交易、事件、余额等可验证的答案。
这个可以行的通是因为在Merkle树中hash值是向上传播的—如果一个恶意用户试图用一个假交易来交换Merkle树底的交易,这个会改变它上面节点的hash值,而它上面节点的值的改变也会导致上上一个节点Hash值的改变,以此类推,一直到树的根节点。
任何节点想要验证一些数据都可以通过Merkle证明来进行验证,Merkle 证明的组成:
一块需要验证的数据
树的根节点Hash
一个“分支”(从 chunk到根这个路径上所有的hash值)
任何可以读取证明的人都可以验证分支的hash是连贯的,因此给出的块在树中实际的位置就是在此处。
总之,使用Merkle Patricia树的好处就是该结构的根节点加密取决于存储在树中的数据,而且根据点的hash还可以作为该数据的安全标识。由于块的头包含了状态、交易、收据树的根hash,所有任何节点都可以验证以太坊的一小部分状态而不用保存整个状态,这整个状态的的大小可能是非常大的。
Gas和费用
在以太坊中一个比较重要的概念就是费用(fees),由以太坊网络上的交易而产生的每一次计算,都会产生费用—没有免费的午餐。这个费用是以称之为”gas”的来支付。
gas就是用来衡量在一个具体计算中要求的费用单位。gas price就是你愿意在每个gas上花费Ether的数量,以“gwei”进行衡量。“Wei”是Ether的最小单位,1Ether表示10^18Wei. 1gwei是1,000,000,000 Wei。
对每个交易,发送者设置gas limit和gas price。gas limit和gas price就代表着发送者愿意为执行交易支付的Wei的最大值。
例如,假设发送者设置gas limit为50,000,gas price为20gwei。这就表示发送者愿意最多支付50,000*20gwei = 1,000,000,000,000,000 Wei = 0.001 Ether来执行此交易。
记住gas limit代表用户愿意花费在gas上的钱的最大值。如果在他们的账户余额中有足够的Ether来支付这个最大值费用,那么就没问题。在交易结束时任何未使用的gas都会被返回给发送者,以原始费率兑换。
在发送者没有提供足够的gas来执行交易,那么交易执行就会出现“gas不足”然后被认为是无效的。在这种情况下,交易处理就会被终止以及所有已改变的状态将会被恢复,最后我们就又回到了交易之前的状态—完完全全的之前状态就像这笔交易从来没有发生。因为机器在耗尽gas之前还是为计算做出了努力,
所以理论上,将不会有任何的gas被返回给发送者。
这些gas的钱到底去了哪里?发送者在gas上花费的所有钱都发送给了“受益人”地址,通常情况下就是矿工的地址。因为矿工为了计算和验证交易做出了努力,所以矿工接收gas的费用作为奖励。
通常,发送者愿意支付更高的gas price,矿工从这笔交易总就能获得更多的价值。因此,矿工也就更加愿意选择这笔交易。这样的话,矿工可以自由的选择一笔交易自己愿意验证或忽略。为了引导发送者应该设置gas price为多少,矿工可以选择建议一个最小的gas值他们愿意执行一个交易。
存储也有费用
gas不仅仅是用来支付计算这一步的费用,而且也用来支付存储的费用。存储的总费用与所使用的32位字节的最小倍数成比例。
存储费用有一些比较细微的方面。比如,由于增加了的存储增加了所有节点上的以太坊状态数据库的大小,所以激励保持数据存储量小。为了这个原因,如果一个交易的执行有一步是清除一个存储实体,那么为执行这个操作的费用就会被放弃,并且由于释放存储空间的退款就会被返回给发送者。
费用的作用是什么?
以太坊可以运作的一个重要方面就是每个网络执行的操作同时也被全节点所影响。然而,计算的操作在以太坊虚拟机上是非常昂贵的。因此,以太坊智能合约最好是用来执行最简单的任务,比如运行一个简单的业务逻辑或者验证签名和其他密码对象,而不是用于复杂的操作,比如文件存储,电子邮件,或机器学习,这些会给网络造成压力。施加费用防止用户使网络超负荷。
以太坊是一个图灵完备语言(短而言之,图灵机器就是一个可以模拟任何电脑算法的机器。对于图灵机器不太熟悉的人可以看看这个 和这个 )。这就允许有循环,并使以太坊受到停机问题 的影响,这个问题让你无法确定程序是否无限制的运行。如果没有费用的话,恶意的执行者通过执行一个包含无限循环的交易就可以很容易的让网络瘫痪而不会产生任何反响。因此,费用保护网络不受蓄意攻击。
你也许会想,“为什么我们还需要为存储付费?”其实就像计算一样,以太坊网络上的存储是整个网络都必须要负担的成本。
交易和消息
之前说过以太坊是一个基于交易的状态机。换句话说,在两个不同账户之间发生的交易才让以太坊全球状态从一个状态转换成另一个状态。
最基本的概念,一个交易就是被外部拥有账户生成的加密签名的一段指令,序列化,然后提交给区块链。
有两种类型的交易:消息通信和合约创建(也就是交易产生一个新的以太坊合约)。
不管什么类型的交易,都包含:
nonce:发送者发送交易数的计数
gasPrice:发送者愿意支付执行交易所需的每个gas的Wei数量
gasLimit:发送者愿意为执行交易支付gas数量的最大值。这个数量被设置之后在任何计算完成之前就会被提前扣掉
to:接收者的地址。在合约创建交易中,合约账户的地址还没有存在,所以值先空着
value:从发送者转移到接收者的Wei数量。在合约创建交易中,value作为新建合约账户的开始余额
v,r,s:用于产生标识交易发生着的签名
init(只有在合约创建交易中存在):用来初始化新合约账户的EVM代码片段。init值会执行一次,然后就会被丢弃。当init第一次执行的时候,它返回一个账户代码体,也就是永久与合约账户关联的一段代码。
data(可选域,只有在消息通信中存在):消息通话中的输入数据(也就是参数)。例如,如果智能合约就是一个域名注册服务,那么调用合约可能就会期待输入域例如域名和IP地址
在“账户”这个章节中我们学到交易—消息通信和合约创建交易两者都总是被外部拥有账户触发并提交到区块链的。换种思维思考就是,交易是外部世界和以太坊内部状态的桥梁。
但是这也并不代表一个合约与另一个合约无法通信。在以太坊状态全局范围内的合约可以与在相同范围内的合约进行通信。他们是通过“消息”或者“内部交易”进行通信的。我们可以认为消息或内部交易类似于交易,不过与交易有着最大的不同点—它们不是由外部拥有账户产生的。相反,他们是被合约产生的。它们是虚拟对象,与交易不同,没有被序列化而且只存在与以太坊执行环境。
当一个合约发送一个内部交易给另一个合约,存在于接收者合约账户相关联的代码就会被执行。
一个重要需要注意的事情是内部交易或者消息不包含gasLimit。因为gas limit是由原始交易的外部创建者决定的(也就是外部拥有账户)。外部拥有账户设置的gas limit必须要高到足够将交易完成,包括由于此交易而长生的任何”子执行”,例如合约到合约的消息。如果,在一个交易或者信息链中,其中一个消息执行使gas已不足,那么这个消息的执行会被还原,包括任何被此执行触发的子消息。不过,父执行没必要被还原。
区块
所有的交易都被组成一个”块”。一个区块链包含了一系列这样的链在一起区块。
在以太坊中,一个区块包含:
区块头
关于包含在此区块中交易集的信息
与当前块的ommers相关的一系列其他区块头
Ommers解释
“ommer”到底是什么? ommer就是一个区块的父区块与当前区块父区块的父区块是相同的。让我们快速了解一下ommers是用来干嘛的,并且为什么一个区块需要为ommers包含区块头。
由于以太坊的构造,它的区块生产时间(大概15秒左右)比其他的区块链例如Bitcoin(大概10分钟左右)要快很多。这使得交易的处理更快。但是,更短的区块生产时间的一个缺点就是:更多的竞争区块会被矿工发现。这些竞争区块同样也被称为“孤区块”(也就是被挖出来但是不会被添加到主链上的区块)。
Ommers的目的就是为了帮助奖励矿工纳入这些孤区块。矿工包含的ommers必须是有效的,也就是ommers必须在父区块的第6个子区块之内或更小范围内。在第6个子区块之后,陈旧的孤区块将不会再被引用(因为包含老旧的交易会使事情变得复杂一点)。
Ommer区块会收到比全区块少一点的奖励。不管怎样,依然存在激励来让矿工们纳入孤区块并能从中获得一些报酬。
区块头
让我们再回到区块的问题上。我们前面提到每个区块都有一个“区块头”,但这究竟是什么?
区块头是一个区块的一部分,包含了:
parentHash:父区块头的Hash值(这也是使得区块变成区块链的原因)
ommerHash:当前区块ommers列表的Hash值
beneficiary:接收挖此区块费用的账户地址
stateRoot:状态树根节点的Hash值(回忆一下我们之前所说的保存在头中的状态树以及它使得轻客户端认证任何关于状态的事情都变得非常简单)
transactionsRoot:包含此区块所列的所有交易的树的根节点Hash值
receiptsRoot:包含此区块所列的所有交易收据的树的根节点Hash值
logsBloom:由日志信息组成的一个Bloom过滤器 (数据结构)
difficulty: 此区块的难度级别
number:当前区块的计数(创世纪块的区块序号为0,对于每个后续区块,区块序号都增加1)
gasLimit:每个区块的当前gas limit
gasUsed: 此区块中交易所用的总gas量
timestamp:此区块成立时的unix的时间戳
extraData:与此区块相关的附加数据
mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
nonce:一个Hash值,当与mixHash组合时,证明此区块已经执行了足够的计算
注意每个区块是如何包含三个树结构的,三个树结构分别对应:
状态(stateRoot)
交易(transactionsRoot)
收据(receiptsRoot)
这三个树结构就是我们前面讨论的Merkle Patricia树。
另外,上面描述的有几个术语值得说明一下,下面来看一下。
日志
以太坊允许日志可以跟踪各种交易和信息。一个合约可以通过定义“事件”来显示的生成日志。
一个日志的实体包含:
记录器的账户地址
代表本次交易执行的各种事件的一系列主题以及与这些事件相关的任何数据
日志被保存在bloom过滤器 中,过滤器高效的保存了无尽的日志数据。
交易收据
自于被包含在交易收据中的日志信息存储在头中。就像你在商店买东西时收到的收据一样,以太坊为每笔交易都产生一个收据。像你期望的那样,每个收据包含关于交易的特定信息。这些收据包含着:
区块序号
区块Hash
交易Hash
当前交易使用了的gas
在当前交易执行完之后当前块使用的累计gas
执行当前交易时创建的日志
等等
区块难度
区块的难度是被用来在验证区块时加强一致性。创世纪区块的难度是131,072,有一个特殊的公式用来计算之后的每个块的难度。如果某个区块比前一个区块验证的更快,以太坊协议就会增加区块的难度。
区块的难度影响nonce,它是在挖矿时必须要使用proof-of-work算法来计算的一个hash值。
区块难度和nonce之间的关系用数学形式表达就是:
Hd代表的是难度。
找到符合难度阈值的nonce唯一方法就是使用proof-of-work算法来列举所有的可能性。找到解决方案预期时间与难度成正比—难度越高,找到nonce就越困难,因此验证一个区块也就越难,这又相应地增加了验证新块所需的时间。所以,通过调整区块难度,协议可以调整验证区块所需的时间。
另一方面,如果验证时间变的越来越慢,协议就会降低难度。这样的话,验证时间自我调节以保持恒定的速率—平均每15s一个块。
交易执行
我们已经到了以太坊协议最复杂的部分:交易的执行。假设你发送了一笔交易给以太坊网络处理,将以太坊状态转换成包含你的交易这个过程到底发生了什么?
首先,为了可以被执行所有的交易必须都要符合最基础的一系列要求,包括:
交易必须是正确格式化的RLP。”RLP”代表Recursive Length Prefix,它是一种数据格式,用来编码二进制数据嵌套数组。以太坊就是使用RLP格式序列化对象。
有效的交易签名。
有效的交易序号。回忆一下账户中的nonce就是从此账户发送出去交易的计数。如果有效,那么交易序号一定等于发送账户中的nonce。
交易的gas limit 一定要等于或者大于交易使用的intrinsic gas,intrinsic gas包括:
——-1.执行交易预订费用为21,000gas
——-2.随交易发送的数据的gas费用(每字节数据或代码为0的费用为4gas,每个非零字节的数据或代码费用为68gas)
——-3.如果交易是合约创建交易,还需要额外的32,000gas
发送账户余额必须有足够的Ether来支付”前期”gas费用。前期gas费用的计算比较简单:首先,交易的gas limit乘以交易的gas价格得到最大的gas费用。然后,这个最大gas费用被加到从发送方传送给接收方的总值。
如何交易符合上面所说的所有要求,那么我们进行下面步骤。
第一步,我们从发送者的余额中扣除执行的前期费用,并为当前交易将发送者账户中的nonce增加1。此时,我们可以计算剩余的gas,将交易的总gas减去使用的intrinsic gas。
第二步,开始执行交易。在交易执行的整个过程中,以太坊保持跟踪“子状态”。子状态是记录在交易中生成的信息的一种方式,当交易完成时会立即需要这些信息。具体来说,它包含:
自毁集:在交易完成之后会被丢弃的账户集(如果存在的话)
日志系列:虚拟机的代码执行的归档和可检索的检查点
退款余额:交易完成之后需要退还给发送账户的总额。回忆一下我们之前提到的以太坊中的存储需要付费,发送者要是清理了内存就会有退款。以太坊使用退款计数进行跟踪退款余额。退款计数从0开始并且每当合约删除了一些存储中的东西都会进行增加。
第三步,交易所需的各种计算开始被处理。
当交易所需的步骤全部处理完成,并假设没有无效状态,通过确定退还给发送者的未使用的gas量,最终的状态也被确定。除了未使用的gas,发送者还会得到上面所说的“退款余额”中退还的一些津贴。
一旦发送者得到退款之后:
gas的Ether就会矿工
交易使用的gas会被添加到区块的gas计数中(计数一直记录当前区块中所有交易使用的gas总量,这对于验证区块时是非常有用的)
所有在自毁集中的账户(如果存在的话)都会被删除
最后,我们就有了一个新的状态以及交易创建的一系列日志。
现在我们已经介绍了交易执行的基本知识,让我们再看看合约创建交易和消息通信的一些区别。
合约创建(Contract creation)
回忆一下在以太坊中,有两种账户类型:合约账户和外部拥有账户。当我们说一个交易是“合约创建”,是指交易的目的是创建一个新的合约账户。
为了创建一个新的合约账户,我们使用一个特殊的公式来声明新账户的地址。然后我们使用下面的方法来初始化一个账户:
设置nonce为0
如果发送者通过交易发送了一定量的Ether作为value,那么设置账户的余额为value
将存储设置为0
设置合约的codeHash为一个空字符串的Hash值
一旦我们完成了账户的初始化,使用交易发送过来的init code(查看”交易和信息”章节来复习一下init code),实际上就创造了一个账户。init code的执行过程是各种各样的。取决于合约的构造器,可能是更新账户的存储,也可能是创建另一个合约账户,或者发起另一个消息通信等等。
当初始化合约的代码被执行之后,会使用gas。交易不允许使用的gas超过剩余gas。如果它使用的gas超过剩余gas,那么就会发生gas不足异(OOG)常并退出。如果一个交易由于gas不足异常而退出,那么状态会立刻恢复到交易前的一个点。发送者也不会获得在gas用完之前所花费的gas。
不过,如果发送者随着交易发送了Ether,即使合约创建失败Ether也会被退回来。
如果初始化代码成功的执行完成,最后的合约创建的花费会被支付。这些是存储成本,与创建的合约代码大小成正比(再一次,没有免费的午餐)。如果没有足够的剩余gas来支付最后的花费,那么交易就会再次宣布gas不足异常并中断退出。
如果所有的都正常进行没有任何异常出现,那么任何剩余的未使用gas都会被退回给原始的交易发送者,现在改变的状态才被允许永久保存。
消息通信(Message calls)
消息通信的执行与合约创建比较类似,只不过有一点点区别。
由于没有新账户被创建,所以消息通信的执行不包含任何的init code。不过,它可以包含输入数据,如果交易发送者提供了此数据的话。一旦执行,消息通信同样会有一个额外的组件来包含输出数据,如果后续执行需要此数据的话就组件就会被使用。
就像合约创建一样,如果消息通信执行退出是因为gas不足或交易无效(例如栈溢出,无效跳转目的地或无效指令),那么已使用的gas是不会被退回给原始触发者的。相反,所有剩余的未使用gas也会被消耗掉,并且状态会被立刻重置为余额转移之前的那个点。
没有任何方法停止或恢复交易的执行而不让系统消耗你提供的所有gas,直到最新的以太坊更新。例如,假设你编写了一个合约,当调用者没有授权来执行这些交易的时候抛出一个错误。在以太坊的前一个版本中,剩余的gas也会被消耗掉,并且没有任何gas退回给发送者。但是拜占庭更新包括了一个新的“恢复”代码,允许合约停止执行并且恢复状态改变而不消耗剩余的gas,此代码还拥有返回交易失败原因的能力。如果一个交易是由于恢复而退出,那么未使用的gas就会被返回给发送者。
执行模式
到目前为止,我们了解了从开始到结束执行的交易必须经历的一系列的步骤。现在,我们来看看交易究竟是如何在虚拟机(VM)中执行的。
协议实际操作交易处理的部分是以太坊自己的虚拟机,称之为以太坊虚拟机(EVM)。
像之前定义的那样,EVM是图灵完备虚拟机器。EVM存在而典型图灵完备机器不存在的唯一限制就是EVM本质上是被gas束缚。因此,可以完成的计算总量本质上是被提供的gas总量限制的。
此外,EVM具有基于堆栈的架构。堆栈机器 就是使用后进先出来保存临时值的计算机。
EVM中每个堆栈项的大小为256位,堆栈有一个最大的大小,为1024位。
EVM有内存,项目按照可寻址字节数组来存储。内存是易失性的,也就是数据是不持久的。
EVM也有一个存储器。不像内存,存储器是非易失性的,并作为系统状态的一部分进行维护。EVM分开保存程序代码,在虚拟ROM 中只能通过特殊指令来访问。这样的话,EVM就与典型的冯·诺依曼架构 不同,此架构将程序的代码存储在内存或存储器中。
EVM同样有属于它自己的语言:“EVM字节码”,当一个程序员比如你或我写一个在以太坊上运行的智能合约时,我们通常都是用高级语言例如Solidity来编写代码。然后我们可以将它编译成EVM可以理解的EVM字节码。
好了,现在来说执行。
在执行特定的计算之前,处理器会确定下面所说的信息是有效和是否可获取:
系统状态
用于计算的剩余gas
拥有执行代码的账户地址
原始触发此次执行的交易发送者的地址
触发代码执行的账户地址(可能与原始发送者不同)
触发此次执行的交易gas价格
此次执行的输入数据
Value(单位为Wei)作为当前执行的一部分传递给该账户
待执行的机器码
当前区块的区块头
当前消息通信或合约创建堆栈的深度
执行刚开始时,内存和堆栈都是空的,程序计数器为0。
1 |
PC: 0 STACK: [] MEM: [], STORAGE: {} |
然后EVM开始递归的执行交易,为每个循环计算系统状态和机器状态。系统状态也就是以太坊的全局状态(global state)。机器状态包含:
可获取的gas
程序计数器
内存的内容
内存中字的活跃数
堆栈的内容
堆栈中的项从系列的最左边被删除或者添加。
每个循环,剩余的gas都会被减少相应的量,程序计数器也会增加。
在每个循环的结束,都有三种可能性:
机器到达异常状态(例如 gas不足,无效指令,堆栈项不足,堆栈项会溢出1024,无效的JUMP/JUMPI目的地等等)因此停止,并丢弃任何的更改
进入后续处理下一个循环
机器到达了受控停止(到达执行过程的终点)
假设执行没有遇到异常状态,达到一个“可控的”或正常的停止,机器就会产生一个合成状态,执行之后的剩余gas、产生的子状态、以及组合输出。
呼。我们终于过了一遍以太坊最难的部分了。如果你不能完全理解这个部分,也没关系。除非你在理解非常深层次的东西,否则你真的没有必要去理解执行的每个细节。
一个块是如何完成的?
最后,让我们看看一个包含许多交易的块是如何完成的。
当我们说“完成”,取决于此块是新的还是已存在的,可以指两个不同的事情。如果是个新块,就是指挖这个块所需的处理。如果是已存在的块,就是指验证此块的处理。不论哪种情况,一个块的“完成”都有4个要求:
1)验证(或者,如果是挖矿的话,就是确定)ommers
在区块头中的每个ommer都必须是有效的头并且必须在当前块的6代之内
2)验证(或者,如果是挖矿的话,就是确定)交易
区块中的gasUsed数量必须与区块中所列交易使用的累积gas量相等。(回忆一下,当执行一个交易的时候,我们会跟踪区块的gas计数器,也就跟踪了区块中所有交易使用的gas总数量)
3)申请奖励(只有挖矿时)
受益人的地址会因为挖矿而获得5Ether(在以太坊EIP-649 提案中,5ETH很快将会被减少为3ETH)。另外,对于每个ommer,当前块的受益人会获得额外的1/32当前块奖励金的奖励。最近,每个ommer区块的受益人能够得到一定量的奖励(有个特殊公式可以进行计算)。
4)校验(或者,如果是挖矿的话,就是计算一个有效的)状态和nonce
确保所有的交易和改变的结果状态都被应用了,然后在区块奖励被应用于最终交易结果状态之后定义一个新块为状态。通过检查最终状态与存储在头中的状态树来进行验证。
工作量证明挖矿
在“区块”这个章节简短的说明了一下区块难度这个概念。给予区块难度意义的算法叫做工作量证明(PoW)。
以太坊的工作量证明算法称之为“Ethash” (之前叫做Dagger-Hashimoto)。
算法正式定义为:
m代表的是mixHash,n代表的是nonce,Hn代表的是新区块的头(不包含需要计算的nonce和mixHash),Hn是区块头的nonce,d是DAG ,就是一个大数据集。
在”区块”章节,我们讨论了存在于区块头中的多项。其中两项叫做mixHash和nonce。也许你会回忆起:
mixHash:一个Hash值,当与nonce组合时,证明此区块已经执行了足够的计算
nonce:一个Hash值,当与mixHash组合时,证明此区块已经执行了足够的计算
PoW函数就是用来估算这两项的。
mixHash和nonce到底是如何使用PoW函数来计算出来的有点复杂,如果深入了解的话,我们可以另写一篇文章来讲解了。但是在一个高层面上,它大致就是这样计算的:
会为每个区块计算一个”种子”。每个“时期”的种子都不一样,每个时期是30,000个区块长度。对于第一时期,种子就是32位0的hash值。对于后续的每个时期,种子就是前一个种子hash值的hash值。使用这个种子,节点可以计算一个伪随机“缓存”。
这个缓存是非常有用的,因为它可以使“轻节点”的概念变成现实,轻节点概念在这篇文章的前面讨论过。轻节点的目的就是让某个节点有能力高效的校验交易而用不着存储整个区块链的数据集。一个轻节点可以仅基于缓存来校验一个交易的有效性,因为缓存可以重新生成需要校验的特定块。
使用这个缓存,节点可以生成DAG“数据集”,数据集中的每项取决于缓存中少量伪随机选择项。为了成为矿工,你需要要生成全数据集,所有全客户端和矿工都保存这个数据集,并且这个数据集随着时间线性增长。
然后矿工可以随机抽取数据集中的部分并将它们放入一个数学函数中Hash出一个”mixHash”。矿工会重复生成mixHash直到输出的值小于想要的目标值nonce。当输出的值符合这个条件的时候,nonce就被认为是有效的,然后区块就被添加到链中。
挖矿作为安全机制
总的来说,PoW的目的就是以加密安全的方式证明生成的一些输出(也就是nonce)是经过了一定量的计算的。因为除了列举所有的可能性,没有更好的其他方法来找到一个低于要求阈值的nonce。重复应用Hash函数的输出均匀分布,所以我们可以确保,在平均值上,找到满足要求的nonce所需时间取决于难度阈值。难度系数越大,所需时间越长。这样的话,PoW算法就给予难度这个概念的意义了:用来加强区块链的安全。
我们所说的区块链的安全又是什么意思?这非常简单:我们想要创造一个每个人都信任的区块链。像我们之前在这篇文章中讨论的那样,如果存在超过1条以上的链,用户的信任就会消失,因为他们没有能力合理的确认哪条链才是“有效的”。为了让一群用户接受存储在区块链中的潜在状态,我们需要有一群人信任的一个权威区块链。
这完完全全就是Pow算法所做的事情:它确保特定的区块链直到未来都一直保持着权威性,让攻击者创造一个新区块来重写某个历史部分(例如清除一个交易或者创建一个假的交易)或者保持一个分叉变得非常困难。为了首先让他们的区块被验证,攻击者需要总是比网络上的其他人要更快的解决掉nonce问题,这样网络就会相信他们的链是最重的链(基于我们之前提到的GHOST协议原则)。除非攻击者拥有超过一半的网络挖矿能力(这种场景也被称为大多数51%攻击 ),要不然这基本上是不可能的。
挖矿作为财富分配机制
除了提供一个安全的区块链,PoW同样也是分配财富给那些为提供这个安全而花费自己计算力的人的一种方法。回忆一下,一个矿工挖出一个区块的时候会获得奖励,包括:
为“获胜”区块提供的5 ether静态区块奖励(马上就会变成3 ether )
区块中的交易在区块内所消耗的gas
纳入ommers作为区块的一部分的额外奖励
为了保证PoW共识算法机制对安全和财富分配的使用是长期可持续的,以太坊努力灌输这两个特性:
尽可能的让更多的人可访问。换句话说,人们不需要特殊的或者与众不同的硬件来运行这个算法。这样做的目的是为了让财富分配模式变的尽可能的开放,以便任何人都可以提供一些算力而获得Ether作为回报。
降低任何单个节点(或小组)能够创造与其不成比例的利润可能性。任何可以创造不成比例的利润的节点拥有比较大的影响力来决定权威区块链。这是件麻烦的事情,因为这降低了网络的安全性。
在区块链网络中,一个与上面两个特性有关的一个问题是PoW算法是一个SHA256哈希函数。这种函数的缺点就是它使用特殊的硬件(也被称之为ASCIs)可以更加快速高效的解决nonce问题。
为了减轻这个问题,以太坊选择让PoW算法(Ethhash) 提高内存级别难度。意思是此算法被设计为计算出要求的nonce需要大量的内存和带宽。大量内存的需求让电脑平行的使用内存同时计算多个nonce变得极其困难,高带宽的需求让即使是超级电脑同时计算多个nonce也变得十分艰难。这种方式降低了中心化的风险,并为正在进行验证的几点提供了更加公平的竞争环境。
有一件值得注意的事情是以太坊正在从PoW共识机制渐渐转换为一个叫做“权益证明(PoS)”的共识算法。这就是一个比较野心的话题了,我们希望可以在未来的文章中探索这个话题。
总结
呼! 你终于坚持到最后了。我希望如此?
这篇文章中有很多的地方需要消化。如果需要你阅读好几遍才能理解怎么回事,这完全正常。我个人重复阅读了好几次以太坊黄皮书,白皮书,以及代码的不同部分才渐渐明白是怎么回事。
无论如何,我希望你觉得这篇文章对你有帮助。如果你发现了任何的错误或失误,我很乐意你给我写个私人消息或者直接在评论区评论(我保证我会查看所有评论)。
记住,我是个人类(对,这是真的),我会犯错误。为了社区的利益,我花时间免费写了这篇文章。所以请你在反馈时不要带着没必要的攻击性,尽量是建设性的反馈。
从2015年开始,区块链很快就成为资本最关注的新领域:
2015年9月,R3区块链联盟成立,40多家国际银行组织加入,成员遍布全球。
2015年9月,千亿级中国公司万向控股成立了区块链实验室。
2015年12月,Hyperledger区块链项目由Linu基金会发起。
2016年2月,IBM的Open Blockchain的框架基本形成。
2016年12月,中央人民银行数字票据交易平台原型系统已开发成功。
2017年2月,企业以太坊联盟成立,成员包括摩根大通、英特尔、微软等30多家企业。
然而与此同时,却也看不到真正意义上任何解决实际问题、实现在大规模应用的区块链项目,真正赚钱的仍然还是比特币行业的挖矿以及交易所。事实上,我们有理由认为也许变革来的并没有那么快,也许短期高估新技术是人类认知不可避免的阶段。
区块链作为一种价值传输网络,目前被各大金融机构所追捧,所有人都在设想着当资产在区块链网络中清算、结算、支付等过程中可以节省下巨大的人力成本、监管成本和系统维护成本。我们也常常能从各大媒体看到引用麦肯锡或奥纬咨询看起来夸张的测算:“区块链机房的基础设施建设成本仅为目前集中式数据中心的1%,运营成本只有3%—5%。运用区块链技术进行跨境支付结算,不仅可以缩短结算周期,而且每年可以节省100亿—200亿美元的成本。”
确实,区块链作为一种价值传输网络,或者说一种分布式账本技术,理论上能够解决很多现实中存在的问题,节省数亿成本。但是,我们不禁想问:当现实资产还没有解决对接区块链资产问题的时候,谈什么节省成本呢?
事实上,金融机构希望应用的区块链网络和比特币网络很大不同在于区块链资产的发行方式。比特币是在比特币区块链上产生、发行的,所以它的资产安全性是自闭环的。而区块链在金融体系里面目前无法做到完全封闭,它需要跟现有的金融体系对接,这样就会存在链下的资金、资产如何上链,上链之后又如何与链上的资金、资产保证一致性和真实性的问题。
我们认为这是我们目前需解决的问题,就如同早期互联网发展,首先需要把各种信息、资讯放到互联网上,才会发展出之后的社交、电商等。
区块链发行机制
为了更好的说明什么是区块链上发行的资产,接下来我们用比特币举例来简单说明。我们都知道比特币的发行总量上限是2100万个,普通人想要获取比特币,除了从各大交易平台直接购买,就需要通过专业的矿机去“挖矿”获取。
我们也可以说“挖矿”这种类比淘金的行为就是比特币发行的方式,而这种方式是通过引入一种共识机制来完成的——我们叫做“工作证明Proof-of-work”机制。
这个方法并不不直观,需要结合两个概念,1)人为的让检验交易的过程耗费较的计算成本;2)奖赏他们帮忙检验这个交易。具体技术层面的细节本文不做阐述,我们只需要知道这种机制是一种理性人假设下的分布式系统共识,在这样的共识机制下,任何人都趋向于做消耗现实世界中的算力成本,来维护比特币网络的安全和运转,从而获取网络奖励的比特币。也就说从这个角度看,比特币的获取的成本是锚定现实资产的,而比特币也可以看成是一种“矿工”付出现实成本后的“奖励凭证”,而这个种“凭证”可以在比特币网络中实现点对点的价值传输。
综上,我们可以知道比特币区块链这个分布式系统中资产的诞生、发行需要一种共识机制(规则)来完成,而不是由一个权威机构规定的发行规则,这和我们现实生活中的资产发行模式有较大的差异。
现实生活中资产发行机制
相比于现实生活中的资产发行模式,区块链就是一个异类了。我们以资产证券化来说明,下图是资产证券化的业务流程,看起来会比较复杂,整个流程涉及的参与方多达11个。事实上,主要的主体就是“XXXABS计划”的管理人和销售机构,是他们把一项基础资产(例如:未来收益权)变成⼀种可以交易的证券资产。
为了简单说明我们举个通俗的例子:
比如,楼下张大爷开了个煎饼摊,每天能有五百块现金流入。张大爷看生意不错,想再买个小面包车进货,把生意做大。买面包车需要七万块钱,找银行借吧,银行嫌张大爷一个老头没什么值钱的东西抵押,怕他跑路,而且这么小额的贷款没什么搞头,不愿贷款。
隔壁老王看张大爷发愁,就想了个办法:
你看,你现在一天能有五百块收入,一个月的现金流就是一万五。要不这样吧,我明天就给你七万块,未来五个月赚的钱就直接打我卡上,也就是说现金流就归我了。
其实老王自己也没钱,但他找到了李二叔、宋三婶,说我找了个好项目,你们来投资,只要一次性把钱投给我,每个月都能返本金和利息。邻里们有些担心,说你又不是开银行的,怎么能保证按时还钱?老王说,别担心,张大爷每个月赚的钱都会给我,再说了,张大爷儿子在城里打工,每个月都往家里寄钱,就算张大爷赖账,大不了找他儿子要啊!
有人知道这个收益是要靠张大爷卖煎饼赚出来的,问万一煎饼不赚钱了咋办,张大爷自己出来说话了,你们投资的保证书啊,我也签⼀张,投资一万块,要是赔钱了,先从我这赔,优先保证还上你们的钱!
老王筹到了钱,给左邻右舍都写好了按月付收益的保证书。张大爷接过钱,高兴地买车去了,生意一天天红火下去,赚到的钱每月打给老王,老王又把钱转给拿了保证书的人,当然自己也雁过拔毛留了一小点。
Ø 这里煎饼摊产生的现金流,就是基础资产。
Ø 老王写的保证书,就是资产支持证券。
Ø 万一张大爷赖账,他儿子拿自己的钱出来抵债,叫外部增信。
Ø 张大爷自己也投一万块,煎饼不赚钱的话先从那一万块里亏,也就是自己持有了劣后级,其他投资者持有的是优先级,这一过程叫内部增信。
Ø 老王干的活,看着好像是空手套白狼一样,其实就是投行。
邻里们知道只要拿着保证书就可以每月收到钱,于是手头紧的时候就把保证书卖出去抵钱,这样一来证券就交易起来了。大抵如此。
所以,我们看到现实生活中的资产想通过证券化发行,需要投行这类的中心机构去整合多方资源,完成资产增信、资产登记、证券销售、资金托管、支付等功能。所以资产证券化是以一种中心化的方式去完成发行的,其业务过程复杂,且成本高。
因此,我们设想是否能将现实资产通过一种去中心化的共识规则,就类似区块链网络发行比特币一样,来实现多方参与者共识协作,最后将资产证券化呢,或者说解决资产上区块链的问题呢?
资产上链的创业机会
目前主流金融机构宣传较多的是利用区块链技术解决链上资产交易、支付等过程中降低成本的问题,而事实上,还并没有看到一个比较好的资产上链解决方案,而资产上链却是区块链作为价值传输网络最重要的一个环节。
我们认为以传统中心化的方式,去对接现实资产与链上资产,保证资产的一致性和真实性,并没有解决本质的问题,也无法发挥区块链技术带来的颠覆性革新。
我们需要的是一种去中心化的共识规则,来现实资产在区块链上发行。希望不久的将来,创业者们能找到完美的解决方案。
作者/李晨
互联网协议降低信息流通的成本,
区块链协议降低价值流通的成本。
信息?价值?我们先来看两个案例。
◎雅浦岛上的石头◎
在太平洋加罗林群岛中有个雅浦岛,岛上没有金属,于是那里的人们把巨石打磨成圆形,以此作为交换媒介,越大的石头越有价值。由于巨石搬动不便,岛民便用石头来做交易,交易方式看起来有些特别:首先,卖者把货物交给买者,然后,买者一指远远的巨石说“那块石头给你了”,最后,卖者在石头上做上记号,于是买卖就算成交了。
人类学家威廉•亨利•弗内斯曾在岛上呆过几个月,惊奇的发现岛上大家公认的首富家族在岛上实际拥有的石头并不多。于是四处打听得知,原来这家人曾经在某个盛产石头的岛上,采到了一块硕大的石头,但不幸在把巨石运回雅浦岛的途中遭遇风暴,众人只好砍断捆着巨石的缆绳,让其沉入海底。不过自那以后,岛上所有的人都承认,石头落入海底是个意外,巨石仍然归属当初发现它的家族。所以,虽然这块巨石躺在大洋底部一动不动,但它却在岸上媒介了几辈子的交易。
由此,我们看到一种价值的流动,需要三个基本条件:1.现实发生的事实(交易),2.所有人一起见证价值的流动——价值流动记录在公开的账簿上(巨石上的记号),3.公开账簿不可篡改。
◎黄金的提货券◎
第一次世界大战之前,美国财政部发行的每一张20美元面额的纸币上都会阐明,“持有人纸币的人可以要求换取20美元等价的金币”,也就是说最早的法币只是一张黄金的提货单,一张拥有黄金的所有权凭证,真正有价值的是黄金而不是那张提货单。类似人们可以在中秋节前拿月饼票换月饼。然而最终“提货单”演变成了法币,黄金和法币价值脱钩的故事那是后话了。
这里我想表达的是“提货单”的价值在于有一个权威机构站出来说:“大家可以拿提货单到我这里无条件兑换真正有价值的东西”,且大家都相信这个权威机构,这样黄金的价值转移到“提货单”上,这个过程就算成立了。
由此,我们看到一种价值的流动,需要的基础条件变成了:1.现实发生的事实(交易),2.权威主体见证价值的流动,3.所有人都信任权威主体(可信第三方)。
综上,两种价值流动的基础条件,区别在于信息流动的路径
(1)第一种,人们直接获取信息(所有人都可以看到巨石上的记号);
(2)第二种,人们通过权威来获取信息(央行赋予20美元拥有等价黄金的购买力)。
◎区块链的概念◎
在现实社会中人们往往通过权威来获取信息进而实现价值流动,因为直接获取、核查信息的成本太高,通过权威的背书有效的降低信息的流通成本。而随着互联网协议的出现,信息流动的成本越来越低,这使得价值流动通过直接获取信息的方式也能实现成为了可能。
2008年区块链协议应运而生,简单来说区块链就像是雅浦岛上的石头,是一个公开记录交易信息的账簿。更确切的说,区块链是一种分布式的共享账本系统。与央行清算中心等传统的中心化账本系统不同的是,区块链通过分布式的产权管理、集体自治、公开透明、不可更改和可追溯的方式来创造信任,发展信用,从而让价值交换过程中的摩擦系数降低,实现零边际成本。
因此,区块链满足了价值交换的唯一性要求,确保了不会发生双边消费,甚至是多边消费。保障了价值互联网时代的价值交易更方便快捷。
◎区块链协议的工作逻辑◎
根据前文讲的两个例子,我们知道价值流动有两种途径。现在假设我买了一套房子,我可以通过两个办法证明我拥有这项资产:(1)搞一个房产证,也就是现实生活中常用的方式,通过权威机构的认证来证明我对房产的所有权;(2)把我付钱买房这个事实,通过某一种技术,即时、真实、不可复制、不可篡改的同时展现给世界上所有人,这样就相当于所有人都见证了我的交易。
区块链协议就是通过类似上述例子中第二种原理来实现价值流动的,在区块链的网络中每个节点发生的交易都会被广播通知每一个参与节点并且被参与节点记录。由于不在需要权威机构作为信息中介,使得价值流动的成本将更低成本、更高效的实现。
◎区块链的作用◎
最后,回过头来我们谈一下区块链在这个互联网时代下的价值。我们知道互联网协议解决了我们传递信息的问题,任何人、任何时间、任何地点都可以直接来传递信息,但是信息的传递过程其实是一个被复制的过程。当我发给你一个信息的时候,你收到了一份,我这份也没消失,而且别忘了通讯服务商也偷偷留下了一份。
而当要实现价值传递的时候,要解决的问题是我发送信息给你以后,你收到了,但我这份就消失了,通讯服务商也别想偷偷copy一份。即实现一个权利的唯一转移,要实现这个转移,互联网协议做不到,区块链协议给出了一个解决方案——构建一种可信任的数据共享系统——公开账簿系统,所有人都可以通过该系统即时的查验数据传递的真实性。
这就是区块链的意义所在
一种高效、低成本的价值传递方式。
人工智能赛博物理操作系统
AI-CPS OS
“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。
AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。
领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:
重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?
重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?
重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?
AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:
精细:这种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。
智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。
高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。
不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。
边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。
AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:
创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;
对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;
人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。
给决策制定者和商业领袖的建议:
超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;
迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新
评估未来的知识和技能类型;
制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开
发过程中确定更加明晰的标准和最佳实践;
重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临
较高失业风险的人群;
开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。
如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!
新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。
产业智能官 AI-CPS
用“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能),在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
长按上方二维码关注微信公众号: AI-CPS,更多信息回复:
新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能驾驶”、“智能金融”、“智能城市”、“智能零售”;新模式:“案例分析”、“研究报告”、“商业模式”、“供应链金融”、“财富空间”。
点击“阅读原文”,访问AI-CPS OS官网
本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!
版权声明:由产业智能官(公众号ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com