Sibit Demonstrates How Bitcoin Works

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

比特币 对我来说一直是一个巨大的技术谜团。我读到的所有关于它的文章都听起来非常复杂,完全难以理解。直到我被困在一个任务中:我必须将Zold,我们的实验性非区块链加密货币,与比特币进行整合。我不得不研究比特币的架构,然后我找到了这个简短而简单的视频(我强烈推荐你观看)。我成功实现了整合,并理解了区块链的工作原理。这是我的简短总结。希望对你有所帮助。

首先,有一个私钥,它是一个短小的文本片段,例如:

我是如何生成它的?这是随机的。你也可以生成一个。安装Sibit,我的Ruby gem,并运行以下命令(它是一个命令行工具):

每次调用sibit generate,您都会获得一个新的私钥。它只是一段随机的文本(实际上是一个很大的十六进制数)。然后,您可以使用私钥创建一个地址。每个私钥只对应一个地址。以下是创建地址的步骤:

您将其交给希望向您发送付款的人。比特币交易并不是您想象中的银行交易。比特币交易包含若干个输入输出地址。例如,三个输入地址每个有10比特币,两个输出地址分别有25比特币和5比特币。所有输入的总和必须等于所有输出的总和。

因此,在一次交易中,您可以在地址之间转移大量数字货币。您可以将一百个输入地址发送到另外一百个输出地址。当我发现这一点时,我感到有些惊讶。交易可能相当大。而大小很重要。它们以字节计算。一次只有一个输入和一个输出的交易将消耗220个字节。请记住这个数字,我们很快会回到它。

正如您已经想象到的那样,为了计算您地址上有多少钱,您只需浏览整个数据库中的所有交易(已经有超过4亿条交易),并查看有多少交易将您的地址作为其输出(您的输入)。然后扣除任何既是您的输出又是其他人的输入的交易。您就得到了余额。有很多公共和免费的网络服务可以为您完成此工作。您不需要自己搜索整个数据库,只需使用Blockchain API(例如),他们将为您提供有关任何比特币地址的信息。您可以尝试这个地址:

这是以satoshi为单位的0.2 BTC。点击这里,你会看到这个地址的输入和输出。只有一笔交易涉及到了这个地址。那个交易有一个输入和两个输出。其中一个输出是我的。我得到了0.2个比特币,它们仍然在这里,因为没有交易将它们移动到其他地方。

因此,简单来说,区块链数据库是一个包含每个交易的输入和输出的大型列表。一旦新的交易进入这个数据库,几个地址的余额就会发生变化。数据库只会增长,之前的交易不能被删除或修改。因此,一旦你的交易进入,资金就会从一个地址转移到另一个地址。

要创建一笔交易,你需要知道所有的输入地址、它们的私钥以及所有的输出地址。如果你想发送的金额大于你在单个地址中拥有的金额,你就需要多个输入。比特币中有一个被称为钱包的东西,它是一种软件,比如Electrum,它可以跟踪你所有的地址,并知道如何创建一笔交易,将多个地址组合起来作为输入。就是这样。

所以,你知道输入,你指定输出,并且你预计会留下一小部分未使用的金额。假设你的输入有10,000 satoshi,你指定了一个输出为8,000。你留下了2,000未使用。它们被称为矿工费。你将你的交易发送到所有的比特币节点,它们将其放入内存池,并尝试将几千个交易合并成一个区块。它们一起尝试,只有其中一个成功,大约每十分钟一次。一旦一个获胜者成功解决一个区块,它就会赢得你在交易中未使用的那2,000。区块中的每一笔交易都会向这个获胜者支付一笔小费。

有可能不支付任何费用吗?是的。然而,你在交易中留下的费用越小,你的交易进入下一个区块的机会就越低。每个矿工都希望从每个区块中获得最大利益,并在尝试挖掘时将最“慷慨”的交易放入区块中。

费用取决于交易的字节大小。由于任何交易都可能包含多个输入和输出,所以只有大小是重要的。例如,我在这笔交易中支付的费用是8,971 satoshi,大约是每字节40 satoshi,因为我的交易包含225个字节。

要将你的交易发送到所有的比特币节点,你有两个选择。第一个选择是启动你自己的完整节点,它将通过比特币协议其他节点进行通信。第二个选择是使用HTTP中继之一,你只需在POST HTTP请求中发布你的交易,中继会将其发送到所有的比特币节点;这是其中一个。

Sibit可以自动化这个过程。你只需说:

这里,第一个参数是您要发送的金额。第二个参数是您想保持不变的手续费。为了帮助您避免计算,我将它简化了。只需说SMLXL,手续费就会被更或多少地计算正确。第三个参数是由冒号分隔的地址及其私钥的列表。第四个参数是目标地址(Sibit使得只能发送到一个地址)。最后一个参数是将会发送找零(change)的地址。

如果您的输入中有50,000 satoshi,并且您想发送15,000 satoshi给一个朋友,您必须找到一个地方将其他的35,000 satoshi发送过去,当然还要减去矿工费。您只需提供自己的地址,找零将会送到那里。

这基本上就是您使用比特币和区块链所需了解的全部内容。我错过了什么吗?

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 04:47

sixnines availability badge   GitHub stars