以太坊架构汇总-深入分析思路非常清晰
发布于 2 个月前 作者 stvenyin 30441 次浏览 来自 以太坊
  • 这是实现的pos共识记账算法,哥念洋文 --呵呵

  • 生成一个Block

  • 既然要实现POS算法,那么就难免要生成一条链,链又是由一个个Block生成的,所以下面我们首先来看看如何生成Block,当然在前面的内容里面,关于如何生成Block,以及交易、UTXO等等都已经介绍过了。由于今天我们的核心是实现POS,所以关于Block的生成,我们就用最简单的实现方式,好让大家把目光聚焦在核心的内容上面。

  • 我们用三个方法来实现生成一个合法的区块

  • calculate_hash 计算区块的hash值

  • is_block_valid 校验区块是否合法

  • generate_block 生成一个区块

  • def generate_block(oldblock, bpm, address):

  • """
    
  • :param oldblock:
    
  • :param bpm:
    
  • :param address:
    
  • :return:
    
  • """
    
  • newblock = {
    
  •     "Index": oldblock["Index"] + 1,
    
  •     "BPM": bpm,
    
  •     "Timestamp": str(datetime.now()),
    
  •     "PrevHash": oldblock["Hash"],
    
  •     "Validator": address
    
  • }
    
  • newblock["Hash"] = calculate_hash(newblock)
    
  • return newblock
    
  • def calculate_hash(block):

  • record = "".join([
    
  •     str(block["Index"]),
    
  •     str(block["BPM"]),
    
  •     block["Timestamp"],
    
  •     block["PrevHash"]
    
  • ])
    
  • return sha256(record.encode()).hexdigest()
    
  • def is_block_valid(newblock, oldblock):

  • """
    
  • :param newblock:
    
  • :param oldblock:
    
  • :return:
    
  • """
    
  • if oldblock["Index"] + 1 != newblock["Index"]:
    
  •     return False
    
  • if oldblock["Hash"] != newblock["PrevHash"]:
    
  •     return False
    
  • if calculate_hash(newblock) != newblock["Hash"]:
    
  •     return False
    
  • return True
    
  • 关于巴比特网站的区块链技术详解PPT,通过以太坊讲区块链2.0架构,地址:http://www.8btc.com/p101871

  • image.png

  • 下图是中国工信部10月底发布的《中国区块链技术和应用发展白皮书》中描述的区块链2.0架构,做个对比,

  • image.png

  • 好巧合啊,我用以太坊为例子讲解区块链2.0架构,因此在智能合约层用了一个以太坊专有的术语EVM(以太坊虚拟机),严格的说,这个架构是以太坊的架构,难道工信部白皮书对于区块链2.0的架构也是专门针对以太坊写的么)

  • 智能合约外部数据交换问题,哈佛老师教育学生从不手把手告诉你,需要的是一般灵性的思考碰触。

  • 例如,按照农产品价格情况来支付投保人赔款的农产品价格险保单。传统IT人员一般认为是如下的流程:智能合约会在预定的时间,从期货交易场所获取农产品价格,然后按照获取的数据采取预设的行动。听起来很简单,但却不可能实现。为什么呢?因为这里存在两个问题,一是共识问题,二是受信任方问题。

  • 一、共识问题

  • 二、第三方数据信任问题

  • 前文提到的解决共识问题方法核心就是区块链被动接收数据,与外部的交互依赖于第三方,这个时候就会引入第二个问题,第三方如何信任?第三方如果在数据传输过程中私自篡改数据怎么办?如何审计第三方是否从正确的地址获取的数据?为解决可信问题,就需要引入Oracle,它不是甲骨文数据库公司,中文翻译为预言机。预言机是一种可信任的实体,它通过签名引入关于外部世界状态的信息,从而允许确定的智能合约对不确定的外部世界作出反应。预言机具有不可篡改、服务稳定、可审计等特点,并具有经济激励机制以保证运行的动力。目前来说,预言机有两种模型,一个是单一模型,另一个是多重模型,有时候多重模型又称为Oracle网络。

  • 单一模型只包含一个预言机,这一预言机是可信任的,它会正确地执行代码,合约的参与者能确信它不会与合约的某一参与方相勾结,单一模型类似于软件即服务提供者。对于大部分应用,单一模型已经就足够安全,并且经济实惠。目前一个单一模型的实例是Oraclize。(想问题想的比较深入),很多问题你都要想到

  • 预言机规则

  • 例:用户使用7/10模型,只有当等于大于7个智能预言机一致时,合同才能够执行。这一模型留出了3个缓冲,也许有的智能预言机离线,有问题或者被黑客攻击,只要不多于3个不影响合同代码的执行。多重模型比单一模型更加复杂,成本更加高,但是它提供了更好的安全保障。

  • 三、单一模型预言机运作方式

  • 单一模型预言机的一个典型实例是Oraclize,由于他的应用十分典型,本文以Oraclize为例进行讲解。

  • 1、Oraclize简介

  • Oraclize是一个独立的服务提供商,目前提供免费的数据输送服务,其目的是在区块链和互联网之间建立一道可信的数据网关,现在的很对技术瓶颈,百年难遇的机会,其目标是打破智能合约获取数据的束缚,在保证可信的情况下,使其具有访问互联网数据的能力。Oraclize不是想让智能合约的开发者信任这个组织,因为不论任何信任,都可以从技术上篡改数据,无法真正从技术保证安全,而是通过提供多种加密证明方法,构建可信的预言机。 Oraclize的运行状态如下图。 image.png

  • 多种区块链可以通过Oraclize有效的访问互联网API,保护其Dapp的安全性和健壮性,目前支持Ehtereum、Bitcoin、Rootstock、Eris四种区块链。用以太坊为例子,目前采用Solidity的智能合约只能存取访问链内的信息,而Oraclize作为一个数据传送者,可以在以太坊的DApps与Web APIs之间提供可靠连接,让基于智能合约的Dapp应用可信的地取得外部信息和数据。 运行原理如下image.png

数据源,类似今日系统行情源,不停的想,很多问题都要考虑 Oraclize在以太坊上部署了一个名为usingOraclize的智能合约,如果需要其数据访问服务,只需要在自己的智能合约中引用该智能合约,然后根据API文档中描述的方法进行相关的调用即可。如果某些组织利用以太坊技术搭建了自己的私有链或者联盟链,Oraclize在Github上提供数据服务的开源智能合约代码,通过自己部署后,一样可以像公有链一样调用。Oraclize提供了多种数据源服务器包括Url访问、数据搜索引擎、区块链内容数据、IPFS文件访问等等,其中Url访问和区块链内容数据提供了基于TLSNotary的可信证明技术,也是常见的数据访问需求。对于基于TLSNotary的可信证明可以根据用户的需求开启和关闭,因为虽然目前该服务是免费的,但是随着以后Oraclize的正式版发布以及推广期的结束,可信证明技术是需要更多的收费,用户可以基于成本考虑选择是否使用

TLS包含三个基本阶段:1.对等协商支援的密钥算法,2.基于私钥加密交换公钥、基于PKI证书的身份认证,3.基于公钥加密的保密数据传输。在整个传输中,TLS的master key可以分成三个部分:服务器方、受审核方和审核方。在整个流程中,互联网数据源作为服务器方,Oraclize作为受审核方,一个专门设计的,部署在亚马逊云上的开源实例作为审核方,每个人都可以通过这个审计方服务对Oraclize过去提供的数据进行审查和检验,以保证数据的完整性和安全性。

**五、多重模型预言机运作方式 多重模型预言机有多种例子,一般来说,这种成本较高,较复杂的预言机会应用在对信息可靠性要求较高,涉及价值比较大的领域,比如金融、博彩等。一个可靠的多重模型预言机,遵循博弈原理,有经济激励机制和惩罚措施,越多的节点参与,其真实性越高。当数据输入时,网络需要保证参与者节点无法知晓其他参与者的数据,然后各个节点将数据输入智能合约,智能合约对于价格等连续数据将选择最接近中位数的数据,如果是二元数据则统计得票最多的结果,最后对提供正确数据的节点进行奖励。与单一模型不同,多重模型需要面对女巫攻击(Sybil attack)和共谋攻击(collusion attack)。

这两个攻击本质上都是通过控制多个节点来伪造数据干扰最终结果,主要防范的方法,一是鼓励尽量多的节点参加数据反馈;二是让每个节点的权重尽量平均,防止某些节点权重过高,易于控制结果,三是提高节点的接入成本,比如需要一定的押金;四是需要有一定的激励和惩罚措施,以促使节点考虑自身利益不会撒谎。下面以某去中心化电竞平台项目为例,说明一下多重模型预言机实例。

某去中心化电竞平台是一个基于以太坊的去中心化应用,能够让电子竞技迷们可以通过一个去中心化的、自动化平台去参与他们喜欢的游戏,并能够利用手中的代币进行电子竞技。通过该平台,智能合约结合见证人系统和中心化的陪审团,使得某去中心化电竞平台可以不依赖可信的第三方来自动、可信的判定游戏胜负结果,从而根据游戏结果自动处理参与玩家的代币,如果有争议产生,需要更高级别的审查,那么内部陪审制度将被激活进行人工裁定。其用于比赛胜负自动判定的**

回到顶部