主题分享

1、 什么是区块链?

区块链本质上来说就是:一种基于加密技术的,利用P2P网络建立的可信网络,公共维护账本的一种方式。

1.1 区块链的关键技术

20180407_200729

1.2 名词解释

20180407_200806

20180407_200824

20180407_200904

1.3 区块链原理

(1)共识算法

20180407_200945

(2)区块

20180407_201009

(3)默克尔树

20180407_201029

20180407_201042

(4)钱包和秘钥

20180407_201056

1.4 区块链特征

1.5 区块链的分类

20180407_201121

2、区块链应用举——比特币

2.1 比特币来源及特征

20180407_201151

20180407_201214

2.2 以比特币为例谈区块链的开发要点

(1)比特币的区块链结构

20180407_201332

(2) 比特币结构之区块头

每个区块包含两个部分,区块头和区块体,其实大家可以理解为HTTP的报文,也有区块头也区块体,原理是相似的。

20180407_201624

这是比特币的区块头部分,字段、区块大小,版本,时间戳,这些都很容易理解。在区块打包中,你需要根据交易来来算merkle树,merkle树的过程如上图所示。把相邻的两个哈希合并成一个字符串,然后运算这个字符串的哈希,这样每两个哈希拼成,得到了一个“子哈希” 。

如果最底层的哈希总数是单数,那到最后必然出现一个单身哈希,这种情况就直接对它进行哈希运算,所以也能得到它的子哈希。

于是往上推,依然是一样的方式,可以得到数目更少的新一级哈希,最终必然形成一棵倒挂的树,到了树根的这个位置,这一代就剩下一个根哈希了,我们把它叫做 Merkle Root。

难度值是根据算法算出的全网算力得出的。我在写代码的时候也是直接使用中本聪的公式来算的。每生成2016个区块调整一次,每次调整不会超过4倍。也就是说,如果全网算力突然提高到假设16倍,那么他也只能先调到4倍,然后2016块之后再重新调整。算力减少也是一样,逆过程。这个难度用于哈希时0的个数和1的个数。

(3)比特币结构之交易

NONCE就是用于计算哈希,一般每次加1,看是否符合,如果不符合继续。如果所有的nonce都用完还是不符合要求,可以使用区块体的第一个交易的输入,因为这个是奖励交易,输入没有用。

20180407_202812

这个是每个交易的具体结构,钱包打包交易的时候也应该按这种结构打包给节点。

输入其实就是去找UTXO,看是否满足交易金额,如果不满足,继续寻找该地址下的UTXO,如果满足就执行转账,如果都寻找完了金额还是不符,就失败。

输出就是包含的交易量,输出脚本。输出脚本比特币包含两种,一种是输出到公钥,一种是输出到脚本,即为P2PKH 和P2SH

其实,以上内容未把交易过程写出来,包含两部分的过程,如果对这块感兴趣的可以细聊,就是使用如何解锁输入和如何用公钥和脚本组输出。

3、以太坊

20180407_204614

虽然比特币中也有脚本的概念(输入脚本和输出脚本)。但是由于其太简单,不具有图灵完备,所以一般不认为其是智能合约。

20180407_204645

GHOST协议就是让我们必须选择一个在其上完成计算最多的路径。一个方法确定路径就是使用最近一个区块(叶子区块)的区块号,区块号代表着当前路径上总的区块数(不包含创世纪区块)。区块号越大,路径就会越长,就说明越多的挖矿算力被消耗在此路径上以达到叶子区块。使用这种推理就可以允许我们赞同当前状态的权威版本。

20180407_204711

4、区块链基础技术架构

区块链可以分为这样的架构

20180407_204911

5、Q&A

Q:nonce随机,序列递增?

A:nonce在比特币和以太坊还不一样,比特币中是用于计算哈希,然后看计算出来的哈希是否与难度值匹配。以及根据选择的共识算法来。POW的比较常用,POS,DPOS,PBFT的就没有这个意义了。


Q:比如我有1个比特币,我有何凭证证明我有呢?需要用那个钱包?

A1:数字版唯一地址,私钥可以计算出数字币地址

A2: 证明你有比特币的话,会在所有UTXO中寻找,UTXO中会使用你的公钥的哈希值,也就是只有你能解锁这个。花费的时候只有你的私钥能解锁。

20180407_210004


Q:在现有的虚拟币交易平台,这些币又是如何和法币进行交换的呢? 或者说我支付了法币后,我怎么知道有有了相应的虚拟币呢?

A:你在交易所里面有一个账户,账户里面记录着你的币数量。如果没有提币或提现,就只是交易所里面的数字。提现的时候,会把相应的钱给你,提币会把币转到你的账户下面。现在的交易所一般都是中心的,交易所倒闭了,或被盗就。

Q:交易所怎么知道我有多少虚拟币呢? 他可以查询我urxo?

A:目前有一些声称区中心的交易所也只是交易记录过程是使用区块链,他去节点查询你的转账。钱包转账的时候会把交易转给就近节点,节点会用P2P网络传给所有节点。写入区块才有UTXO,有时候可能没有写入的。没有写入区块的话,是有风险的。有可能被“双花”,一般需要等待写入,并后面跟着子区块确认。但是这就跟使用外卡VISA的签名是一样的,据说区块链风险比这要小。

Q:我可以把交易的过程理解为: 如果我用法币买A的比特币,我先把法币划入平台的账户,平台【驱动】A把他的比特币转给我,当平台查询A的比特币转给我后,再把我的法币转给A么?

A:一般进交易所交易的时候,你是需要先把币转账给交易所的。应该是撮合交易成功的时候,交易所就把币转给你了,如果你提币的话。

Q:交易所的信用是怎么保证的。交易所是怎么让交易者安心的把币转给他的?

A:这个就看他怎么宣传的了,一般比较大的交易所比较安全,大家比较愿意去,交易所以他的中心化实力做背书。


Q:在讲钱包是说它负责管理公钥、私钥、地址和打包交易。这个地址是什么?类似账户主键?

A:地址就是公钥的哈希,用于在交易中放入交易输出中,他具有唯一性,可以在其它应用中作为主键使用


Q:我想问下,如果我自建一个私有链,一般是干啥使得啊,意义何在?我感觉这个是不会超发的电子货币,但是干啥用的其实我根本不懂,场景是什么?私有链我能理解为自己发行了一种货币,只在特定范围内使用的,和真实资金的汇率完全是自己定的,是这样吗?

A1:私有链一般用在银行或企业里面,比如可以用作农产品溯源

A2:公司或集团内不是否可以用私有链,不一定非要是货币,也可以是智能合约

Q:溯源是针对供应链的吧?

A:对的,个人智能合约才是关键。


Q:私有链与中心化的系统相比有啥优势?

A:就是数据不可改,建立一个可信网络,原来做溯源的时候,用二维码作为产品标识,但是在过程中需要有一个很强的主体,要不中间可能被换和更改,有了区块链,就可以不需要那么强大的中心了,参与者都按自己的角色围绕物流和信息流。我知道的一个项目好像是用在银行积分上。

Q:不太了解溯源,就是感觉在中心化的系统上利用pki机制就可以实现身份认证,搞个私有区块链成本有点高。

A:嗯,区块链能做的,中心都可以做的,而且效率还高。区块链我感觉更多在一些没有一个很强的中心实体的时候,这样大家都能彼此信任,要不互相之间其实很难完全相信。


Q:农行做了一个积分的区块链,和趣链合作的,交流后感觉也就是为了验证概念,然后鼓吹用。联盟链还是可以搞一搞的,私有链和公有链都感觉都比较难推动。

A:如果有一个很强大的实体,比如AT,他本身有很强的中心能力及背书,其实就没怎么需要。其次还得看应用场景。不同的场景需要不同的模式。


Q:如果我现在做私有链,后续如果想开放了,可以转成联盟链么?类似于跨平台积分兑换

A:应该是可以的,参与者扩大了。

Q:阳光保险有个类似的区块链积分系统。

A:不同实体之间的积分其实很适合用区块链来搞。


Q:区块链很适合用于跨主体积分应用场景,这个能以这个场景再展开讲讲嘛?

A1:跨主体积分应用场景可以有两种,联盟和公链,联盟链最可以照顾到大家的利益,公链相对公平和受信任,比较容易推广。但公链会有一个问题,就是如果产品包含的产值大了,需要考虑攻击,特别使用POW的情况下,很多矿池一运行,就超过51%了。

A2:跨主体的积分应用场景是不是意味着要搞联盟链,以某个企业为平台或者核心来稿,应该是现阶段的实现方式吧。

A3:联盟链最合适,其实中心化也能解决这个问题,比如以前的平安万里通,是需要对接万里通,把兑换规则确定。但使用联盟链更像方案二,所有平台统一一个积分,当然也可以不统一,联盟积分在更上层。区块链有个好处就是联盟内所有获取积分可追溯(跨平台)。核心还是得思考,相比现在中心化的优势在哪,其实中心不中心也是相对的

A4:积分还是联盟链比较好


Q:私有链发布后是接入以太坊的公网还是测试网?如果接入公网的话交易是需要消耗燃料

A:私有链发布,不需要接入公链。


Q:问下私有链搭建都是基于go的么?

A:其实都可以,java,go, C 都可以的,只是一种数据的封装方式。


Q:除了挖矿外,是否还有其他的记账机制?

A:从宏观层面来看貌似除了挖矿没有别的记账手段了,但是从算法优化层面来看,解决了大众挖矿效率低的问题

Q:这现在就有大问题。 哪些比特币的矿池,想要对其他币种发动51%攻击,就麻烦了。

A1:挖矿是为了鼓励大家参与贡献算力,减少算力集中造成的攻击。一般POW、POS、DPOS使用的这种方式。但是瑞波其实并没有挖矿的过程。

A2:POW是大众参与挖矿,POS是有钱人挖矿,DPOS是人大代表挖矿,如果节点够多,这51%很难实现(个人感觉)。


本文档来自支付产品技术交流群的聊天记录整理,由志愿者整理并发布到本网站。如需要及时收到来自支付产品技术交流群的最新消息,请扫码关注“凤凰牌老熊”的微信公众号。 本群面向支付行业的有经验(2年以上)的产品经理、软件工程师、架构师等,提供交流平台。如想加入本群,请在本文评论中留言(不公开),说明所在的公司、负责的工作、入群分享的主题和时间。