图片 10

3523 vip3522 vip

看好去中心化交易 Vitalik演讲备受瞩目,并且在下一篇文章中我们将开始研究区块链的分布式特性

13 8月 , 2019  

据上海证券报消息,华泰证券资产管理信息技术部负责人张铭锋日前表示,区块链的共识机制能确保信息在传输过程中的透明性、完整性和及时性,防止传统数据共享模式下的数据篡改。

图片 1

图片 2image

图片 3

过去的15天,我与大家分享了15个区块链的基础知识,包括拜占庭将军问题、价值转移、公有链、联盟链、UTXO、哈希算法、Merkle
树、PoW
、PoS、时间戳、区块的形成、智能合约、DAO组织、比特币…今天来总结分享区块链的交易流程,也建议大家去回顾一下以上的内容。

那些参与方众多、缺乏集中交易场所及信息共享机制的交易品种,如票据业务、衍生品交易等,都适用区块链。

最终内容请以原文为准:

最近研究区块链,从区块链起源比特币入手,有些许收获,整理成文分享给大家。文章着重讲解比特币交易系统,适合对比特币系统或区块链技术有一定了解的人群阅读。通过此文可了解比特币底层技术区块链的运作原理。因为大多数文章要么泛泛而谈区块链能去中心化、能防篡改、能追溯,可以改变行业改变世界,而不加以解释如何实现,要么只针对某一环节进行深度解析,缺乏整体的串联介绍,所以本文尝试进行有一定深度的整体介绍,希望能帮助大家理解比特币系统的实现。

2018年9月11日,万向区块链实验室主办、上海市虹口区人民政府指导的第四届区块链全球峰会在上海外滩W酒店拉开帷幕,EtherFlyer
CIO出席了本次盛会。会议第二天迎来高潮,以太坊创始人Vitalik
Buterin出席并发表了演讲。Vitalik
Buterin在本次演讲中多次提及去中心交易,这表明他对于去中心化交易一直非常看好。演讲主题为“区块链技术的新发展”,他的演讲简洁且在机制上的思考非常有深度,EtherFlyer为大家整理了完整的演讲翻译稿。

还是以比特币的交易为例。区块链的交易并不是通常意义上的一手交钱
一手交货,而是转账。如果每一笔转账都需要构造一笔交易数据会比较笨拙,为了使得价值易于组合与分割,比特币的交易被设计为可以纳入多个输入与输出。从生成到网络中传播,再到通过工作量证明、整个网络节点验证,最终记录到区块链,就是区块链交易的整个生命周期。

在这一系列文章的最开始部分,我们提到过区块链是一个分布式的数据库。那时候,我们决定跳过”分布式”这一环节,并且聚焦于”数据存储”这一环节。到目前为止,我们几乎实现了区块链的所有组成部分。在本篇文章中,我们将会涉及一些在前面的文章中所忽略的一些机制,并且在下一篇文章中我们将开始研究区块链的分布式特性。

中本聪在比特币白皮书中介绍说,比特币交易系统是一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另一方,中间不需要通过任何的金融机构(基于密码学原理而不基于信用)也能防止双重支付问题(double-spending)。该网络通过随机散列对全部交易加上时间戳(timestamps),将他们合并入一个不断延伸的基于随机散列的工作量证明(proof-of-work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。其实就是一串使用密码学方法相关联产生的数据块,每一个数据块中包含比特币交易信息,用于验证其信息的有效性和生成下一个区块。这个系统核心流程是比特币的产生与交易。

看好去中心化交易 Vitalik演讲备受瞩目

1、交易的生成

前面各个部分内容:

接下来将会对如何产生比特币,比特币如何交易,去中心化系统如何解决共识问题,数据为何不可篡改,如何追溯进行讲解(这些问题的答案在文中都会用下划线标出便于大家定位)。

图片 4

转账者A利用他的私钥对前一次交易和要转账的人B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作成交易单。

  1. 基本原型
  2. 工作量证明
  3. 持久化 & 命令行
  4. 交易
  5. 地址

文章主要分为三大块:一是比特币的产生;二是比特币的交易;三是附录,包含常见问题和涉及技术介绍,帮助大家理解文章。

以下为Vitalik Buterin演讲全文:

2、交易的传播

在 持久化 & 命令行
这篇文章中,我们研究了比特币核心存储区块的方式。当中我们提到过与区块相关的数据存储在
blocks 这个数据桶中,而交易数据则存储在 chainstate
这个数据桶中,让我们来回忆一下,chainstate 数据桶的数据结构:

整个挖矿流程如下:

区块链已经在一些行业运用了,我们都在讨论区块链机制,而机制这个概念已长期存在。现在人们对区块链的机制很感兴趣,当然,机制也包括非区块链的其他机制,两种机制是可以产生良好互动的。区块链的出现影响了现有机制,所以我们来看一下区块链会怎么与机制相结合。机制有很多种,大多是我们共同参与到事件中,由不同人做出决策,但这个决策会影响利益分配。

A将交易单广播至全网,每个节点都将收到的交易信息纳入到一个区块中。

  • ‘c’ + 32-byte transaction hash -> unspent transaction output
    record for that transaction

    某笔交易的UTXO记录

  • 检索待确认交易内存池,选择包含进区块的交易。中本聪创造的创世区块并无交易打包,所以挖的是空块。因为每一个区块都有容量限制,后人挖矿一般会根据手续费对待确认交易集进行排序,由高到低进行打包,尽可能使得每次挖矿的收益最大;(挖矿除了比特币奖励外还有交易确认记录的手续费)

  • 构造Coinbase,确定打包交易集,统计手续费等信息;

  • 构造HashMerkleRoot,对所有交易构造Merkle数;

  • 填充其他字段,获得完整区块头;(步骤234如果不懂没关系,看完全文再回头看就好理解了)

  • 对区块头进行SHA256D运算(两次SHA256计算)(详见下文,建议先看看附录一的哈希运算,有助于理解);

  • 验证结果,如果符合难度,则广播全网,全网验证通过则所有节点一起记录,不符合改变参数继续计算并验证;(共识机制其实就是此算法及其验证过程,无中心却人人认可;比特币产自哪个节点完全看算力看运气;每个节点都拥有所有交易记录信息)

图片 5

3、工作量证明

上述过程最重要的就是哈希计算,过程如下:

比如总统票选,区块链投票,企业内部投票,还有买卖、市场、交易所,交易所当然包含去中心化交易所,去中心化交易所一直是个热点。以太坊的域名业务也是一种机制,而里面包含了不同的机制。就像我刚才说的,很多人开始对机制设计感兴趣,希望将其在社会中进行广泛运用。再过去的几十年里,人们一直在思考更科学的机制和管理。

每个节点通过相当于解一道数学题的工作量证明机制,从而获得创建区块的权利,并争取得到数字货币的奖励。

  • ‘B’ -> 32-byte block hash: the block hash up to which the
    database represents the unspent transaction outputs

    数据库所表示的UTXO的区块Hash

  • 通过Sha256D(version+hashPrevBlock+hashMerkleRoot+nTime+nBits+nonce)(这几个字段见表2区块头结构)得到64位的十六进制或者256位的二进制哈希值;

这些机制用于分配利益,提供了奖惩,用以实现社会公平,调和各种行为。如今,我们希望可以用技术和机制,去实现这样的公平。例如投票,有一种投票方式叫“乘积投票”,是现有投票机制的变体。对于“乘积投票”,大家可以用币买选票,且无限制。个人的力量是优先的,如果仅凭他们,这样的项目很难实现。于是我们会建立一些机制,依靠政府、企业和机构,去实现这种没有限制的利益分配机制。

4、整个网络节点验证

从那篇文章开始,我们已经实现了比特币的交易机制,但是我们还没有用到
chainstate
数据桶去存储我们的交易输出。所以,这将是我们现在要去做的事情。

图片 6image

图片 7

当一个节点找到解时,他就向全网广播该区块记录的所有盖了时间戳的交易,并由全网其他节点核对。

chainstate 不会去存储交易数据。相反,它存储的是 UTXO
集,也就是未被花费的交易输出集合。除此之外,它还存储了”数据库所表示的UTXO的区块Hash”,我们这里先暂且忽略这一点,因为我们还没有用到区块高度(这一点我们会在后面的文章进行实现)。

表1:区块结构(区块头信息见表2和交易详情结构见表3表4)

一些项目,会从政府、慈善机构获得资金,这样我们可以想一下如何用这种无限制的方法进行分配。通过我们的机制,用一些特殊的公式,对捐款进行分配。哈伯格税(可在《激进市场》中详细了解)在市场和交易所的方式,可以优化这些场景,拍卖也是如此,特别是高频拍卖。金融市场也有这种问题,因为其中心化,不同的参与者会产生或取消订单,而这会带来问题。如果人们花很多钱进行交易,我们希望通过机制以减少撤单的行为。这能节约很多资源,每年都很多钱莱菲在这上面,而高频拍卖能解决这个问题。也有其他的新方式,比如组合拍卖,组合两种或以上的资产让拍卖变得更高效。还有就是自动做市商,这些新的理念,都是在与区块链相关的领域提出来的。区块链能解决这些问题吗?

5、记录到区块链

那么,我们为什么需要 UTXO 池呢?

图片 8image

图片 9

全网其他节点核对该区块记账的正确性,没有错误后他们将在该合法区块之后竞争下一个区块,这样就形成了一个合法记账的区块链。

一起来看一下我们前面实现的 findUnspentTransactions 方法:

表2:区块头结构

所以我要说一个概念,机制的可信性。大家都非常关注机制在实施后,他的可信度如何。这种机制,比如在交易所,拍卖商或者投票等,我们面临的问题是你必须信赖中间人,用以确保机制的有效性、公平性。而现有的机制不完善,中间人有可能作假,这就带来了信任危机。在机制上,这都是基于中心化的,而中心处理者会有很多机会作假,作假之后我们也不知情,这就是机制的可信度。

————————

 /** * 查找钱包地址对应的所有未花费的交易 * * @param pubKeyHash 钱包公钥Hash * @return */ private Transaction[] findUnspentTransactions(byte[] pubKeyHash) throws Exception { Map<String, int[]> allSpentTXOs = this.getAllSpentTXOs(pubKeyHash); Transaction[] unspentTxs = {}; // 再次遍历所有区块中的交易输出 for (BlockchainIterator blockchainIterator = this.getBlockchainIterator(); blockchainIterator.hashNext { Block block = blockchainIterator.next(); for (Transaction transaction : block.getTransactions { String txId = Hex.encodeHexString(transaction.getTxId; int[] spentOutIndexArray = allSpentTXOs.get; for (int outIndex = 0; outIndex < transaction.getOutputs().length; outIndex++) { if (spentOutIndexArray != null && ArrayUtils.contains(spentOutIndexArray, outIndex)) { continue; } // 保存不存在 allSpentTXOs 中的交易 if (transaction.getOutputs()[outIndex].isLockedWithKey(pubKeyHash)) { unspentTxs = ArrayUtils.add(unspentTxs, transaction); } } } } return unspentTxs; }
  • 将结果哈希值与目标哈希值进行比较,如果当前nonce值计算的哈希值小,那么挖矿成功,否则,挖矿失败,旷工需要更改nonce值再试,直到成功;–以上其实就是工作量证明机制(Proof-of-Work),解决了共识问题。

图片 10

来自硅谷live晓杰

该方法是用来查找钱包地址对应的包含未花费交易输出的交易信息。由于交易信息是存储在区块当中,所以我们现有的做法是遍历区块链中的每个区块,然后遍历每个区块中的交易信息,再然后遍历每个交易中的交易输出,并检查交易输出是否被相应的钱包地址所锁定,效率非常低下。截止2018年3月29号,比特币中有
515698 个区块,并且这些数据占据了140+Gb
的磁盘空间。这也就意味着一个人必须运行全节点(下载所有的区块数据)才能验证交易信息。此外,验证交易信息需要遍历所有的区块。

其中,

近期而言,区块链机制的应用主要出现在以下三个方面,我所说的是区块链机制的制定。因为区块链可以对新经济技术进行验证,比如把它用在去中心化交易所,或用在公众融资,社会资源与信息的整合,还可以用于虚拟物业。比如app中的广告,很多新的模式可以结合区块链,因为在这样的机制下,销售收入可以增加,从而提高积极性,其中的核心问题就是机制可信度。


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图