2017年区块链技术发展取得重要进展,然而问题仍然存在。
以下是需要解决的问题。
数据——链上或链下
第一代区块链应用主要是比特币衍生品,并不在区块链上存储真实的加密货币数据。而是存储哈希值,也就是数字指纹。这些哈希值代表链上的数字资产。因此可以利用区块链追踪数字资产所有权,或者作为不可篡改的活动记录。此方法的优势是简单,可以保护隐私性,因为数据本身是链下的,网络节点并不能看到。缺陷是商业逻辑和数据许可不能在链上执行(除了加密货币或代币)。浪一个缺陷是数据必须存储在某个地方,这个地方就是弱点。如果某人做了不被允许的调整,我们只能通过对比链上与链下的哈希值,才知道数据有问题。比如比特币、和Factom。
第二个方法就是利用智能合约存储数据,直接在区块链中更新数据状态。可以把它看作“数据承包”。此法的缺陷之一是每个节点的容量要大,因为需要存储数据集变更历史。每个节点还需要执行智能合约。第二个缺陷是隐私性。如果每个节点存储所有数据,就可以看到所有数据,从而无法保证数据隐私性。这两个缺陷都可以克服,只要只在部分子节点共享。此方式的优点是,在去中心化解决方案中,可以实时在链上执行许可、潜在业务、工作逻辑、代币、资产转移。比如以太坊、超级账本(Hyperledger)Fabric、R3 Corda。
数据隐私性——加密或选择性共享
假设数据存储在链上,保护区块链数据隐私性的方法有两个。
私有数据加密
智能合约出售数据之前进行加密。如果数据在所有节点中共享,每个节点就将有一份加密数据副本,但是它们不一定持有解密数据的密钥。该方法的潜在问题是区块链数据是不可篡改的,可能保存数年。未来,尤其是量子计算成熟之后,今天的密码也许可以被破解;曾经保密的数据也许就会被所有节点看到。公有链也许更多这种问题的风险;因为这里没有管理或控制。而私有链中,只要所有节点采取数据迁移战略,就可以消除这个问题。采用加密保护数据隐私的项目有Hyperledger Fabric。
私有数据的选择性共享
数据存储在链上,但是只与参与交易的节点共享数据,或者公证人也可以。这可以解决数据隐私性问题,因为数据不与非参与方共享。还可以解决扩展性,每个节点不再需要存储整个链。此方式的潜在问题是没有统一的交易链、出处,不可篡改性受限于交易参与方的数量。比如如果两方参与交易,一位公证人参与。那么只有三个人收到数据及交易副本。如果这三方合谋将历史交易及数据转移,网络中无人可以发现,因为其他人没有记录。然而只要增加公证人的数量就可以避免。公证人的性质很重要。如果他们是独立的,没有合谋的可能(比如监管者),那么不可篡改性将很强。这个选择性共享方法目前是最受银行欢迎的。比如R3 Corda。
数据加密算法
如果我们将链上存储的数据加密,就很难去修改。
数据存储及执行许可
如果我们将商业逻辑写入智能合约,数据加密保存。每个执行及验证合约的节点将不可以如此处理加密数据,因为该过程中数据一直是加密的,节点没有可以解密的密钥。因此虽然每个节点需要执行智能合约逻辑,并不是每个节点都有解密数据的密钥。这可以限制智能合约只用于加密数据存储(没有商业逻辑)。InnovateUK支持开发了在合约中部署验证许可的逻辑,即使数据是加密的,参与方是匿名的。这样的例子有Applied Blockchain。
数据及全智能合约处理
可以通过将算力分配给链下参与者,进行链上加密数据处理,不会泄露数据内容。这项技术将数据处理流程分解成不可识别的块,并分配给不同的节点进行处理。每个节点没有足以理解数据内容的信息。其缺陷是节点可能会合谋将数据整合在一起。这种例子有麻省理工媒体实验室的(MIT Media Lab)Enigma项目。
零知识证明——ZK-SNARKS
目前加密技术最热话题是零知识证明。这是非常有限的算法功能,可以运用于完全加密的数据,适用于加密状态,因此可以在不暴露未加密数据的前提下进行验证。使得不同节点可以在智能合约中运行有限的计算,不向其他节点透露加密数据。该技术是游戏规则改变者,因为它可以用加密数据执行智能合约。类似比特币的ZCash目前是该方式的首个实践者。
交易匿名性
如果私钥用于交易签名,网络中每个人都可以检查某个密钥是否用于该交易,这意味着每个人都可以看到该密钥签名对应的交易量。在有主导参与方的交易中,也许可以根据交易量,更加直接地识别各方的密钥。
其解决方案之一是交易密钥。从核心私钥中生成不同密钥的发布机构(中心化,可能会有多个)。核心密钥与交易密钥的映射并不向其他参与者公开,只可以看到单个交易的密钥。这类案例有Hyperledger Fabric。
智能合约——有状态与无状态
无状态条件逻辑
比特币采用简单的智能合约。它更多的是为支付交易添加更多逻辑与条件的脚本范例,典型案例有多签名技术,执行交易的前提是提供多个签名。这种智能合约是无状态的,接受一系列输入,运行一些逻辑,因此交易可以存在执行与不执行两种选择。如果给一笔交易添加一系列无状态条款,这种模式将非常有用。其优势在于简单。缺陷是我们追踪的唯一状态或事件是账户之间的原生代币或资产。
无状态智能合约
更复杂的智能合同范例是以太坊中的(https://ethcore.io/parity.html),其中包含了状态。在这种情况下,智能合同还具有在链上存储数据的能力。每笔交易可以改变该数据,并且所得到的数据再次存储/冻结在链上。然后下一笔交易可以利用该数据,因为前一笔交易已将将数据冻结,数据将依此方式进行下一次调整。任何时候,我们可以遍历区块链,并且浏览以前的状态,看到每笔交易变化前后的数据。这个模型的优点是,我们可以将区块链作为数据库,其中区块链交易可以改变数据。只是这最后一点仍然很有争议。
有状态智能合约可以以不同的方式实现,例如状态数据可以存储在区块链自己的内部数据结构内,或者它可以存储在外部数据库中,其中每笔交易的初始和结束状态存储在链上。后一个选项可以维持状态完整性,同时允许我们直接访问数据。示例:R3 Corda(https://www.corda.net/)。
智能合约代码——加密或开源
以太坊(和比特币)被设计为公开开放链。由于我们不信任系统上的任何其他方,我们就必须信任系统,即代码。因此,代码必须向所有各方公开,无论是开源的底层区块链平台代码,还是向参与交易流程的各方公开的个别智能合约的代码。
私人智能合约源代码
在需要隐私的私人区块链部署中,该隐私性也可适用于数据,也可以应用于智能合约源代码。这意味着如果我在一个私有区块链网络中持有一个节点,即使我持有所有的智能合约和账本数据,一些智能合约源代码是加密的,因此我看不到也没有办法执行代码。这减少了证明合同按计划执行的参与方的数量,因为只有交易参与方可以解密智能合约,执行并验证它。示例:Hyperledger Fabric(https://hyperledger-fabric.readthedocs.io/en/latest/)。
代币——原生代币或智能合约中
区块链一开始是加密货币,它们现在已经发展成通用分布式数据库和状态机。顺便说一句,我个人认为,它最终会回到原点,因为我们今天看到的大多数非加密货币用例最终都需要某种形式的支付或代币交易方式,如果可以将其部署在链上,将非常非常有效率(无论是账本上的代币化法币形式,还是受监管的加密货币)。因此,我们许多人今天使用的公共区块链源代码包含了原生代币部署(例如比特币、以太坊中的以太币)。
如果我们开发一个包含代币的解决方案,例如用来表示法定货币或奖励、积分,我们可以选择使用平台的原生代币机制,或者我们可以使用智能合同创建自己的代币。以太坊甚至提供了智能合约代币标准(https://www.ethereum.org/token)。
如果平台具有原生加密货币,则使用平台中固有的原生货币机制的第一种方法实际上是结合使用公共代币平台(即以太网坊的以太币)。这是因为生成代币的机制绑定了加密货币激励方案(例如工作量证明、权益证明)。如果原生代币部署不绑定到加密货币机制,那么就应该进行研究。同样,诸如以太坊智能合约代币标准的非原生代币机制提供了很大的灵活性以及外部、第三方和开放钱包软件的支持。
来源与隐私
开放代币/资产
在加密货币代币平台中,原生代币通过区块链工作量证明创建。区块链保证每个代币历史的透明性,使得每个人可以看到其创建的时间及地点,以及哪些帐户已经转移过它。由此可以了解每个代币的来源,以便我们确保代币不是凭空出现,也不是双重花费的。然而,由于代币和资产的历史是对所有人是可见的,所以这样的解决方案没有隐私性。
私有代币/资产
在zCash(https://z.cash/)中,代笔交易完全加密,不会泄露给验证节点,因此我们保留隐私和匿名。这是使用零知识证明来实现的。该解决方案保证了代币不是凭空出现的,也不会双重花费,不会泄露交易中的帐户的任何信息,或代币的来源。
当隐私性否定来源
在法定货币银行系统中,现金由中央银行发行。对于在区块链上发行的法定货币,我们需要代币的完全透明和来源,以确定代币不是某人凭空捏造的,而是中央银行发行的,并且没有被双重花费。
然而,在法定货币区块链解决方案中,我们需要数据隐私性和匿名性(银行不希望公开其活动内容或客户数据),因此数据将需要加密或仅与交易参与方共享,可能还有一个或多个公证人。在任一种情况下,接收到这个代币并且希望验证其来源的任何人,将需要反复确认其来源,这就意味着完全公开该代币的完整历史。也就需要为该方提供解密或访问该代币相关历史信息的能力;每个交易的细节将需要与更多的人共享,而不仅仅是交易本身的参与方;或者需要在不泄露交易历史及参与方的前提下,提供来源证明。
这个问题适用于需要隐私性和来源证明的任何代币、资产或数据。
可扩展性
许多区块链解决方案需要存储大量的交易信息和数据,以及快速的交易信息吞吐量和性能。全功能的传统区块链堆栈在这方面的速度相对较慢。下面是提高可扩展性的三种可行方法:
大数据存储
一种创新的方法是将区块链流程划分为两个不同的层:复制和链接。可以跨越大型同步服务器群集的大数据存储已经实现了前者。共识算法,如RAFT(https://raft.github.io/)和Paxos有效地解决了这个问题。第二部分是链接。这可以添加在大数据存储群集之上以产生超快速和可扩展的链式数据库集群。一个例子是BigChainDB(https://www.bigchaindb.com/)。
选择性共享
默认情况下,区块链要求每个节点存储所有交易和数据的完整副本。这可能引起可扩展性的问题,特别是在需要大量交易和数据的用例中,或者将许多应用程序合并在链上的情形。如果交易和数据仅与交易各方以及可能一两个公证人共享,则每个节点存储的数据量就是整个网络中交易和数据的总量的一部分。这显然可以扩大网络的整体交易处理量。示例:R3 Corda(https://www.corda.net/)。
侧链/通道
一个非同一般的扩容方案是侧链。该方法集成多个链,其中一个或多个链被认为是主链,而其它链被认为是侧链(也称为通道)。该创意是主链速度更慢,因为它们要求大型参与者网络达成共识。同时,侧链提供较差的完整性和不可篡改性,并且共识范围更小,但是交易速度和体积将更大。可以通过定期以固定间隔排列,将这两种方案组合起来。示例:Lightning Network(闪电网络)(https://lightning.network/),Radien Network(雷霆网络)(http://raiden.network/)。
互联账本
经济、企业和监管要求使得大多数区块链项目在私有区块链网络上设计和实施。这在短期内是好的,很可能长期维持这样的方式。
只是这就引起关于账本互连性的问题。例如,如果同一个行业内有两个竞争性账本解决方案,可以解决同样的问题,这两个解决方案可以互连吗?或者一个组织使用不同技术平台和网络上的两个互补解决方案。或者如果一个非常强大的组织或集团将其所有的分布式帐本活动整合到单个技术平台上,并且强制其他人进入该平台上怎么办?不同的平台可以相互通信吗?
技术上看这是可能的。然而,其有效性和可取性就是另一回事了。
不过目前已经有一些新兴的技术解决方案在解决账本互连问题。
例如,瑞波(Ripple)的Interledger(https://interledger.org/)是一个用于账本代币交易的开放标准。它主要目的是允许其网络直接连接到其他区块链网络,使得有价代币可以通过网络进行交换。这确实解决了令代币的问题。然而,许多区块链解决方案不是基于代币的。例如,我们可能会使用区块链智能合同、存储数据、执行权限和业务规范等。这些更复杂的机制无法在不同的账本中相互连通。
EthCore最近发布了Polkadot(https://ethcore.io/press.html)白皮书,可以连接不同帐本法案的底层机制。这是一个有雄心的项目,因为如此的话,不同的分类帐本需要被按照其设定的可集成的反向设计。
该领域可探讨的争议和内容还很多。
转自:铅笔
网址:http://chainb.com/?P=Cont&id=3492