APP推广合作
联系“鸟哥笔记小乔”
进阶篇:带你真正从0~1认识区块链、比特币和侧链技术
2018-02-04 17:10:46

这是司马特小分队第12篇原创文章


上篇文章的效果出乎我的意料,看了下后台数据自然转发人数有60人之多(基础篇点此进入),阅读量也有700多还可以,当然跟大号还是没法比。凡事预则立,不预则废~欢迎大家多多关注,么么哒~


——比特币进阶篇——


1.1、在比特币世界中一定要重点讲一下“矿工”——这个在虚拟币世界中很神奇的角色。

我们在上一篇中大致介绍了矿工的工作内容,这里做一些补充:

矿工在比特币中扮演着举足轻重的地方,因为这套系统要想运作下去,要想有人记账、要想不断生成区块,就必须需要矿工。从创世区块(第一个区块)的第一阶段规定每个区块产生50个新的比特币用于奖励矿工的记账行为。此奖励每四年减半一次,经过长年累月后最终通过挖矿获得的比特币将无限趋近于0。最终比特币总量约为2100万。另外矿工必须依照一个原则:那就是一旦有新的区块广播了,必须停下手上的采矿行为,开始以新区块为父区块计算下一个区块了。


可以看到比特币挖矿是一个利益驱动的行为,利益越高的交易,节点会优先把这笔交易纳入到最新的区块中,矿工会优先记录他。这符合了市场追逐利益的本质

 

另外关于比特币的区块还需要做如下解释:

比特币区块大小限制目前为1MB,区块头是80字节,平均每笔交易至少是250字节,1M空间差不多能写入4096笔交易按平均十分钟生成一个区块每秒交易上限约为7笔。


那么为什么要限定区块大小呢?

比特币中的限定,包含区块大小、区块生成时间均为了降低并发性,以减少数据冲突或错误的可能性。在比特币建立初期,受限于网络、存储空间、处理器速度等问题,将区块大小先定位1MB。目前大多数区块仍达不到限定容积。但随着时间推移,交易量增加,而挖矿奖励减少,矿工不得不通过讲更多交易融入一个区块中以获取更多手续费时,区块容积不足的问题将凸显出来。而区块的增加导致广播(新区块传输至全网)时间延长,这将造成矿工在无效、废弃区块上消耗的能源增加。而当矿工挖矿收益不足以支撑能源消耗后,挖矿行为将大幅度减少。而用户为了保证交易尽快确认,不得不提高手续费,导致交易成本增加。因此是否增加区块大小仍在争论中~当然区块大小增加很直观的一个问题就是下载数据的时间大大增加


1.2、比特币的交易:

在比特币世界中因为没有中心化机构进行账本记录,所以其实你是不知道余额,交易时必须要验证是否有足够余额可供支出、是否存在双花、脚本能否通过等等,通常由运行节点的矿工来完成。


中心化的账本管理以支付宝为例,比如支付宝存储了我的余额100,我要花50,只要支付宝判断下我的账户余额有没有50元,加上我的授权,就可以直接支付了。但是在这里,必须要做到每笔交易都可溯源,为什么?因为没有一个所谓的账户中心来记录你有多少余额,是不是有足够多的钱可进行交易,只能通过你的历史交易来计算是否满足交易条件。这个过程需要遍历完整的区块链数据才行。


说到比特币交易,这里必须要讲一个概念:“非对称公私钥”。

每个人都有2个密钥,一个“私钥”由系统自动生成的;然后通过“私钥”生成对应的唯一“公钥”。公钥是公开的,而私钥只有自己手里有。一个账户用公钥加密后只能通过自己的私钥进行解密。当然由于私钥转化成公钥是不可逆的,所以公钥是无法反推出私钥的。


可能你很好奇这个原理:

举个很简单的例子:比如A随机生成2个质数(147、343),组合成一个6位数的私钥“147343”,公钥则是2个数相乘147*343=50421,当A只想让某个数据只能被B修改时,他可以在这个数据后加上公钥“50421”,并声明只有私钥左三位乘以右三位等于公钥时,才可以修改这个数据。如果是一个黑客,那只能采用枚举法进行不断的尝试,当这个规则足够复杂的时候,其实是很难破解的,因此可以说只有B拿到A的公钥才能解开,保证了安全性。


而在比特币系统里,则是将一个人的公钥作为他的收款账号(或者是地址)。于是我们模拟这样一个场景,A把5个比特币转给B,他只要输入附带上B的公钥,那么系统会自动帮你把这笔“币”用B的公钥锁定,这样这笔“币”就默认属于B了,但是可能是锁定状态无法使用。只有当B用自己的私钥解开后,这笔“币”也算真正划拨到B的收款账户(地址)上,B才能使用。

所以简单理解来说,私钥就相当于你的账户密码,只有你有权限解开和移动比特币。它保证了交易的安全性。


1.3、比特币钱包:

比特币钱包中存放的是一张张有面值的“一次性支票”(未花费的交易输出UTXO)和对应的“印章”(私钥)


每笔交易都有若干个Tx_in(交易输入)和Tx_out(交易输出)

交易输入:说白了就是资金来源,一种是挖矿奖励,出现在每个区块的第一笔交易中;另一种是之前交易给自己的还没有使用的资金,而它本质上也是上一个交易的输出;

交易输出:就是资金去向,一种是已经交易出去的金额;另一种已经在另一个人名下,但是他还没使用,或者说还在冻结状态的资金。本质上这两者都不属于你了,你已经没有支配权了。


用户钱包中的比特币实际上是用户拥有支配权的、且尚未花费的Tx_out中记录的金额总和,即用户可支配的所有UTXO金额之和。完整的钱包中应存有若干个UTXO和支配每个UTXO时所对应的私钥。


当一个用户安装了第三方的钱包后,下载全网所有比特币区块数据,然后在本地存储所有的UTXO,然后就可以开心地在钱包里查询自己地址下的UTXO数据啦。


——————

聪明的你于是又提出了一个问题,怎么在钱包下载数据的时候保证数据的准确性和完整性,或者说验证某笔交易是否真实存在?


因为下载数据的时候都是从周边节点下载的,但是可能存在周边节点数据不准确的情况,或者在下载过程**现数据丢失,从而导致下载后的数据是不准确的。

这个时候就需要去验证数据准确性了。


我们知道验证某笔交易的有效性或者数据的准确性,其实就是验证那笔交易是否已经收录于有效区块链中,并得到了6次确认。


那么最最常规的方法:我们可以通过下载全部数据(区块体中包含了所有交易数据),然后和可信链路上的数据进行一一比对,来确保某一笔交易的准确性。

但是很显然,下载一个几十G的数据包实在是太浪费时间和空间了,况且一旦出错,又得重新下载一次全部数据。我觉得是个人应该都会疯~


针对这个问题,聪明的聪老师采用了更为“优美”的SPV验证。

那么什么是SPV验证呢?SPV又叫简单支付验证。它不需要下载所有数据,只需要保存所有区块头数据就可以验证某笔交易了。那么这到底是怎么实现的呢?


说到SPV就要讲到Merkle树了,因为SPV验证离不开Merkle树。


我们前面有张图区块头里包含了Merkle根(说白了就是个哈希值,见上图),Merkle根哈希是怎么算出来的?


在点对点网络数据传输时,会从多个节点上下载数据,如果每次都下载所有数据,那么就太耗资源了,更好的方式是把所有数据拆分成一小块一小块数据。这样的好处是,如果小块数据在传输过程中损坏了,那么只要重新下载这一小块数据就行了,不用重新下载整个文件。


接着我们对每个小数据块做哈希(或者叫SPV节点),然后把相邻2个小块数据的Hash值拼到一起,然后对这个长字符串在作一次Hash运算,不断地组合、哈希进行递归,最后得到整个树的根Hash(Top Hash or Root Hash)


那么回到主问题“怎么验证某笔交易是否真实存在?”

聪明的你肯定能想到:很简单啊,先从可信数据源(最长主链)得到该笔交易所在区块的Merkle根哈希,然后跟下载下来的Merkle根哈希进行比较,如果一致,那么就说明所有数据都是准确的。


那么怎么定位这笔交易在哪个区块中?

比特币提供了一种叫做布隆过滤器(Bloom filter)的功能,节点会在通信链路上建立一个这样的过滤器,限制只接受含有目标地址的交易,从而能过滤掉大量不相关的数据,减少客户端不必要的下载量。比如,SPV节点会收到少于1KB的有关区块头和Merkle路径的数据,其数据量只约占一个完整区块(目前大约1MB)的千分之一。根据该交易的hash和某个区块的Merkle路径上的数据进行比对,就能知道是否在该区块中。


那么假如根hash不一致呢?下载下来的数据到底哪里出问题了呢?

比如:8对应的数据被人篡改,通过Merkle Tree很容易定位找到问题在8处,因为哈希树可以通过一条分支1—2—4—8的哈希值的比对验证来定位。



——区块链的延伸及发展——


其实现在的比特币都属于公有链,即只要有一台矿机,谁都可以加入其中。于是乎就有人想针对某个群体、某类组织内部建立一套区块链系统,不对外开放~


2.1、联盟链:区块链受预选节点(特定机构/人)控制,预选节点打包区块后,获得超过半数的节点认可即可确认,允许某个人或固定参与者可读取。


联盟链的优势和劣势:

(1)节点减少后可以有效减少分叉产生的可能性。在节点大幅度减少的情况下,生成区块的时间可以大大缩短。

(2)预选节点可以减少公众对于区块链的控制权,从而使得区块链可以更好的为各种应用服务。


当然很明显,它也有自己的缺点,那就是失去了真正的中心化记账,由于其有限的节点,很可能出现超过50%以上节点窜通后篡改数据,而失去了公正性。


马特查询了下联盟链的应用案例,发现马爸爸早已开始布局了。

阿里巴巴打造了透明可追溯的跨境商品供应链,即为每个跨境跨境商品生成一条特定联盟链。商品生产厂商、商品检测机构、境外海关、境内海关、物流公司等作为预选节点。用户可通过开放API查询商品从生成到送达的全过程。


2.2、私有链:写入权限完全掌握在一个组织手中的区块链。读取权限或开放或进行限制.


随着比特币、以太币、以及各种山寨币的横空出世,投资者手头上就开始囤积各种类型的币了,就好像既买了美元,又买了人名币,毫无疑问美元和人民币之间的兑换需求随之而来。但是两种不同的代币就像2个完全不同的系统,都是独立运行的,怎么实现币币交易呢?


2.3、于是出现了侧链(Sidechains)技术,我们先来了解下侧链的概念:

侧链是一种特殊的区块链。它使用一种叫做“SPV 楔入”的技术实现与其他区块链之间的资产转移,这使得用户能用已有的资产来使用新的加密货币系统。并且由于侧链是一个独立的、隔离的系统,侧链**现的严重问题只会影响侧链本身,这极大地降低了创新的风险和成本。目前,侧链技术主要是由Blockstream公司负责开发。


侧链只要理解它的2个要素就可以了:

(1)侧链是独立于主链的存在侧链中的交易不影响主链,主链中的交易也不影响侧链。

(2)实现双向锚定。什么意思?

举个简单的例子:比特币(主链)的持有者A发起一笔交易给B,如果B又是以太坊(侧链)的一个节点(B的地址包含比特币系统的地址和侧链以太坊的地址,两者是互相映射的),那么按照我们前面讲的,A 交易给B 5个比特币后先被锁定,同时侧链会产生一个输入来源为主链的交易,B在侧链的地址上会按照对应的比例(假如比例是5:8)解锁8个以太币,说白了B的资产从主链的地址上转移到了侧链的地址上。


这时作为交换,假如B要把8个以太币给A。

我们知道主链比特币上是无法创建和流通比特币以外的其他币的,所以理论上B只能把8个以太币在侧链上转移到A的侧链的地址上,然后A的8个以太币被锁定,同时主链会产生一个输入来源为侧链的交易,A在主链上之前锁定的5个比特币就解锁了,A可以在主链上转移这5个比特币了。

这就是双向锚定。主链锚定侧链,侧链锚定主链。

但是这里需要说明一点:侧链一旦出现安全事故导致解开比特币的私钥遗失,那么这个比特币也就无法找回了。


侧链技术进一步扩展了区块链技术的应用范围和创新空间,使传统区块链可以支持多种资产类型,以及小微支付、智能合约、安全处理机制、真实世界财产注册等,并可以增强区块链的隐私保护。


那么它目前有相应的应用吗?

以火币网(一个比特币和代币的交易中心,类似上海证券交易所)为例,要完成币币交易,需要比特币钱包中的BTC转到火币网的BTC地址上,然后通过火币网进行交易,这里火币网的角色其实是帮你代为保管比特币、资金,同时保证交易安全性的第三方机构。


一般来说在火币网这种虚拟币交易平台上,一个卖家想要出售比特币,那么他必须先把BTC打到火币网的地址上,然后买家在平台上针对这个出售单进行购买,钱直接打给该卖家,卖家收到钱后进行确认,然后平台会把该币转移给买家。

那么火币网是怎么实现币币交易这个过程的,这里有两种方式供大家参考:

1、火币网在各个币种的区块链上开一个节点,通过哈希锁定实现币币交易

2、火币网自己开一条侧链,然后在侧链中根据多条主链的要求自行进行交易

大家可以自行脑补结合下前面的知识点,思考这两个方式。


2.4、中继链(relays):在A.B两个链中,存在第三方数据结构C,那么这个C就是A和B的中继,如果C也是区块链结构,那么就称relay-chain。实现方式为:当检测到A链中发生了某个事件,或者在特定时间内,A链中的某个对象包含了一个特定值,将在B链执行某个智能合约。假设进行比特币和以太币交易时,设定在某个X时间内,比特币主链中确认了这笔交易,则通过中继链,将在以太币链中执行交易。

简单来说中继链和侧链差不多~


2.5、哈希锁定(Hash-locking):A和B进行比特币和以太币交易。A随机生成一个数值,经过hash计算后发送给B。A和B都遵守以下智能合约来锁定他们的资产(A先锁定,B在A锁定成功后锁定):设定一个时间X,对于A的资产,如果有人能在2X时间内猜出这个随机数值,那么资产将被转移到B,否则将返还给A;对于B的资产,如果有人能在X时间内猜出这个随机数值,那么资产将被转移给A,否则将返还给B。此时,A在X时间内将这个随机数值提供给B,以确保B的资产能转移给A,在这个过程中,就确保了B知道这个随机数值,那么B就可以提供这个随机数值给A,在2X时间内获得A转移给B的资产。

哈希锁定的本质是在私钥的基础再加一层锁,保证交易的公正性。


进阶篇的内容基本上讲到这里也差不多了。下一篇我们将选择1~2个行业和领域,深度解析到底该如何应用区块链技术,怎么改变现有的痛点,以及怎样实现商业价值。尽请期待~


没看过基础篇的小伙伴点此进入


参考文献:

1、chehw的《SPV、SPV节点和SPV钱包》

2、zerok775《Merkle Tree算法详解》


司马特小分队
分享到朋友圈
收藏
收藏
评分

综合评分:

我的评分
Xinstall 15天会员特权
Xinstall是专业的数据分析服务商,帮企业追踪渠道安装来源、裂变拉新统计、广告流量指导等,广泛应用于广告效果统计、APP地推与CPS/CPA归属统计等方面。
20羽毛
立即兑换
一书一课30天会员体验卡
领30天VIP会员,110+门职场大课,250+本精读好书免费学!助你提升职场力!
20羽毛
立即兑换
顺丰同城急送全国通用20元优惠券
顺丰同城急送是顺丰推出的平均1小时送全城的即时快送服务,专业安全,准时送达!
30羽毛
立即兑换
司马特小分队
司马特小分队
发表文章205
4 位志同道合的资深产品经理打造,希望能把经历和经验分享给更多的产品经理,助力更多产品经理成长
确认要消耗 羽毛购买
进阶篇:带你真正从0~1认识区块链、比特币和侧链技术吗?
考虑一下
很遗憾,羽毛不足
我知道了

我们致力于提供一个高质量内容的交流平台。为落实国家互联网信息办公室“依法管网、依法办网、依法上网”的要求,为完善跟帖评论自律管理,为了保护用户创造的内容、维护开放、真实、专业的平台氛围,我们团队将依据本公约中的条款对注册用户和发布在本平台的内容进行管理。平台鼓励用户创作、发布优质内容,同时也将采取必要措施管理违法、侵权或有其他不良影响的网络信息。


一、根据《网络信息内容生态治理规定》《中华人民共和国未成年人保护法》等法律法规,对以下违法、不良信息或存在危害的行为进行处理。
1. 违反法律法规的信息,主要表现为:
    1)反对宪法所确定的基本原则;
    2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一,损害国家荣誉和利益;
    3)侮辱、滥用英烈形象,歪曲、丑化、亵渎、否定英雄烈士事迹和精神,以侮辱、诽谤或者其他方式侵害英雄烈士的姓名、肖像、名誉、荣誉;
    4)宣扬恐怖主义、极端主义或者煽动实施恐怖活动、极端主义活动;
    5)煽动民族仇恨、民族歧视,破坏民族团结;
    6)破坏国家宗教政策,宣扬邪教和封建迷信;
    7)散布谣言,扰乱社会秩序,破坏社会稳定;
    8)宣扬淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪;
    9)煽动非法集会、结社、游行、示威、聚众扰乱社会秩序;
    10)侮辱或者诽谤他人,侵害他人名誉、隐私和其他合法权益;
    11)通过网络以文字、图片、音视频等形式,对未成年人实施侮辱、诽谤、威胁或者恶意损害未成年人形象进行网络欺凌的;
    12)危害未成年人身心健康的;
    13)含有法律、行政法规禁止的其他内容;


2. 不友善:不尊重用户及其所贡献内容的信息或行为。主要表现为:
    1)轻蔑:贬低、轻视他人及其劳动成果;
    2)诽谤:捏造、散布虚假事实,损害他人名誉;
    3)嘲讽:以比喻、夸张、侮辱性的手法对他人或其行为进行揭露或描述,以此来激怒他人;
    4)挑衅:以不友好的方式激怒他人,意图使对方对自己的言论作出回应,蓄意制造事端;
    5)羞辱:贬低他人的能力、行为、生理或身份特征,让对方难堪;
    6)谩骂:以不文明的语言对他人进行负面评价;
    7)歧视:煽动人群歧视、地域歧视等,针对他人的民族、种族、宗教、性取向、性别、年龄、地域、生理特征等身份或者归类的攻击;
    8)威胁:许诺以不良的后果来迫使他人服从自己的意志;


3. 发布垃圾广告信息:以推广曝光为目的,发布影响用户体验、扰乱本网站秩序的内容,或进行相关行为。主要表现为:
    1)多次发布包含售卖产品、提供服务、宣传推广内容的垃圾广告。包括但不限于以下几种形式:
    2)单个帐号多次发布包含垃圾广告的内容;
    3)多个广告帐号互相配合发布、传播包含垃圾广告的内容;
    4)多次发布包含欺骗性外链的内容,如未注明的淘宝客链接、跳转网站等,诱骗用户点击链接
    5)发布大量包含推广链接、产品、品牌等内容获取搜索引擎中的不正当曝光;
    6)购买或出售帐号之间虚假地互动,发布干扰网站秩序的推广内容及相关交易。
    7)发布包含欺骗性的恶意营销内容,如通过伪造经历、冒充他人等方式进行恶意营销;
    8)使用特殊符号、图片等方式规避垃圾广告内容审核的广告内容。


4. 色情低俗信息,主要表现为:
    1)包含自己或他人性经验的细节描述或露骨的感受描述;
    2)涉及色情段子、两性笑话的低俗内容;
    3)配图、头图中包含庸俗或挑逗性图片的内容;
    4)带有性暗示、性挑逗等易使人产生性联想;
    5)展现血腥、惊悚、残忍等致人身心不适;
    6)炒作绯闻、丑闻、劣迹等;
    7)宣扬低俗、庸俗、媚俗内容。


5. 不实信息,主要表现为:
    1)可能存在事实性错误或者造谣等内容;
    2)存在事实夸大、伪造虚假经历等误导他人的内容;
    3)伪造身份、冒充他人,通过头像、用户名等个人信息暗示自己具有特定身份,或与特定机构或个人存在关联。


6. 传播封建迷信,主要表现为:
    1)找人算命、测字、占卜、解梦、化解厄运、使用迷信方式治病;
    2)求推荐算命看相大师;
    3)针对具体风水等问题进行求助或咨询;
    4)问自己或他人的八字、六爻、星盘、手相、面相、五行缺失,包括通过占卜方法问婚姻、前程、运势,东西宠物丢了能不能找回、取名改名等;


7. 文章标题党,主要表现为:
    1)以各种夸张、猎奇、不合常理的表现手法等行为来诱导用户;
    2)内容与标题之间存在严重不实或者原意扭曲;
    3)使用夸张标题,内容与标题严重不符的。


8.「饭圈」乱象行为,主要表现为:
    1)诱导未成年人应援集资、高额消费、投票打榜
    2)粉丝互撕谩骂、拉踩引战、造谣攻击、人肉搜索、侵犯隐私
    3)鼓动「饭圈」粉丝攀比炫富、奢靡享乐等行为
    4)以号召粉丝、雇用网络水军、「养号」形式刷量控评等行为
    5)通过「蹭热点」、制造话题等形式干扰舆论,影响传播秩序


9. 其他危害行为或内容,主要表现为:
    1)可能引发未成年人模仿不安全行为和违反社会公德行为、诱导未成年人不良嗜好影响未成年人身心健康的;
    2)不当评述自然灾害、重大事故等灾难的;
    3)美化、粉饰侵略战争行为的;
    4)法律、行政法规禁止,或可能对网络生态造成不良影响的其他内容。


二、违规处罚
本网站通过主动发现和接受用户举报两种方式收集违规行为信息。所有有意的降低内容质量、伤害平台氛围及欺凌未成年人或危害未成年人身心健康的行为都是不能容忍的。
当一个用户发布违规内容时,本网站将依据相关用户违规情节严重程度,对帐号进行禁言 1 天、7 天、15 天直至永久禁言或封停账号的处罚。当涉及欺凌未成年人、危害未成年人身心健康、通过作弊手段注册、使用帐号,或者滥用多个帐号发布违规内容时,本网站将加重处罚。


三、申诉
随着平台管理经验的不断丰富,本网站出于维护本网站氛围和秩序的目的,将不断完善本公约。
如果本网站用户对本网站基于本公约规定做出的处理有异议,可以通过「建议反馈」功能向本网站进行反馈。
(规则的最终解释权归属本网站所有)

我知道了
恭喜你~答对了
+5羽毛
下一次认真读哦
成功推荐给其他人
+ 10羽毛
评论成功且进入审核!审核通过后,您将获得10羽毛的奖励。分享本文章给好友阅读最高再得15羽毛~
(羽毛可至 "羽毛精选" 兑换礼品)
好友微信扫一扫
复制链接