❶ 比特币新区块产生的过程
当挖矿节点要构造预备区块,准备生成新区块时,会按照优先级排序,从交易池中取待确认交易。预备区块通常会预留一定空间给高优先级的交易,剩下的空间会按照交易费比例(Sat/B)由高到低顺序一直把区块加满或者把交易池的交易用光。但比特币区块中不仅仅包含从交易池中取的待确认交易。按照比特币协议规定,比特币的区块主要包括五个部分:魔数,区块大小,区块头,交易计数器和交易信息。比特币区块的结构其中,“魔数”是一个值为0xD9B4BEF9的常数;“区块体积”是本区块所有数据的总体积;“区块头”是可以看作是整个区块的缩略信息,挖矿用到的区块信息就是区块头;“交易计数器”用来记录区块中交易的数量;“交易数据”是区块所包含的所有交易信息,包括Coinbase奖励部分,一般来说,这部分数据占了整个区块绝大部分空间。在比特币区块中,区块头是最为关键的一个信息。它包含整个区块的所有特征信息:区块版本号。
❷ 比特币中怎么证明是自己挖矿成功,而不是其他人呢
我们知道了信息计算Hash打包的过程:交易记录、时间、账本序号、上一个Hash值。也知道所有的计算和存贮是需要消耗计算机资源。在中本聪的设计里,完成记账可以获得系统给与比特币奖励,这个过程也就是比特币发行过程,因此把记账成为挖矿。
记账工作
因为记账是有奖励,每次记账都可以为自己增加一定个数的比特币,因此大家争相记账,当然能也就引发了问题:出现记账不一致的是后,系统引入工作量证明来解决这个问题,规则如下:
1.在一段时间内,只有一个人能记账成功。
2.通过解决密码学难题竞争获得唯一记账权
3.其他节点复制记账结果
不过在进行工作量证明之前,记账节点会做进行如下准备工作:
1.收集广播中还没有被记录账本的原始交易信息
2.检查每个交易信息中付款地址有没有足够的余额
3.验证交易是否有正确的签名
4.把验证通过的交易信息进行打包记录
5.添加一个奖励交易:给自己的地址增加12.5比特币
如果争夺记账权成功的话,就可以得到12.5比特币的奖励。
工作量证明
每次记账的时候会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash。为了确保10分钟前后只有一个人可以记账,就只有提高记账的难度,用Hash的结果必须以若干个0开头。为了满足条件,进行Hash是引入一个随机数变量。
用伪代码表示一下:
1.Hash(上一个Hash值,交易记录集) = 456635BCD
2.Hash(上一个Hash值,交易记录集,随机数) = 0000aFD635BCD
改变Hash的原始信息的一部分,Hash值也会不断变化,因此在运行Hash的时候,不断改变随机数的值,总可以找到一个随机数使得Hash的结果以若干个0开头,率先找到随机数的节点从此获得记账的唯一记账权。
验证
在节点成功找到Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播后会对其进行验证。如果验证通过,表明已经有节点成功解密,就不会在竞争当前区块,而是选择接受区块,记录到自己的账本中,进行下一轮竞争猜谜。网络中只有最快解密的区块才会添加到账本中,其他的节点进行复制,确保整个账本的唯一性。
如果节点有作弊行为,会导致网络的节点验证不通过,直接放弃其打包的区块,也无法记录到总账本中,那么作弊节点的消耗成本就白费了。因此矿工自觉的遵守比特币系统的共识协议,也确保整个系统的安全。
这个问题就好像你去工地搬砖,搬完一天砖,包工头问你你怎么证明自己一天在工地搬砖呢?
❸ 姣旂壒甯佹庝箞鏍疯繍绠
姣旂壒甯佹庝箞杩愮畻鐨
姣旂壒甯佹槸涓绉嶅熀浜庡瘑鐮佸﹀師鐞嗙殑鏁板瓧璐у竵锛屽叾杩愮畻涓昏佹秹鍙婂埌鍔犲瘑绠楁硶鍜屽垎甯冨紡璁$畻鐨勬妧鏈銆
姣旂壒甯佺殑杩愮畻杩囩▼涓昏佸寘鎷浠ヤ笅鍑犱釜姝ラわ細
1.鐢熸垚鍏绉侀挜瀵癸細姣旂壒甯佷娇鐢ㄦき鍦嗘洸绾垮姞瀵嗙畻娉(ECDSA)鐢熸垚鍏绉侀挜瀵癸紝鍏朵腑绉侀挜鐢ㄤ簬绛惧悕浜ゆ槗锛屽叕閽ョ敤浜庨獙璇佺惧悕銆
2.鐢熸垚浜ゆ槗淇℃伅锛氫氦鏄撲俊鎭鍖呮嫭鍙戦佽呭湴鍧銆佹帴鏀惰呭湴鍧銆佽浆璐﹂噾棰濈瓑淇℃伅锛岀敤浜庢弿杩版瘮鐗瑰竵鐨勪氦鏄撹繃绋嬨
3.楠岃瘉浜ゆ槗淇℃伅锛氬皢浜ゆ槗淇℃伅鍔犱笂鏃堕棿鎴炽佸彂閫佽呭叕閽ャ佸搱甯岀瓑淇℃伅锛岀粍鎴愪氦鏄撹板綍锛屽苟閫氳繃缃戠粶骞挎挱缁欏叾浠栬妭鐐归獙璇併
4.鎸栫熆璁$畻锛氭瘮鐗瑰竵鐨勬寲鐭挎槸鎸囧皢浜ゆ槗璁板綍鎵撳寘鎴愬尯鍧楀苟娣诲姞鍒板尯鍧楅摼涓鐨勮繃绋嬨傛寲鐭胯繃绋嬮渶瑕佽繘琛屼竴绯诲垪鐨勮$畻锛屽寘鎷鍝堝笇璁$畻銆侀毦搴﹁$畻绛夛紝杩欎簺璁$畻闇瑕侀氳繃鍒嗗竷寮忚$畻鏉ュ畬鎴愩
5.鑾峰緱鍖哄潡濂栧姳锛氬畬鎴愭寲鐭跨殑鑺傜偣鍙浠ヨ幏寰椾竴瀹氱殑姣旂壒甯佸栧姳锛屽悓鏃朵篃鍙浠ヨ幏寰椾氦鏄撴墜缁璐逛綔涓哄栧姳銆
鎬讳箣锛屾瘮鐗瑰竵鐨勮繍绠椾富瑕佹秹鍙婂埌鍔犲瘑绠楁硶銆佸垎甯冨紡璁$畻銆佸搱甯岃$畻绛夋妧鏈锛岄渶瑕侀氳繃澶氫釜鑺傜偣鍗忓悓瀹屾垚锛岀‘淇濅氦鏄撹板綍鐨勫畨鍏ㄥ拰鍙闈犳с
❹ 比特币怎么存储
就是一串字符,保存好这串字符就可以了,不要泄露,其他人也不可能破解出来的。
❺ 姣旂壒甯佺殑TPS鏄濡備綍璁$畻鐨勫憿
TPS灏辨槸鎸囩郴缁熸瘡绉掗挓鑳藉熷勭悊鐨勪氦鏄撴暟锛岀畻娉曞備笅锛氭瘮鐗瑰竵姣忎釜鍖哄潡瀹归噺鏄1MB锛堜篃灏辨槸1024kb锛夛紝濮胯滀簭姣10鍒嗛挓鍑轰竴涓鍖哄潡锛堜篃灏辨槸600绉掞級锛屾瘮鐗瑰竵姣忕瑪浜ゆ槗鍗250瀛楄妭宸﹀彸锛屽氨鎸250瀛楄妭鏉ョ畻锛堜篃灏辨槸 0.25KB锛夈傞偅涔堟瘡涓鍖哄潡姣忕掑钩鍧囨墦鍖呰抗绁炲氨鏄锛1024/600/0.25锛6.8266666666667锛屽ぇ姒傛槸7绗斾氦鏄撱傛瘮鐗瑰竵鐨凾PS浜ゆ槗鏁帮紝鐩鍓嶆槸7绗斿乏鍙筹紝杩欎釜涓嶇畻楂橈紝铏界劧鐜板湪姣旂壒甯佸凡鏀鎸侀棯鐢电綉缁滐紝閫熷害澶уぇ鎻愬崌锛屼絾鏄杩樻病鏈夎骞挎硾閲囧ソ鑰愮敤锛屽緢澶氶挶鍖呬笉鏀鎸侊紝浠嶅勪簬鏃╂湡闃舵碉紝涓嶈繃涔熶笉鐢ㄦワ紝鐩鍓嶆瘮鐗瑰竵鏈鏉ユ渶澶х殑搴旂敤搴旇ユ槸浠峰煎瓨鍌锛屽畨鍏ㄦф墠鏄鏈閲嶈佺殑銆
鎴戜滑閫氳繃浠ヤ笂鍏充簬姣旂壒甯佺殑TPS鏄濡備綍璁$畻鐨勫憿鍐呭逛粙缁嶅悗,鐩镐俊澶у朵細瀵规瘮鐗瑰竵鐨凾PS鏄濡備綍璁$畻鐨勫憿鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
❻ 姣旂壒甯佹柊鍖哄潡浜х敓鐨勮繃绋
1. 鎸栫熆鑺傜偣鍦ㄦ瀯閫犳柊鍖哄潡鏃讹紝浼氶栧厛鎸夌収浼樺厛绾у逛氦鏄撹繘琛屾帓搴忥紝骞朵粠浜ゆ槗姹犱腑閫夊彇寰呯‘璁ょ殑浜ゆ槗銆
2. 鏂板尯鍧楃殑鏋勯犻氬父浼氫负楂樹紭鍏堢骇鐨勪氦鏄撻勭暀绌洪棿锛岄殢鍚庡墿浣欑┖闂翠細鏍规嵁浜ゆ槗璐圭敤姣斾緥锛圫at/B锛変粠楂樺埌浣庡~鍏咃紝鐩磋嚦鍖哄潡婊¤浇鎴栦氦鏄撴睜涓鐨勪氦鏄撹楀敖銆
3. 姣旂壒甯佸尯鍧椾腑涓嶄粎鍖呭惈浜ゆ槗姹犱腑鐨勪氦鏄擄紝杩樺寘鎷鍏朵粬鍑犻儴鍒嗗唴瀹广
4. 姣旂壒甯佸尯鍧楃殑缁撴瀯鍖呮嫭榄旀暟銆佸尯鍧楀ぇ灏忋佸尯鍧楀ご銆佷氦鏄撹℃暟鍣ㄥ拰浜ゆ槗淇℃伅浜斾釜涓昏侀儴鍒嗐
5. 榄旀暟鏄涓涓鍥哄畾鍊硷紝鍖哄潡澶у皬琛ㄧず鍖哄潡鏁版嵁鐨勬讳綋绉锛屽尯鍧楀ご鏄鍖哄潡鐨勬憳瑕佷俊鎭锛屼氦鏄撹℃暟鍣ㄨ板綍浜ゆ槗鏁伴噺锛岃屼氦鏄撲俊鎭鍒欏寘鍚鎵鏈変氦鏄撴暟鎹锛屽叾涓鍖呮嫭Coinbase濂栧姳閮ㄥ垎锛岄氬父鍗犳嵁鍖哄潡鐨勫ぇ閮ㄥ垎绌洪棿銆
6. 鍦ㄦ瘮鐗瑰竵鍖哄潡涓锛屽尯鍧楀ご鏄鏈涓烘牳蹇冪殑閮ㄥ垎锛屽畠鍖呭惈浜嗗尯鍧楃殑鎵鏈夊叧閿淇℃伅锛屽傚尯鍧楃増鏈鍙枫
❼ PoW共识机制的原理
比特币的共识机制就是PoW共识,借鉴了HashCash的处理方法, 下面就来说说比特币如何进行PoW共识的。
从区块头的结构中可以看到一个4 bytes的Nonce值,Nonce值的变动会影响整个区块头的哈希值,挖矿节点即是通过尝试不同的Nonce值(通常从0开始每次加1),寻找一个哈希值小于Difficulty Target指定的难度值。
PoW证明过程,这也就是俗称的挖矿过程, 找到合适的哈希值。
这里不详细说明区块打包过程, 区块通过一定的算法被生成, 当然生成是需要一定的代价的。
区块头里的各个值并不是随机的, 而是由固定的算法得出, Merkle根哈希值就是把交易打包变成一颗Merkle树, 最后得出根的哈希值, 难度值是根据算法不断调整, 要维持出块速率是10分钟出一个块。
首先我们把所有交易打包生成Merkle树, 计算Merkle根的哈希值, 然后组装区块头, 把区块头不断进行SHA256(SHA256(区块头))双重哈希操作, 然后判断是否小于网络目标值, 这里其实就是把它变成2进制, 二进制前面有多少位是没有0的, 因为有1的话, 这个十进制的值肯定是很大的, 就不会符合条件。 如果大于这个目标值, 说明前面的位数没有满足前多少位为0的条件 哈希不成功, 那么就改变随机数值,组成新的区块头,继续哈希。
这是就是是挖到矿了,其他节点验证的话也简单,只要做一次SHA256(SHA256(验证区块头))来判断。
比特币挖矿难度调整方式非常简单,难度目标调整即不断将256位的难度值减小,如277315号区块的难度值十六进制表示为:
这个数字在二进制表示下前60位均是0,如果要增加难度只需要减小这个值,随着难度值的减小,起始0的个数增多,可寻找的哈希值范围减小,挖矿难度就越大。
难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度。如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
公式可以总结为:新难度值=旧难度值×(过去2016个区块花费时长/20160分钟)
优点
缺点
1:挖矿过程为什么要计算两次哈希值?
中本聪在设计比特币的挖矿算法的时候,考虑到SHA2-256算法存在被破解的可能,虽然在理论上并未出现对SHA2-256算法的攻击。为了减弱攻击的威胁,区块头数据要对SHA2-256算法运算两次。
2:如果所有节点都从0开始尝试Nonce值,那不就永远都是算力高的节点先计算出有效的结果,算力低的节点永远没希望挖矿成功?
区块头大部分信息都是一样的,但是Merkle Root对于每个节点必然是不同的,因为每个节点都会有自己的Coinbase交易,该交易中存在节点矿工的地址,此地址对于每个独立挖矿节点都是不同的,根据哈希函数的雪崩效应可知每个独立节点的Merkle Root必定有显著的区别。
3:如何解决拜占庭问题?
通过工作量证明就增加了发送信息的成本,降低节点发送消息速率,这样就以保证在一个时间只有一个节点在进行广播,同时在广播时会附上自己的签名。工作量证明其实相当于提高了做叛徒(发布虚假区块)的成本,只有第一个完成证明的节点才能广播区块,竞争难度非常大,需要很高的算力,如果不成功其算力就白白的耗费了,整个系统也因此而更稳定。
❽ 姣旂壒甯佹柊鍖哄潡浜х敓鐨勮繃绋嬫槸鎬庝箞鏍风殑
1.鎸栫熆鑺傜偣瑕佸厛鏋勫缓濂介勫囧尯鍧楋紝姣旂壒甯佸尯鍧楀寘鍚浠庝氦鏄撴睜涓鍙栫殑寰呯‘璁や氦鏄擄紝榄旀暟锛屽尯鍧楀ぇ灏忥紝鍖哄潡澶达紝浜ゆ槗璁℃暟鍣ㄥ拰浜ゆ槗淇℃伅銆2.鏋勫缓濂介勫囧尯鍧楀悗锛屾寲鐭胯妭鐐瑰氨浼氬皢鍖哄潡澶翠俊鎭涓嬩紶缁欑熆宸ワ紝鐭垮伐閫氳繃杩炵画涓嶆柇鍦拌皟鏁村尯鍧楀ご涓鐨勯殢鏈烘暟鏉ユ敼鍙樺尯鍧椾腑鐨勫搱甯屽硷紝褰撻勫囧尯鍧楃殑鍝堝笇鍊兼瘮鐗瑰竵缃戠粶褰撳墠鐩鏍囧搱甯屽间綆鏃讹紝杩欎釜鍖哄潡鏋勫缓瀹屾垚浜嗭紝鏄涓涓鍚堟硶鐨勬柊鍖哄潡銆3.鎸栫熆鑺傜偣涓鑸浼氭瘮杈冨強鏃跺湴鍚戞瘮鐗瑰竵缃戠粶骞挎挱鏂板尯鍧楋紝鍏朵粬姣旂壒甯佽妭鐐瑰湪鎺ユ敹鍒板箍鎾淇℃伅鍚庯紝浼氬规柊鍖哄潡杩涜岄獙璇侊紝鏂板尯鍧楅獙璇侀氳繃鍚庯紝浼氬姞鍏ユ湰鍦般傝繖鏃跺欙紝鏂板尯鍧楀彲浠ョ‘璁ゅ垱寤哄畬姣曚簡銆
鎴戜滑閫氳繃浠ヤ笂鍏充簬姣旂壒甯佹柊鍖哄潡浜х敓鐨勮繃绋嬫槸鎬庝箞鏍风殑鍐呭逛粙缁嶅悗,鐩镐俊澶у朵細瀵规瘮鐗瑰竵鏂板尯鍧椾骇鐢熺殑杩囩▼鏄鎬庝箞鏍风殑鏈変竴瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿
❾ 比特币机器是怎么运转的
很多朋友对于比特币的算力比特币的矿机矿场以及挖矿的回报率都是比较陌生的,下面我们就详细科普一下比特币以及区块链记录之间的运行机制。首先解释一下什么叫区块链?我们可以把它看成是分布式的账本以及构成的一个相对应的信用网络,在这个网络中每个人的言行举止都可以记录在链上,并且支持验证和回溯调查,多个链组合在一起就形成了区块,而负责把这个信息记录在链上的我们把它称之为矿工。
所以看到这里,相信大家也就能够理解什么是比特币的算力,什么是比特币的挖矿?另外提一句,当前的矿场基本上已经被大机构所垄断,或者说所谓的入门门槛非常之高,没有几百万元的投资或者上千万的投资,基本上在当前的比特币挖矿行业中都属于散户,而散户矿工经常会因为算力波动较大以及电费成本的上升入不敷出而放弃挖矿。