主页 > imtoken官方地址 > 比特币是用什么语言写的? 比特币代码是开源的吗?

比特币是用什么语言写的? 比特币代码是开源的吗?

imtoken官方地址 2023-09-28 05:13:12

比特币是用什么语言写的? 比特币代码是开源的吗? admin08-18 19:03173 观看次数

今天我们将编写第一笔比特币交易。 为此,我们将使用一个名为 bitcore 的 JavaScript 库。 JavaScript 是最流行的现代编程语言,几乎每个开发人员都知道它,因此它使这篇文章具有普遍性和对更广泛的读者有用。

在继续阅读本文之前,您应该至少了解比特币区块链如何工作的基本技术知识。 如果没有,请花几分钟阅读区块链简介。 如果你有更多时间,比如几个小时,我建议你阅读精通比特币。

让我们从一个具有以下依赖项的新 NPM 项目开始:

[...]“依赖项”:{“bitcore-explorers”:“^1.0.1”,“bitcore-lib”:“^0.13.19”} [...]

打开 index.js 文件并导入 bitcore 库:

var bitcore = require("bitcore-lib");

要花费比特币,我们需要一个包含比特币的地址和一个允许我们花钱的私钥。 我们将导入 WIF 版本的私钥。 WIF 是 Wallet Import Format 的缩写。 它可以轻松地在比特币钱包之间导入密钥。 然后我们将从该私钥创建一个测试网地址:

var privateKeyWIF = 'cQN511BWtc2dSUMWySmZpr6ShY1un4WK42JegGwkSFX5a8n9GWr3';var privateKey = bitcore.PrivateKey.fromWIF(privateKeyWIF);var sourceAddress = privateKey.toAddress(bitcore.Networks.testnet);

警告! 在那个例子中,我与你分享我的私钥。 你不应该在现实生活中这样做。 拥有私钥的人是分配给该私钥地址的比特币的所有者。 这是所有权的标志。

在这种情况下,我只是与您分享了用于创建测试网地址的密钥。 Testnet 是为软件和脚本测试创建的比特币网络。 它不包含真正的比特币,只有测试比特币。 您可以免费获得它们。 就算有人偷了也没什么大不了的。 我可以冒险给你一个开箱即用的例子。

如果有人使用/窃取了该地址的所有测试比特币,您可以对其进行充值。 复制地址 mibK5jk9eP7EkLH175RSPGTLR27zphvvxa 并将其粘贴到表格中。

是时候创建我们要发送测试比特币的 targetAddress 了。

var targetAddress = (new bitcore.PrivateKey).toAddress(bitcore.Networks.testnet);

如果您有任何比特币,请检查我们的源地址。 比特币网络使用 UTXO 来存储这些信息。 UTXO 是 Unspent Transaction Output 的缩写。

我们有一个问题,我们没有比特币网络客户端。 整个节点至少需要 125 GB 的硬盘空间,这对我可怜的 MacBook Air 来说太多了。 我们必须找到解决办法。 我们不得不请人为我们阅读比特币网络。 并广播我们的交易。

在这种情况下,我们正在失去比特币区块链的最大优势。 该系统的架构使我们不必信任任何一方。 网络共识、数学和加密使存储在区块链中的数据值得信赖。 但是现在我们请中间人为我们读取这些数据。 他可能会向我们提供虚假或过时的数据。

我们将使用 bitcore-explorers 库中的 Insight。 由于它非常受欢迎,而我们只是来这里学习的,所以我们可以假设它是可信的。 最终的解决方案应该是拥有自己的比特币全节点。

好吧,让我们使用 Insight 来检查我们将花费多少比特币。

var Insight = require("bitcore-explorers").Insight; var insight = new Insight("testnet");insight.getUnspentUtxos(sourceAddress, function(error, utxos) { if (error) { console.log(error); } else { console.log(utxos); // 交易代码去这里}

UTXO 的输出是一个数组。 它的每个元素都包含有关作为 UTXO 所有者的地址和聪(1 聪 = 0.00000001 比特币)的信息。 它看起来像这样:

[ ]

是时候创建我们的交易了:

var tx = 新的比特核。 交易();

让我们将收到的 UTXO 设置为交易的输入。 需要注意的一件重要事情:我们不是从地址而是从 UTXO 获取比特币。

tx.from(utxos);

让我们设置交易的收件人和我们要交付给他的金额。 数量以比特币的最小单位聪为单位:1 聪 = 0.00000001 比特币。 这是我们交易的输出:

tx.to(targetAddress, 10000);

是时候讨论价值的变化了。 UTXO 是指向我们地址但尚未花费的交易输出。 UTXO 就像一张钞票。 如果你口袋里有一张 5 美元的钞票,想买一瓶 2 美元的啤酒,你不会削减一部分钞票并交给收银员。 你给一张 5 美元的钞票,得到 3 美元的零钱。 它与 UTXO 完全相同。 您必须在交易中使用整个 UTXO 并指定找零值和地址,然后找零应该被退回。

什么鬼? 我必须指定更改值吗? 在商店里,当我以 5 美元的价格购买 2 美元的啤酒时比特币的代码,我会收到 3 美元的退款。 很明显。 无需计算。

在比特币中,略有不同。 事实上,零钱只是交易的另一个输出。 输出总和应略小于输入总和。 差额称为挖矿费。 您向矿工付款以将其包含在交易块中。 像 bitcore.io 这样的钱包或库会估算我们的挖矿费用。 所以在我们的例子中,我们应该将零钱返回到指定的地址。

TX。 更改(源地址);

您会注意到我们使用了 sourceAddress。 结果,该地址的一些现有 UTXO 消失了(它们将被花费),但也创建了一个新的 UTXO(来自更改的 UTXO)。

在现实生活中,钱包会为您进行的每笔交易使用新地址。 这样做的目的是提高匿名性。 一个钱包怎么可能从一个私钥创建多个公钥和地址?阅读确定性钱包以找出答案

大! 一切都准备好了! 我们现在唯一要做的就是用我们的私钥签署交易并将其发送到比特币区块链。 正如我之前提到的,我们没有自己的比特币客户端。 我们使用外部工具与区块链进行通信。 问题是:我们能相信它吗? 当我们广播交易时,不存在工具捕获私钥或操纵交易(例如更改目标地址)的风险。 如果该工具进行了上述任何更改,签名将不再有效,交易将被拒绝。 唯一的风险是该工具根本不会发送交易。 但是我们可以在任何区块链浏览器中验证它。 所以我们可以毫无畏惧地再次使用 Insight:

tx.sign(privateKey);tx.serialize();insight.broadcast(tx, function(error, transactionId) { if (error) { console.log(error); } else { console.log(transactionId); }} );

就这样! 交易被广播到网络。 如果一切顺利,我们将收到交易 ID。 然后将其复制并粘贴到比特币区块链浏览器中,看看它是否真的有效。

完整的代码可以在 GitHub 上找到。

推荐您浏览汇智网各种编程语言的区块链教程和区块链技术博客,深入了解区块链、比特币、加密货币、以太坊、智能合约。

C#以太坊主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器与交易等Java比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等。在代码中集成比特币支持功能,如创建地址、管理钱包、构建裸交易等,难得的Java工程师比特币开发学习课程。 Java以太坊开发教程,主要为java和android程序员讲解区块链以太坊开发的web3j详解。 php比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时还详细讲解了如何使用Php集成比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习教程。 PHP以太坊主要介绍使用PHP进行智能合约开发交互、账户创建、交易、转账、代币开发、过滤器和交易等。 Python以太坊,主要针对python工程师使用web3.py开发区块链以太坊进行详细介绍。 以太坊入门教程,主要介绍智能合约和dapp应用开发,适合入门。 以太坊开发进阶教程比特币的代码,主要介绍使用node.js、mongodb、blockchain、ipfs实现去中心化电商DApp实战,适合进阶。 EOS入门教程,本课程帮助您快速上手开发EOS区块链去中心化应用,涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后利用所有知识点完成一个便签DApp的开发。