主页 > imtoken钱包苹果版下载 > JavaScript编写自己的比特币交易代码

JavaScript编写自己的比特币交易代码

imtoken钱包苹果版下载 2023-01-17 13:53:17

摘要:今天我们将编写我们的第一笔比特币交易。 是为软件和脚本测试而创建的比特币网络。 最终的解决方案应该是拥有自己的比特币全节点。 数量以 表示,是比特币的最小单位,一个比特币。 正如我之前提到的,我们没有自己的比特币客户端。

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

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

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

[...]
"dependencies": {
    "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);
    // transaction code goes here
}

比特币代码是怎么样的_比特币开源代码查询_比特币概念股票代码

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

[  ]

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

var tx = new bitcore.Transaction();

让我们将收到的 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.change(sourceAddress);

比特币代码是怎么样的_比特币概念股票代码_比特币开源代码查询

您会注意到我们使用了 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 上找到。

我建议您浏览我的区块链教程和区块链技术博客,以深入了解区块链、比特币、加密货币、以太坊和智能合约。

java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。

php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

以太坊入门教程,主要介绍智能合约与dapp应用开发,适合熟悉javascript或某一开发语言的程序员入门。

这里是原文