主页 > imtoken钱包转usdt > 区块链基础

区块链基础

imtoken钱包转usdt 2023-12-27 05:10:04

区块链技术基础 什么是区块链技术? 运行区块链客户端的计算节点可以相互通信。 每个节点维护一个账本。 每个节点的收支记录都会广播给其他节点。 筛选出一个节点作为一段时间的总记录。 其他节点收到被选中节点的记录,与自己的账本进行比对,没有问题则保存。 被选中的节点在此期间的劳动将获得一定的奖励。 节点通过非对称加密的公钥来代表自己的身份,并通过加密传输数据。 区块链的组成模块是区块链账本。 区块链账本用于记录数据。 区块分为区块头和区块体。 区块头会存放前一个区块的哈希值,让每个区块串联起来。 区块头与 Merkle 根相关联。 交易。 如果链上的数据块被修改,则该数据块无法链接到区块链账本中,在其他节点验证时会被发现,因此区块链账本可以防止数据被篡改。 共识机制。 一个筛选算法,可以选择一个特定的节点,作为大家对账的参考。 密码算法。 其中包括计算区块哈希值的算法、计算区块中交易哈希值的算法和默克尔根算法、创建账户和签署交易的算法等脚本系统。 脚本系统驱动节点收发数据,通过实现不同功能的脚本实现不同的服务。 网络路由。 在这些节点组成的网络中,没有固定的节点路由服务器,因此每个节点都扮演着路由服务器和用户的角色,通过路由交换数据。什么是挖矿

挖矿就是通过竞争获得区块的打包权,通过计算打包获得报酬。

难度值是多少?

难度值描述了获得包装权的门槛。 只有当计算结果小于难度值时,才能获得包装权。 整个系统每次都会更新难度值,计算一个区块的速度可以在10分钟内计算出来。

初始难度值很大,通过竞争很容易获得。 0号区块链的难度值如下:

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

值越大越容易满足。 随着算力的提升,为了维持每 10 分钟出块的速度,价值会逐渐降低,越来越难以满足。 初始难度值表达信息如下,bits为上述值的压缩值,可以通过0x00FFFF*2^(8*(0x1D-3)恢复上述值(近似值)。区块0的难度设置为1比特币交易过程是不是非得记录,当前难度为初始难度值除以当前难度值:

"nonce": 2083236893, 
"bits": "1d00ffff", 
"difficulty": 1

如何获得包装权?

每笔交易都会以广播的形式发送给其他节点,因此计算节点会拉取缓存一段时间的交易记录,然后使用如下公式进行计算:

SHA256(SHA256(version + prev_ hash + merkle_ root + ntime + nbits + nonce)) < TARGET

如果计算出的值小于目标难度值TARGET,则认为成功。 参数解释如下:

名称含义描述

版本

块的版本号

固定值

prev_hash

前一个区块的哈希值

固定值

merkle_root

待打包交易哈希树的根值,即Merkle根值

可变的,由收购的交易决定,收购的交易也有一定的优先级规则,比如根据手续费的大小

时间

块时间戳

必须大于前11个区块的平均时间戳,不得超过当前网络时间的2小时,可以小于前一个区块的时间戳

n位

当前难度值

固定值

随机数

随机数

从 0 到 2^32 的值

想要小于目标难度值,就需要不断尝试各种参数组合。 这个过程消耗了大量的计算资源。 一旦计算成功,将广播一个新的区块,其他客户端验证后写入自己的区块链账本。

什么是挖矿?

获得打包权后,整个区块链系统会给客户账户一定的奖励。 本次奖励为打包交易的第一条记录,本次奖励相当于发行了一种新的货币。 比特币数量有限,奖励比特币每4年减半。 2140年,比特币全部被挖出,那时挖矿的收入来源是交易手续费。

多个节点有资格这样做吗?

如果多个节点同时计算出符合条件的区块,则一起广播,最后传播最广,最长链中的区块将被保留。

比特币地址是如何生成的 随机数生成器生成一个随机数作为私钥。 私钥作为参数,公钥使用SECP256K1算法生成,是一种椭圆曲线算法。 但是私钥不能从公钥计算出来。 计算公钥哈希。 通过SHA256和RIPEMD160计算公钥的哈希值,保证值的唯一性。 将地址版本号与公钥哈希值相连,Bitnet主版本号为0x00,然后两次SHA256得到前四个字节作为校验值。 连接版本号+公钥哈希值+校验值,进行BASE58编码,最终得到比特币地址。比特币如何验证一笔交易

SPV钱包验证流程:

下载完整的区块链标头,其中包括 Merkle 根。 计算你要验证的交易的哈希值。 根据哈希值找到对应的区块头。 获取计算 Merkle 根所需的哈希。 计算默克尔根。 检查Merkle根是否正确。 根据区块高度的位置,可以判断交易收到了多少确认。比特币是如何管理交易历史的

比特币中的交易模型是UTXO(Unspent Transaction Output),未花费的交易输出。 用户拥有的 UTXO 等同于他的资产。 UTXO只记录用户获得的比特币,一笔未花费的交易输出只能使用一次。

交易分为输入和输出。 在A转10个比特币给B的交易中,整个模型的工作原理如下:

A账户有两个UTXO,分别是5个比特币和6个比特币。 A找出自己名下满足10个比特币的UTXO,可以由多个未花费的交易(5+6)组成,将这些UTXO作为输入。 输出为B的10个比特币的UTXO,A的1个比特币的UTXO(找零)。区块链技术的意义数据是不可篡改的。 分布式存储,数据多地备份。 匿名。 用户是通过地址来识别的,而地址是通过公钥生成的,所以仅仅通过地址是无法获取其背后的真实用户的。 价值快递。 自成一体的信任机制,工作量表明比特币是有价值的,比特币可以在任何比特币节点进行转移。 自动网络共识。 一笔交易被所有其他节点见证,并自动达成共识。 区块链发展中的合约是什么?

契约是大家行为的共同规范,少数人的不遵守不会影响到整个系统。

在比特币中,所有节点都按照合约处理每一笔转账交易。 例如A转100个比特币给B比特币交易过程是不是非得记录,A所在节点需要验证使用的UTXO是否属于A,并确保其中有足够的钱给B,然后将交易记录广播给所有其他节点,其他节点会验证A使用输入的UTXO属于A且存在(检查交易记录签名),且转账输入输出相等,验证成功后才会将交易记录在区块链中。 如果部分节点不按照上述流程进行转账和验证,整个系统最终会保证结果的正确性。

密码算法哈希计算

哈希计算的特点:

输入长度为任意长度,输出为固定长度。 计算过程是高效的。

为了满足密码学的安全性,散列函数需要满足以下条件:

反冲突。 两个不同的输入产生相同的输出,这就产生了冲突。 为了满足安全性,哈希函数需要保证很难找到两个输入具有相同的输出,需要付出大量的时间。 信息隐藏。 哈希函数的输出是得到的,输入是不可逆的。 益智友好。 鉴于需要满足结果,很难找到满足条件的输入。

常用哈希算法:MD5、SHA1、SHA2、SHA3。

区块链中使用的哈希计算:

区块链哈希。 在区块链中,通过对区块头进行哈希计算,得到区块的哈希值。 该哈希值将作为下一个块的一部分保存,因此哈希值充当链接各个块的指针。 这确保了每个块在添加到链中后不能被修改。 默克尔树。 Merkle根用于验证区块中的交易记录是否正确。 比特币中的 Merkle 根是二叉 Merkle 树。 首先对交易的哈希值进行配对,计算出一个新的哈希值,然后对新的哈希值进行配对,计算出下一个哈希值,依次递归,直到计算出最后一个哈希值,这样就形成了哈希树。 Merkle树可以验证交易记录的完整性。非对称加密算法

常用的非对称加密算法:

RSA。 RSA算法的公钥和私钥是一对大质数。 从公钥和密文中恢复明文的难度相当于分解两个大质数的乘积。 质数越大,越难破解。 但是计算速度较慢。 椭圆曲线密码算法。 安全性高,公钥生成容易,存储空间小。 比特币使用 SECP256k1 算法。 编解码算法ASCII编码。 常用的字节编码。 Base64编码。 二进制文件用64个字符表示,所以每3个字节表示为4个字符,x00用不足3个字节补足。 Base58编码。 去掉了Base64中一些容易混淆的东西,比如0、O、I、1和易转义的+、/。 Base58校验。 在Base58的基础上,增加了校验码。 比特币在生成地址的时候,最后使用了Base58check,可以在收到地址的时候进行校验。 如果计算出的校验值与接收到的校验值不同,则认为数据无效。 具体应用密码算法生成账户地址。 使用公钥生成地址作为账户使用,使用私钥验证账户。 价值转移守卫。 用私钥对交易进行签名,别人用公钥验证交易是自己发出的。 交易数据是用别人的公钥加密的,只有接收方才能解密数据。 完整性证明。 通过哈希系数查看区块数据。 零知识证明。 为了证明您对某笔交易的所有权,您只需对交易的部分内容进行解码即可证明所有权,无需提交自己的密码进行验证。 共识算法FLP定理(可靠通道,节点故障)

在网络可靠且节点故障最小化的异步模型中,不存在可以解决一致性问题的确定性算法。

CAP定理

分布式计算不能同时保证一致性、可用性和分区容错性。

两军问题(不可靠信道)

A -> BA 和 C 需要联合攻击 B 才能获胜,所以双方需要约定一定的时间发起攻击,而且双方的信使需要经过 B,因此信使可能被 B 截获.A向C发送消息,C需要发送确认信息告诉A消息已经到达。 如果他不发送确认,A也会认为消息被B截获了; 同样,A收到C的确认后,也需要向C发送确认消息,否则C会认为消息被B截获了。如此来回,导致A和C无法达成最终的协议。

两军问题的症结在于两点之间的信道传输不可靠。

拜占庭将军问题(可靠通道,无节点故障,节点产生错误数据)

N个将军通过信使传递消息,需要商定一个计划,但是这N个将军中有叛徒,会故意发送假消息破坏计划。 事实证明,如果超过 1/3 的将军叛逃,则不可能达成一致的计划。

如何达成共识

既然保证一致性存在上述问题,那么如何实现一套实用的共识算法呢?

激励机制:采用一定的激励机制。 根据博弈论,每个节点都会使自己的利益最大化,最终大多数节点都会按照规则行事。

随机性:拜占庭问题是每个将军通过协调达成共识。 如果有将军说了算,那问题就简单多了。 在去中心化系统中,如何选择这个“通用”?

常用的共识算法:

下面简单介绍一些共识算法。

Paxos算法

Paxos算法解决的是非拜占庭问题,有故障节点,但没有恶意节点。

算法分为提议者和接收者。 提议者发出提案,接受者投票,半数以上认为提案通过。

在处理多个提议者和多个接收者时,采用“两阶段提交”方案:准备阶段决定对哪个提议进行投票,提交阶段确认提议是否通过。

筏算法

该算法通过选择一个“通用”角色来解决一致性问题。 可容忍的错误数是 (n-1)/2。

当没有“将军”时,会发起选举,大家投票,得票最多的成为“将军”。 当出现平票时,选举失败,每人随机分配一个睡眠时间。 沉睡者只能投票,不能被选举。 最先醒来的将发起新一轮选举。 The elected "general" keeps the heartbeat of everyone. 一旦“总”失败,就需要重新选举。 “将军”负责发布指令。 接到上级的指示后,村长就会给大家下达指示。 在收到过半数的反馈后,“将军”就会向上级确认数据已经收到。 “将军”收到上级的回复后,会通知大家数据已经提交。 PBFT算法

Pbft算法的基本过程主要有以下四个步骤,f表示错误节点的个数。 容错数为n/3。

客户端向主节点发送请求。 主节点是随机选择的。 主节点将请求广播给其他节点,节点执行pbft算法的三阶段共识过程。 节点完成三阶段过程后,向客户端返回消息。 客户端收到来自f+1个节点的相同消息后,说明共识已经正确完成。

PBFT算法多用于联盟链,达成共识时延在秒级,基本满足商业需求。

PoW 工作量证明算法

算法流程:

向所有节点广播交易; 每个节点接收交易信息并将其放入区块中; 每一轮,获得打包权的节点广播其预留区块; 其他节点在验证区块中的交易无误后接收区块; 其他节点将接收到的块的哈希值放入自己创建的块中,以确认块的正确性。

节点以最长的链为合法链。 节点收到别人的区块后,可以选择拒绝,也可以根据该区块继续挖矿。 如果你选择拒绝,你必须自己计算出一个正确的区块,但是导致你重新开始的链不会比主流链长,所以你构建的链不会被认可; 根据“不利原则”,节点会主动接收别人广播的区块,并根据区块继续挖矿。

工作量证明的特点:

完全权力下放; 性能消耗大,效率低; 共识期长; 1/2 的容错率。 PoS 权益证明

与 PoW 不同,PoS 不像 PoW。 任何人都可以参与区块的生成,但需要事先在区块链上投入一定的权益。 您投资的越多,您就会获得越多的信任。 整个过程如下:

加入 PoS 机制的人成为代币持有者和验证者; 根据持有的代币数量选择一个赋予打包区块的权利; 如果在规定的时间内没有计算出新的区块,则选择下一个节点赋予打包权; 打包成功后进行广播,被大家接受后,可以获得一定的利息。 这种利息取决于持有的货币数量和货币的年龄。 每次打包成功后,币龄会被清零。 权益证明

委托权益证明(Delegated Proof of Stake)在PoS的基础上进行了改造。 每个代币持有者可以选出一个代表代替他自己来计算和验证区块链。 代表将为此获得一定的奖励,代表可以自愿退出或被淘汰。 该算法减少了参与节点的数量,减少了节点的响应时间,提高了交易效率。

区块链区块扩容遇到的问题

比特币的区块限制为1M,导致记录的交易数量少,限制了比特币在大规模快速交易中的应用,因此提出两种解决方案来解决这个问题:

块扩展。 将块大小设置得更大。 隔离见证。 证明交易合法性的签名从区块中删除。

由于比特币是去中心化的,不可能所有的节点都进行改造,而这些节点的拥有者对改造也有不同的看法。 因此,不同的节点选择会导致整条链分叉,从而形成两种区块链。

侧链

为了让资产能够在不同的区块链之间转移,侧链的概念被提出。 主侧链之间的转账步骤如下:

在比特币主链上锁定一定数量的比特币,在侧链上激活等值资产; 侧链根据自己的游戏规则交易这些资产; 相应的,侧链可以冻结相应的资产,并将比特币返还给主链。链闪电

为了加快交易速度,减轻主链压力,闪电网络的概念被提出。 闪电网络在主链外开辟了快速交易通道,临时记录一段时间内的频繁交易,定期将最终结果提交给主链。

区块链分叉的问题

由于部分节点采用新版合约,与旧版节点不兼容,导致区块链分叉为老节点生成的区块链和新节点生成的区块链。 如果一直维持这种局面,那么就会导致整个区块链分裂成两个系统,形成“各执一词”的局面。

除了版本差异造成的分叉之外,还有可能因为网络问题导致部分节点被隔离,从而使这些分裂的节点形成一个小的区块链系统,由此产生的区块链和主链也会有较大的差异。 在某一时刻,这些节点重新加入主链,整个系统需要花费一些成本来弥合原来的差异。

51% 算力

如果一个人拥有区块链一半以上的算力,他就拥有了大部分的打包权,他可以在打包交易的时候作弊获利。

拥有算力优势的人也可以拒绝一些交易记录,使得一些交易长期无法完成。

如果有算力优势的人使用某种手段违反了原来的约定,这会阻碍其他人挖矿,对整个区块链造成负面影响。

私钥丢失

私钥的丢失代表了整个区块链所拥有的财富的丢失,目前还没有办法找回。

交易确认延迟

并不是所有的交易都会被立即打包成区块,一笔交易被写入区块链需要一定的时间。 在交易被确认之前,它被缓存在内存中。 计算打包区块需要时间,区块大小有限制。 即使打包进区块,也必须被大多数节点接受,所以一笔交易的最终确认周期较长。

部分节点会根据手续费来控制打包顺序,因此普通交易更难打包成块。

不断扩展的区块链

随着时间的推移交易数量的积累,越来越多的区块链数据将被用来承载记账功能,查询和存储这些数据将变得越来越困难。

内容参考《白话区块链》