主页 > imtoken钱包官网苹果版 > 我的区块链技术学习笔记(十二):查看你的账户余额

我的区块链技术学习笔记(十二):查看你的账户余额

imtoken钱包官网苹果版 2023-04-24 06:35:58

接过昨天的话题,我们继续说交易的问题,如何查看账户余额,下面开始:

事实上,它是存储“硬币”的输出(注意,就是上面的 Value 字段)。 这里的存储指的是用一个数学谜题锁定输出,这个谜题保存在PubKey中。 在内部,比特币使用一种称为 的脚本语言,它定义了锁定和解锁输出的逻辑。 虽然该语言相当原始(故意避免潜在的黑客攻击和误用)且不复杂,但我们不会在这里讨论它的细节。 您可以在此处找到详细说明。

比特币地址查余额_怎么看比特币余额_币看比特币

发送硬币

现在,我们想发送一些硬币给其他人。 为此怎么看比特币余额,我们需要创建一个新交易,将其放入一个区块中,然后挖掘该区块。 以前我们只实现了 coinbase 交易(这是一种特殊的交易),现在我们需要一个通用的普通交易:

币看比特币_比特币地址查余额_怎么看比特币余额

在创建新的输出之前,我们必须首先找到所有未花费的输出并确保它们具有足够的价值(value),这就是 FindSpendableOutputs 方法所做的事情。 然后,对于找到的每个输出,都会创建一个引用该输出的输入。 接下来,我们创建两个输出:

一个被收件人地址锁定。 这是将硬币实际转移到其他地址。 一个被发件人地址锁定。 这是一个变化。 只有当未花费的输出超过新交易所需时才会产生。 记住:输出是不可分割的。

FindSpendableOutputs 方法基于之前定义的 FindUnspentTransactions 方法:

怎么看比特币余额_币看比特币_比特币地址查余额

此方法遍历所有未花费的交易并累积其价值。 当累计值大于或等于我们要发送的值时,它停止并返回累计值怎么看比特币余额,以及按交易 ID 分组的输出索引。 我们只需要提取足够的钱来支付。

现在,我们可以修改 Blockchain.MineBlock 方法:

最后,让我们实现发送方法:

发送硬币意味着创建新的交易并通过挖掘新区块将其打包到区块链中。 然而,比特币不会一次性完成所有这些事情(尽管我们当前的实现是这样做的)。 相反,它将所有新交易放入一个内存池中,然后当矿工准备好挖掘一个新区块时,它会从内存池中提取所有交易,创建一个候选区块。 只有当包含这些交易的区块被挖掘并添加到区块链时,其中的交易才开始被确认。

让我们检查发送硬币是否有效:

非常好! 现在,让我们创建更多交易以确保从多个输出发送硬币也能正常工作:

币看比特币_怎么看比特币余额_比特币地址查余额

现在,Helen 的硬币被锁定在两个输出中:一个来自 Pedro,一个来自 Ivan。 让我们将它们发送给其他人:

比特币地址查余额_币看比特币_怎么看比特币余额

看起来不错! 现在,测试一些失败案例:

结束并不容易,但现在交易终于来了! 但是,我们仍然缺少一些关键功能,例如比特币:

地址。 我们还没有基于私钥的真实地址。 奖赏(奖赏)。 现在挖矿肯定是赚不到钱的! UTXO 集合。 获取余额需要扫描整个区块链,当块很多时,这可能需要很长时间。 另外,如果我们要验证后续交易,将需要很长时间。 UTXO 集合就是为了解决这些问题,加速交易相关的操作。 内存池(mempool)。 在交易被打包成区块之前,这些交易存储在内存池中。 在我们目前的实现中,一个区块只包含一个交易,效率很低。

未完待续,敬请期待!