2023年7月27日发(作者:)
区块链学习总结区块链基本概念⽬录1. ⼴义上讲区块链是⼀种思想,重点是去中⼼化,节点之间平等,少数服从多数。狭义上讲区块链是⼀个技术栈,通过很多种技术来实现记录交易的链式数据结构。P2P⽹络中⼀段时间内的⼏笔交易(包括挖矿的奖励也是⼀笔转账)被⼀起结算打包成块,通过包含前⼀个区块的哈希,形成链式结构。提交到链上的交易纪录⼈⼈可查证、⼈⼈有备份、⽆法修改、⽆法撤销,对提交到链上的记录的每⼀个操作都会被记录下来。如果想⽤⾮法的⼿段修改记录,就要有能⼒修改后继所有节点的数据,就需要掌握链上51%的算⼒。2. 区块链在数据存储上类似于⼀个分布式数据库,但是有不同于它的⼏点:1. 不同的节点的主⼈是可以不⼀样的(事实上⼤多数节点是不⼀样的),⽆法做到全⽹⼤部分节点同时做⼀个不合法的操作2. 节点间的地位是平等的,所记录的内容在共识机制作⽤后都是⼀样的区块中涉及到的数据结构(以交易记录为例)区块本⾝就是⼀个数据结构
1. 块头+ 版本、前⼀个区块的哈希值(⽤于索引前⼀个区块)
+ 时间戳、挖矿难度、随机数
+ 摩克尔树根数据(能够总结并迅速归纳校验区块中全部交易数据)
版本:正在使⽤的协议,⽤于跟踪软件/协议的更新前⼀个区块的哈希值时间戳:区块建⽴的⼤致时间(s)挖矿难度:由机制规定随机数:nonce,能满⾜POW证明的数字摩克尔根数据:MerkleTree的根数据2. 块体+ 交易计数器占⽤的字节数
+ 区块内记录的交易数量
+ 多条交易记录(包括挖矿奖励)交易记录:区块链中的交易记录由收款地址、转账⾦额、付款签名、付款公钥四部分组成,区块链钱包中的余额也是以记录的形式存在⽽⾮具体的数字。交易记录被写⼊区块或被节点转发时会由矿⼯进⾏检验,保证记录与交易发起⼈发出的⼀致,中间未被任何⼈篡改。区块钱包与交易记录区块钱包公私钥采⽤⾮对称加密技术,私钥加密的东西可以⽤公钥解密,公钥加密的东西也可以⽤私钥解密,每个⼈的私钥就相当于银⾏账户密码,需要严格保密;公钥相当于银⾏卡号。钱包余额与公钥绑定,但是公钥作为钱包地址太长,所以使⽤将公钥转换为⼀个钱包地址作为我们的“银⾏卡号”。公钥不仅可以⽤于导出钱包地址,也可以⽤于帮助节点验证签名。每⼀个⼈都有⾃⼰的⼀对私钥和公钥,私钥可以导出公钥,公钥通过两次不同的Hash算法导出公钥hash,公钥hash通过Base58导出钱包地址,钱包地址就相当于我们的账户。除了钱包地址与公钥hash可以互逆,其余都是单向加密。交易的发起者会⽤私钥为交易签名,将转账⾦额和转⼊的地址写⼊签名信息并附在交易记录的后⾯,最后会将⽤于公钥也附上帮助节点验证交易。私钥签名是⽆法被修改或仿造的,所以如果⽤公钥可以解开,则说明这个交易确实是由公钥的所有者也就是转出账户的所有者发起的,降低了账户被冒名使⽤的风险。交易的产⽣当⼀个⼈发起⼀个交易,会⽣成⼀条交易记录,该交易记录包含转账⾦额、转⼊钱包地址、转出签名、转出公钥。这个交易会被发送给最近的第⼀个节点,节点验证后会向全⽹转发。验证通过后节点可能将这条记录写⼊⾃⼰正在打包的区块中。区块链运⾏机制1. 交易被发布到P2P⽹络,等待打包上链2. 挖矿:节点们⾃愿去寻找⼀个随机数(暴⼒),使得这个区块的哈希值前n位为0(n正相关于挖矿难度,由机制决定)3. 某⼀个节点先找到随机数后赶紧完成区块打包,然后后向全⽹声明⾃⼰打包完成,其他节点验证后如果正确就给它⼀个确认,有机制规定得到⼏个确认后可以上链,然后其他节点停⽌挖矿去争夺下⼀个块的记账权;如果⼤家发现它的随机数不正确则继续挖4. 其他节点会同步这个区块,⽽打包这个区块的节点也会得到⼀定的奖励,这个奖励来⾃交易发起⼈(帮助上链的⼩费)注意:1. 区块的哈希值也可以理解为区块头的哈希值,也称为消息摘要,因为只有区块头参与区块哈希的运算,由区块头做两次SHA-256得到。2. 区块哈希并不会保存在⾃⾝区块中,⽽是保存在节点的存储介质中。当节点探测到⼀个新的区块后,会计算它的哈希值作为该区块的唯⼀⾝份标识,并保存在节点机上⼀张表上。3. 这张表记录着该节点上所有区块的哈希值,⽤于更快地索引区块。对共识机制POW以及挖矿的理解共识机制区块链是去中⼼化的,所以需要⼀套机制来使⼤家达成共识。各节点之间是没有信任的,但是我们可以使各节点做的⼯作值得被信任,并且通过⼯作量来衡量⼀个节点对链做出的贡献。共识机制的作⽤:保证⼀段时间只有⼀个⼈可以记账记账⼈的⼯作可以被⼤家认可⼤家都认可最长的链,并延长最长链常⽤的共识机制有POW(⼯作量证明法)、POS(股权证明法)、DPOS(授权股权证明法)以及PBFT(拜占庭证明法)。POWProof Of Work,通过做⼀定量有难度的⼯作来(挖矿)来争夺这个区块的记账权(打包上链权),。矿⼯经过暴⼒破解POW会找到⼀个随机数(nonce,在以太坊中,在BTC中是⼀个多项式的解),这个随机数不仅证明了这个矿⼯做了⼀定的⼯作,更是这个区块上链不可缺少的⼀部分(数据结构中定义),要是没有这个随机数或者这个随机数⽆法通过POW算法,则这个区块就会被作废成为⽆效区块。POW有三个要素:⼯作量证明算法、区块以及难度。算法和难度由机制决定。区块决定了算法的输⼊,难度决定了得出算法解需要的计算量。难度⼀般会将挖矿时间控制在⼀个合理范围内,既不会太容易影响到平台的稳定性,也不会太复杂导致挖⼀次耗时太长影响交易效率。以太坊中使⽤的POW算法⼤致可以理解为:找到⼀个随机数nonce,这个随机数满⾜:将它拼接到区块某些值后⾯,整体做某种运算可以结果的前n位为0【在实际实现时还有很多细节和改变】POW算法有⼀个重要特点:就是求解很难,但是很容易去验证。POW算法⼀般⽆法完成计算上的逆推,即由果得因【因为计算量超级巨⼤,现有的计算机⽆法在有限的时间内完成计算】。所以求解时通常只能使⽤暴⼒破解的⽅法,这也使得挖矿的效率只与矿⼯的算⼒有关,实现了某种层⾯上的公平。验证时使⽤nonce运⾏⼀次POW算法,即可得知结果正确与否,这⼀过程⽤时很少。链分叉:区块链中规定选择长链来作为主链。当链产⽣分叉时,两个分⽀之间属于竞争关系,最先获得6+区块确认(后⾯链接上6个新区块)的分叉成为主链,另⼀个分叉作废,其上的所有区块成为⽆效区块,其中的所以交易重新被发布到P2P⽹络上等待打包上链。挖矿挖矿的过程就是暴⼒破解找到那个随机数的过程。当交易池⾥有新的交易等待被打包上链时,空闲的节点们就开始算那个随机数,谁先找到那个随机数,就赶紧打包区块并向全⽹⼴播:“打包完成”,其他正在挖其他矿的节点就会验证这个随机数,每被验证通过⼀次就获得⼀个确认,获得6+个验证后,即它后⾯⼜有6个以上的新块连接上来以后,这个区块就可以正式上链,同时这个矿⼯会得到⼀定的奖励(这笔交易会成为该区块中记录的第⼀个交易),其他节点会验证(独⽴校验)和同步这个区块。区块确认:这⾥的确认指的是如果⼀个节点认可你的⼯作,就会将⾃⼰正在打包的区块加载你的区块后⾯。也就是说,只有当时有记账权的节点才有资格去确认别⼈。挖矿奖励分为两部分:1. 第⼀部分是来⾃从⽆到有产⽣新币(相当于印钱),这部分数字币交易记录成为coinbase,没有转出⽅,转⼊⽅是挖到他的矿⼯。产⽣新币的速度从创世块的产⽣就开始减慢,到最后会不产⽣新币。⽽整个系统的数字币的数量也会保持衡定。⽐如⽐特币最终的数量会稳定在2100万枚左右。2. 第⼆部分是来⾃打包区块的奖励,由交易的发起者⽀付,相当于⼿续费,也是⼀笔转账记录,写在这个区块中。独⽴校验独⽴校验是为了防⽌矿⼯获得记账权后的不诚实⾏为影响到链。当新区块在⽹络中传播时,每⼀个节点在将它转发到其节点之前,会进⾏⼀系列的测试去验证它。这确保了只有有效的区块会在⽹络中传播。具体校验包括:1. 区块的数据结构语法上有效2. 验证⼯作量证明,区块头的哈希值⼩于⽬标难度(确认包含⾜够的⼯作量证明)3. 区块时间戳早于验证时刻未来两个⼩时(允许时间错误)4. 验证区块⼤⼩在长度限制之内,即看区块⼤⼩是否在设定范围之内。(BTC是数据区块体不能⼤于1M,隔离验证区块不能⼤于3M;BCH是区块不能⼤于32M;BSV现在是不能⼤于128M)5. 第⼀个交易(且只有第⼀个)是coinbase交易,即⼀个区块,矿⼯只能给⾃⼰奖励⼀次6. 验证区块内的交易并确保它们的有效性:验证MerkleRoot是否是由区块体中的交易得到的,即重构区块Merkle树得到的树根,看是否和区块头中的MerkleRoot值相等独⽴校验是去中⼼化共识的重要组成部分挖矿流程举个例⼦1. P2P⽹络中中有⼏笔交易待打包2. A、B、C三个节点空闲前来争夺记账权1. 每个节点都通过暴⼒破解来找到能通过POW验证的随机数2. POW算法中⽤到的参数都可以被⽴即获取或计算出3. 同时验证了交易的正确性,完善⼀个区块的数据结构3. A节点⼴播:打包完成;其他节点验证,有的节点认为正确,有的节点认为错误4. ⼤家继续挖矿5. C节点⼴播:打包完成;【这时候会产⽣链分叉】其他节点验证6. C节点⾸先获得六个节点认为它正确。C获得记账权,A和B停⽌当前⼯作去挖下⼀个矿7. C节点向全⽹⼴播产⽣新区块8. 其他节点探测到产⽣新区块后会获取这个区块的信息做独⽴校验,校验通过后将会将这个区块同步到⾃⼰所备份的链上;校验不通过则不同步。
三个证明如何证明你有钱?⽐特币交易遵守⼏个规则:第⼀,除了 coinbase交易之外,所有的资⾦来源都必须来⾃前⾯某⼀个或者⼏个交易的 UTXO,就像接⽔管⼀样,⼀个接⼀个,此出彼⼊,此⼊彼出,⽣⽣不息,钱就在交易之间流动起来了。第⼆,任何⼀笔交易的交易输⼊总量必须等于交易输出总量,等式两边必须配平。UTXO(Unspent Transaction Outputs)是未花费的交易输出,它是⽐特币交易⽣成及验证的⼀个核⼼概念。交易构成了⼀组链式结构,所有合法的⽐特币交易都可以追溯到前向⼀个或多个交易的输出,这些链条的源头都是挖矿奖励,末尾则是当前未花费的交易输出。每笔交易都有若⼲交易输⼊,也就是资⾦来源,也都有若⼲笔交易输出,也就是资⾦去向。⼀般来说,每⼀笔交易都要花费(spend)⼀笔输⼊,产⽣⼀笔输出,⽽其所产⽣的输出,就是“未花费过的交易输出”,也就是 UTXO。如何证明你是你?#见交易记录如何证明你的钱被使⽤两次?双花问题:在区块链中,交易的结算并不能以⼀个很快的速度完成。如果⼀个居⼼叵测的⼈,将所有的钱⽤于⼀次交易,然后未等交易计算完成,有发起了另⼀笔交易;极端⼀些,他同时发起两笔交易,⼀笔向A⽅向⽹络转发,另⼀笔向B⽅向⽹络转发,然后在极短的时间内两个⽅向的⽹络上均有⼀个矿⼯完成了挖矿,这时由于⽹络的延迟,这两个矿⼯在校验时并不会发现余额不⾜的问题,最终这两个存在⽭盾的交易同时上链,形成分叉。虽然在共识机制的作⽤下,两个分叉上的短链会被抛弃掉,即有⼀笔交易最终会被否认掉,但如果这个⼈有⼀定的算⼒能够赶在商品拿到之前保证两个链谁都不被抛弃(给短链加块),等他拿到商品之后,诈骗就会成功。解决办法:设定⼀笔交易需要6+个验证后才会⽣效,⽽⼀个节点在区块链上短时间内连续加上6个区块是⼀件⼏乎不可能完成的事情,这意味着在他拿到商品之前就会有⼀条链被作废。(6+这个数字不固定,根据链的实际情况制定)
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690463698a353063.html
评论列表(0条)