区块链技术(Blockchain technology)来源于笔名中本聪(Satoshi Nakamoto)在2008年发表的论文《比特币:一种点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)。在传统的具有中心节点的电子现金系统中,是由中心节点,比如银行、支付机构等,来验证电子现金是否被使用过,从而避免一币多付(又称双重支付)的问题。比特币是一种去中心化的点对点的网络,为解决一币多付的问题,中本聪提出了区块链的概念,顾名思义,区块链由区块组成,区块是一种数据结构,包括时间戳,交易记录,前一个区块的哈希值,通过这种机制,所有的区块连在一起,形成区块链。
图1 区块和区块链
简而言之,区块链是一种分布式的数据库,具有去中心化、不可篡改、可以追溯等特点,这些特点保证了区块链节点的“诚实”和“透明”,解决了信息不对称问题,实现了多个主体之间的信任协作和行动一致。为了方便理解区块和区块链的概念,可以参考如下简化的Python代码实现:
class Block:
def __init__(self, index, transactions, timestamp, previous_hash, nonce=0):
self.index = index
self.transactions = transactions
self.timestamp = timestamp
self.previous_hash = previous_hash
self.nonce = nonce def compute_hash(self):
block_string = json.dumps(self.__dict__, sort_keys=True) return sha256(block_string.encode()).hexdigest()class Blockchain:
difficulty = 2
def __init__(self):
self.unconfirmed_transactions = []
self.chain = [] def create_genesis_block(self):
genesis_block = Block(0, [], 0, "0")
genesis_block.hash = genesis_block.compute_hash()
self.chain.append(genesis_block) @property
def last_block(self):
return self.chain[-1] def add_block(self, blockCONTROL ENGINEERING China版权所有, proof):
previous_hash = self.last_block.hash if previous_hash != block.previous_hash: return False
if not Blockchain.is_valid_proof(blockCONTROL ENGINEERING China版权所有, proof): return False
block.hash = proof
self.chain.append(block) return True @staticmethod
def proof_of_work(block):
block.nonce = 0
computed_hash = block.compute_hash() while not computed_hash.startswith('0' * Blockchain.difficulty):
block.nonce += 1
computed_hash = block.compute_hash() return computed_hash def add_new_transaction(self, transaction):
self.unconfirmed_transactions.append(transaction) @classmethod
def is_valid_proof(cls, blockCONTROL ENGINEERING China版权所有, block_hash):
return (block_hash.startswith('0' * Blockchain.difficulty) and
block_hash == block.compute_hash())
由上述代码可见,计算当前区块的哈希值时,输入变量既包括当前区块的时间戳、交易记录等数据,也包括上一个区块的哈希值,如果攻击者修改区块链中的交易记录,比如区块1的交易记录,则区块1的哈希值会发生变化,因为区块2的数据结构包括区块1的哈希值,故区块2的哈希值也会发生变化,从而迫使攻击者重新计算区块2的哈希值,以此类推,余下区块的哈希值也需要重新计算,同时为增加攻击者计算哈希值的难度,区块链还使用了工作量证明(Proof of Work)算法,比如要求哈希值的前若干个字符是0。与此同时,在攻击者计算历史区块的哈希值时,还会不断有新的区块写入www.cechina.cn,除非攻击者掌握整个区块链网络中51%以上的算力,这种攻击从时间成本和收益成本来说www.cechina.cn,将会是毫无意义的。
比特币(数字加密货币的一种)是区块链技术的一种应用,二者之间的关系类似与汽车和内燃机/电动机,每一辆汽车都装备有内燃机或者电动机或者兼而有之,但内燃机/电动机不光用于汽车,还应用于火车、轮船、工程机械等设备。随着区块链技术的发展,其应用场景从数字货币逐渐向其他非金融领域扩展,比如公共服务领域、数字版权领域、保险领域、物联网和物流领域等。
区块链1.0:区块链用于数字货币
区块链2.0:区块链+智能合约用于金融领域(货币、股票、债券等)
区块链3.0:区块链用于非金融领域
区块链应用领域的扩展也改变了社会对于区块链等同于虚拟货币的固有认知,在监管机构对虚拟货币炒作和虚拟货币交易场所的打击态度没有丝毫改变的同时,也在积极鼓励区块链技术在非金融领域的发展,比如2019年10月24日,中共中央政治局就区块链技术发展现状和趋势进行第十八次集体学习控制工程网版权所有,会上中共中央总书记习近平指出“区块链技术的集成应用在新的技术革新和产业变革中起着重要作用。我们要把区块链作为核心技术自主创新的重要突破口,明确主攻方向,加大投入力度,着力攻克一批关键核心技术,加快推动区块链技术和产业创新发展……区块链技术应用已延伸到数字金融、物联网、智能制造、供应链管理、数字资产交易等多个领域。目前,全球主要国家都在加快布局区块链技术发展。我国在区块链领域拥有良好基础,要加快推动区块链技术和产业创新发展,积极推进区块链和经济社会融合发展。”
区块链技术具有的不可篡改、可以追溯等特点,可以和物联网技术具有的连接随手可及、计算无处不在等特点结合起来,以笔者在《如何从零开始搭建面向某一行业的物联网系统架构》一文中描述的案例为例,我们可以把某一产品拆分成若干产品单元,然后把产品单元的生产制造过程拆分成若干工艺单元,每一个工艺单元的实现由各种机械设备完成,比如生产设备、测试设备等,工艺单元和工艺单元之间的物料转运由各种自动化设备完成,比如机器人、AGV等,无论是机械还是设备,从物联网的视角看来都属于执行机构,传感器用于测量生产过程的各种状态并作为车间控制系统闭环控制的输入信号。
图2 产品制造过程和物联网
借助物联网,在某一产品单元生产完成后,可以生成该产品的关键信息,比如生产设备加工该产品时采用的工艺数据,测试设备对该产品进行质检后得到的量测数据,这些数据打包成消息(比如JSON格式)。随后该产品单元会经过物流系统流转到下一个地点,借助物联网,可以获得产品在运输过程中的关键信息,比如mRNA疫苗在运输途中的环境温度数据,这些数据也被打包成消息。在这种应用场景下CONTROL ENGINEERING China版权所有,消息即等同于上面提到的交易记录,区块的数据结构包括时间戳、消息、前一个区块的哈希值等数据,而消息一旦被节点发布,就不可能被修改,从而可以实现供应链端到端的全程监控,解决商品质量溯源、安全监管等问题。
图3 物联网和区块链
借助智能合约,在产品单元从生产方流转到需求方时,需求方通过获取产品到达前的消息即可以判断合约条款是否被满足(时间、日期、工艺数据、量测数据、环境数据等),若满足条款,则生产方和需求方之间的合约自动执行。这种方式避免了供应链中的每一个参与方单独建立一套产品追溯系统和相应的数据库,除了成本的增加,这种单独建立的数据库在开放性、协作性和认证性方面亦有所欠缺,而通过引入区块链技术,可以实现“优化业务流程、降低运营成本、提升协同效率、建设可信体系”等方面的作用。