二维码

6.2 原理和设计 - 数据结构 - 机器学习

1226 人阅读 | 时间:2021年01月15日 01:18
6.2 原理和设计 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

6.2 原理和设计

1162 人参与  2018年09月30日 09:52  分类 : 区块链精品文章  评论

比特币网络是一个分布式的点对点网络,网络中的矿工通过“挖矿”来完成对交易记录的记账过程,维护网络的正常运行。

区块链网络提供一个公共可见的记账本,该记账本并非记录每个账户的余额,而是用来记录发生过的交易的历史信息。该设计可以避免重放攻击,即某个合法交易被多次重新发送造成攻击。

6.2.1 基本交易过程

每次发生交易,用户需要将新交易记录写到比特币区块链网络中,等网络确认后即可认为交易完成。每个交易包括一些输入和一 些输出,未经使用的交易的输出(Unspent Transaction Outputs,UTXO)可以被新的交易引用作为合法的输入,被使用过的交易的输出(Spent Transaction Outputs,STO)则无法被引用作为合法输入。

一笔合法的交易,即引用某些已存在交易的UTXO作为交易的输入,并生成新的输出的过程。

在交易过程中,转账方需要通过签名脚本来证明自己是UTXO的合法使用者,并且指定输出脚本来限制未来本交易的使用者 (为收款方)。对每笔交易,转账方需要进行签名确认。并且,对每一笔交易来说,总输入不能小于总输出。总输入相比总输出多余的部分称为交易费用 (Transaction Fee),为生成包含该交易区块的矿工所获得。目前规定每笔交易的交易费用不能小于0.0001 BTC,交易费用越高,越多矿工愿意包含该交易,也就越早被放到网络中。交易费用在奖励矿工的同时,也避免了网络受到大量攻击。

交易中金额的最小单位是“聪”,即一亿分之一(10-8)比特币。

表6-1展示了一些简单的示例交易。更一般情况下,交易的输入、输出可以为多方。

表6-1 简单的示例交易

6.2 原理和设计 - 数据结构 - 机器学习

需要注意,刚放进网络中的交易(深度为0)并非是实时得到确认的。进入网络中的交易存在着被推翻的可能性,一般要再生成几个新的区块(深度大于0)才认为该交易被确认。

下面分别介绍比特币网络中的重要概念和主要设计思路。

6.2.2 重要概念

1.账户/地址

比特币采用了非对称的加密算法,用户自己保留私钥,对自己发出的交易进行签名确认,并公开公钥。

比特币的账户地址其实就是用户公钥经过一系列Hash(HASH160,或先进行SHA256,然后进行RIPEMD160)及编码运算后生成的160位(20字节)的字符串。

一般地,对账户地址串进行Base58Check编码,并添加前导字节(表明支持哪种脚本)和4字节校验字节,以提高可读性和准确性。

6.2 原理和设计 - 数据结构 - 机器学习注意  账户并非直接是公钥内容,而是Hash后的值,以避免公钥过早公开后导致被破解出私钥。

2.交易

交易是完成比特币功能的核心概念,一条交易可能包括如下信息:

·付款人地址:合法的地址,公钥经过SHA256和RIPEMD160两次Hash,得到160位Hash串;

·付款人对交易的签字确认:确保交易内容不被篡改;

·付款人资金的来源交易ID:哪个交易的输出作为本次交易的输入;

·交易的金额:多少钱,与输入的差额为交易的服务费;

·收款人地址:合法的地址;

·收款人的公钥:收款人的公钥;

·时间戳:交易何时能生效。

网络中节点收到交易信息后,将进行如下检查:

·交易是否已经处理过;

·交易是否合法,包括地址是否合法、发起交易者是否是输入地址的合法拥有者、是否是UTXO;

·交易的输入之和是否大于输出之和。

如果检查都通过,则将交易标记为合法的未确认交易,并在网络内进行广播。

用户可以从blockchain.info网站查看实时的交易信息,一个示例交易的内容如图6-2所示。

6.2 原理和设计 - 数据结构 - 机器学习

图6-2 比特币交易的例子

3.交易脚本

脚本(script)是保障交易完成(主要用于检验交易是否合法)的核心机制,当所依附的交易发生时被触发。通过脚本机制而非写死交易过程,比特币网络实现了一定的可扩展性。比特币脚本语言是一种非图灵完备的语言,类似于Forth语言。

一般每个交易都会包括两个脚本:输出脚本(scriptPubKey)和认领脚本(scriptSig)。输出脚本一般 由付款方对交易设置锁定,用来对能动用这笔交易输出(例如,要花费交易的输出)的对象(收款方)进行权限控制,例如限制必须是某个公钥的拥有者才能花费这 笔交易。认领脚本则用来证明自己可以满足交易输出脚本的锁定条件,即对某个交易的输出(比特币)的拥有权。

输出脚本目前支持两种类型:

·P2PKH:Pay-To-Public-Key-Hash,允许用户将比特币发送到一个或多个典型的比特币地址上(证明拥有该公钥),前导字节一般为0x00;

·P2SH:Pay-To-Script-Hash,支付者创建一个输出脚本,里边包含另一个脚本(认领脚本)的哈希,一般用于需要多人签名的场景,前导字节一般为0x05。

以P2PKH为例,输出脚本的格式为:


scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG


其中,OP_DUP是复制栈顶元素;OP_HASH160是计算Hash值;OP_EQUALVERIFY判断栈顶两元素是否相等;OP_CHECKSIG判断签名是否合法。这条指令实际上保证了只有pubKey的拥有者才能合法引用这个输出。

另外一个交易如果要花费这个输出,在引用这个输出的时候,需要提供的认领脚本格式为:


scriptSig: <sig> <pubKey>


其中,是用pubKey对应的私钥对交易(全部交易的输出、输入和脚本)Hash值进行签名,pubKey的Hash值需要等于pubKeyHash。

进行交易验证时,会按照先scriptSig后scriptPubKey的顺序依次进行入栈处理,即完整指令为:


<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG


读者可以按照栈的过程来进行推算,理解整个脚本的验证过程。

引入脚本机制带来了灵活性,但也引入了更多的安全风险。比特币脚本支持的指令集十分简单,基于栈的处理方式,并且非图灵完备,此外还添加了额外的一些限制(大小限制等)。

4.区块

比特币区块链的一个区块主要包括如下内容:

·4字节的区块大小信息;

·80字节的区块头信息;

·交易个数计数器:1~9字节;

·所有交易的具体内容,可变长。

其中,区块头信息十分重要,包括:

·版本号:4字节;

·上一个区块头的SHA256 Hash值:链接到一个合法的块上,32字节;

·包含所有验证过的交易的Merkle树根的哈希值,32字节;

·时间戳:4字节;

·难度指标:4字节;

·Nonce:4字节,PoW问题的答案。

可见,要对区块链的完整性进行检查,只需要检验各个区块头信息即可,无需获取具体的交易内容,这也是简单交易验证 (Simple Payment Verification,SPV)的基本原理。另外,通过头部的链接,提供时序关系的同时加大了对区块中数据进行篡改的难度。

一个示例区块如图6-3所示。

6.2.3 创新设计

比特币在设计上提出了很多创新点,主要考虑了避免作恶、负反馈调节和共识机制三个方面。下面分别介绍。

1.避免作恶

避免作恶基于经济博弈原理。在一个开放的网络中,无法通过技术手段来保证每个人都是合作的。但可以通过经济博弈来让合作者得到利益,让非合作者遭受损失和风险。

6.2 原理和设计 - 数据结构 - 机器学习

图6-3 比特币区块的例子

实际上,博弈论早已广泛应用于众多领域。一个经典的例子是两个人分一个蛋糕,如果都想拿到较大的一块,在没有第三方的前提下,该怎么制定规则才公平?最简单的一个方案是负责分配蛋糕的人后挑选。

6.2 原理和设计 - 数据结构 - 机器学习提示  如果推广到N个人呢?

比特币网络中所有试图参与者(矿工)都首先要付出挖矿的代价,进行算力消耗,越想拿到新区块的决定权,意味着抵押的算力 越多。一旦失败,这些算力都会被没收掉,成为沉没成本。当网络中存在众多参与者时,个体试图拿到新区块决定权要付出的算力成本是巨大的,意味着进行一次作 恶付出的代价已经超过可能带来的好处。

2.负反馈调节

在设计上,比特币网络很好地体现了负反馈的控制论基本原理。

比特币网络中矿工越多,系统就越稳定,比特币价值就越高,但挖到矿的概率会降低。反之,网络中矿工减少,会让系统更容易被攻击,比特币价值降低,但挖到矿的概率会提高。

因此,比特币的价格理论上应该稳定在一个合适的值(网络稳定性也会稳定在相应的值),这个价格乘以挖到矿的概率,恰好达到矿工的收益预期。

从长远角度看,硬件成本是下降的,但每个区块的比特币奖励每隔4年减半,最终将在2140年达到2100万枚,之后将完全依靠交易的服务费来鼓励矿工对网络的维护。

6.2 原理和设计 - 数据结构 - 机器学习注意  比特币的最小单位是“聪”,即10-8 ,总“聪”数为2.1×1015 。对于64位处理器来说,高精度浮点计数的限制导致单个数值不能超过253 ,约等于9×1015 。

3.共识机制

传统共识问题往往是考虑在一个相对封闭的分布式系统中,允许同时存在正常节点、故障如何快速达成一致。

对于比特币网络来说,它是完全开放的,可能面对各种攻击情况,同时基于Internet的网络质量只能保证“尽力而为”,导致问题更加复杂,传统的一致性算法在这种场景下难以使用。

因此,比特币网络不得不对共识的目标和过程都进行一系列限制,提出了基于Proof of Work(PoW)的共识机制。

首先是不实现面向最终确认的共识,而是基于概率、随时间逐步增强确认的共识。现有达成的结果在理论上可能被推翻,只是攻击者要付出的代价随时间而指数级上升,被推翻的可能性随之指数级下降。

此外,考虑到Internet的尺度,达成共识的时间相对比较长,因此按照区块(一组交易)来进行阶段性的确认(快照),从而提高网络整体的可用性。

最后,限制网络中共识的噪声。通过进行大量的Hash计算和少数的合法结果来限制合法提案的个数,进一步提高网络中共识的稳定性。


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=953

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
◎已有 0 人评论
搜索
作者介绍
30天热门
×
×
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×