我在阅读了过去几天的一些文章后,对比特币区块链技术的理解。我不确定我的理解是否100%正确。我写这封信是为了有人能纠正我的错误,这对其他新人也有帮助。
案例:A想向B发送10个BTC
A创建了一个地址,它是几个字的哈希(sha256)。类似于B。这是私钥;比特币金额的所有权验证器。使用私钥生成公钥。钱包应用程序提供种子字,通过SHA256散列生成私有地址,这样即使丢失了私钥,也可以从秘密种子字中释放出来。每个人都知道这个公钥,但是私钥是秘密的,不能共享。无法从公钥获取私钥。私钥是一个有权使用一定数量BTC的数学证明。这证明了金钱的所有权。让我们看看,不知何故A现在有超过10个BTC。
A向B的公钥发送10个BTC。公钥是事务的“收件人地址”。消息(A向B发送10个BTC)使用A的私钥签名。这是交易的数字签名。该事务消息被广播到每个人(整个区块链网络节点)。数字签名确认真正的所有者创建了交易。
矿工们将挑选这个交易以及其他未决交易,并尝试创建区块链的下一个区块。所有的交易都对每个人开放。对于示例事务案例,矿工将通过检查完整的区块链数据库(链的所有已完成块)来验证事务是否真的有超过10个BTC。如果没有,交易将被拒绝,不会被添加到块他将试图解决这个难题。
矿工将验证未决交易的交易数量(尚未添加到区块链中任何区块的交易)。
不同的矿工可以使用不同数量的有效事务来形成一个块。但是赢得数学难题的矿工,他创建的区块将作为区块链的下一个区块添加。这个拼图是根据当前的难度(十六进制格式的19个散列前导零)得到散列(SHA256)。这是一个尝试和错误的基础过程,以获得所需的散列有19个零。哈希输出函数如下所示-
SHA256(时间戳+上一个块的哈希+MarkleRootHash(此块中的所有有效事务)+nonce)
矿工每次试图根据上述散列生成格式获得所需的散列时,都会更改nonce(整数)值。它需要大量的尝试,因此需要巨大的计算能力来解决这个难题。假设一个矿工得到了一个有19个零的散列。注意,事务“A向B发送10个BTC”是有效的,并且存在于这个示例块中,该示例块的散列刚刚找到19个前导零。
矿工得到了所需的哈希值和幸运的nonce值。使用这个nonce值,任何人都可以验证19个零的散列输出;因此,它是成功的区块。这个nonce值实际上是工作的证明。当大多数矿工都能证实这一点,并使工作取得成功时,这一点正逐渐成为共识。然后,块被添加到区块链数据库中。
由于此块包含事务“A向B发送10 BTC”。此事务也已成功完成。B得到10 BTC。这10个BTC的所有权属于B,因为B具有用作示例事务的“to address”的公钥的私钥。
比特币核心
块链
比特币
区块链钱包应用
分享
改进这个问题
跟随
1月28日1:57编辑
1月28日1:32问
用户3717550
111青铜徽章
添加评论
1个答案
大致正确。一些小细节是不对的。
#1.私钥只是256位数字。它们可以通过随机过程创建,或者在现代钱包中,作为分层确定性序列的一部分,其中每个密钥都是从种子以可重复的方式生成的。看到了吗https://learnmeabitcoin.com/technical/hd-wallets. 此外,钱包地址本身并不是公钥——尽管它是从公钥派生出来的。上面链接的网站也解释了这一点。
#3.交易明确地指以前的交易,并且是检查资金是否充足的交易(而不是“整个区块链”)。新交易还将处理任何过剩资金。
分享
改进这个答案
跟随
1月28日1:55回答
马夫布
11111青铜徽章
我仍然需要知道所有节点/矿工如何验证事务?例如,如果一个矿工有100笔交易,其中1笔交易是无效的(请求的金额超过了余额)。他伸手去摸想要的土豆。使用nonce值,所有其他矿工将能够验证区块,以达成共识。但是,所有矿商是如何达成协议,即待添加区块中的所有交易都是有效的呢用户3717550 1月28日20:22
所有事务都由节点单独验证。如果miner广播一个包含无效事务的块,它将被节点拒绝。事实上,无效事务甚至不会在网络上广播。验证工作由运行在所有节点上的比特币客户端完成marvb 1月30日2:06
“1笔交易无效(请求的金额超过余额)”除了所有者之外,没有人跟踪或关心余额。其他节点(钱包、矿工等)只关心个人“硬币”(交易输入)尚未消费,以及消费脚本(有效的所有权证明)是否得到满足红砖2月27日11:55
添加评论