如何使用QuickNode进行非托管交易

  • QuickNode
  • 发布于 2024-05-19 14:29
  • 阅读 31

本文详细介绍了非托管钱包与托管钱包的区别,并指导如何使用QuickNode进行非托管交易。文章涵盖了非托管钱包的优势、设置QuickNode以太坊端点、创建钱包、获取测试ETH以及发送非托管交易的步骤。

概述

在加密技术和区块链领域,私钥是最敏感的数据之一。然而,关于选择托管钱包(钱包提供商保管用户的私钥)和非托管钱包(钱包用户自己保管私钥)一直存在争议和困惑。本指南将深入探讨托管钱包和非托管钱包之间的区别,以及如何使用 QuickNode 进行非托管交易。

前提条件

  • 系统上已安装 Node.js。
  • 文本编辑器。
  • 终端或命令行。

什么是非托管钱包?

非托管钱包是一种区块链钱包,钱包所有者完全控制并保管 私钥。非托管钱包可以通过两种方法创建和访问。使用私钥(一串字母数字字符)或使用 助记词,即由 12-24 个单词组成的短语,存储在钱包所有者一端(通常写在纸上并存储在安全的地方,远离互联网和计算机)。

以下是非托管钱包的一些优势:

  • 自主性 - 用户完全控制自己的资金 - 因为用户是唯一完全控制其资金的实体。他们不必依赖任何第三方来管理或保护他们的钱包。
  • 安全性 - 由于用户将私钥存储在互联网或计算机之外,发生安全漏洞的可能性几乎可以忽略不计。
  • 即时提现 - 使用非托管钱包,用户不必依赖任何第三方来确认他们的提现请求。这简化了整个流程,允许即时提现。

非托管钱包 vs. 托管钱包

区块链中托管钱包与非托管钱包的区别 / #web3 - YouTube

QuickNode

131K 订阅者

区块链中托管钱包与非托管钱包的区别 / #web3

QuickNode

搜索

信息

购物

点击取消静音

如果播放没有立即开始,请尝试重新启动设备。

你已退出登录

你观看的视频可能会被添加到电视的观看历史记录中,并影响电视推荐。为避免这种情况,请取消并在计算机上登录 YouTube。

取消确认

分享

包括播放列表

检索共享信息时出错。请稍后再试。

稍后观看

分享

复制链接

观看

0:00

/ •直播

在 YouTube 上观看

订阅我们的 YouTube 频道以获取更多视频! 订阅

  • 私钥保管人 - 在比较加密钱包时,首先要考虑的是私钥的持有情况。对于非托管钱包,用户持有私钥。对于托管钱包,第三方(通常是钱包提供商或交易所)控制私钥。
  • 交易类型 - 非托管钱包进行的交易会立即在链上可见。相比之下,托管钱包进行的交易必须经过第三方的各种检查,并且容易出现延迟。
  • 安全性 - 在非托管钱包中,用户将私钥存储在本地。除非用户分享私钥或设备被盗,否则钱包非常安全。在托管钱包中,所有敏感的用户数据(如私钥)都存储在热数据存储(即时更新)和冷数据存储(定期更新)中,通常容易受到黑客攻击。
  • 离线访问 - 非托管钱包不需要主动连接互联网。托管钱包需要互联网连接,因为数据通常存储在中心化服务器上。
  • 备份和恢复 - 非托管钱包的唯一缺点是,一旦私钥/助记词丢失,就无法恢复钱包。相比之下,托管钱包用户可以请求第三方进行恢复。

使用非托管节点

QuickNode,我们在全球运行许多节点。所有这些节点都始终连接到互联网并且是动态的。QuickNode API 连接到一个由强大节点组成的全球网络。这些节点并不总是连接到单一的基础设施组件。API 设计为在单一基础设施组件之间执行动态切换,以提供更好的稳定性和正常运行时间。这使得在节点上存储任何敏感数据都不太理想,因为它们经常处于变化中。还有一个安全方面的问题,因为这些节点面向互联网。为了用户数据的安全,我们不允许它们存储私钥。由于它们是动态的,它们经常改变状态以提供更好的性能。这意味着密钥可能会丢失,从而导致用户数据丢失。这些是运行非托管节点并让用户成为其钱包的唯一控制者的原因。在接下来的部分中,我们将看到如何使用库创建钱包,进行非托管交易,并使用 QuickNode 发送交易。

设置你的 QuickNode Ethereum 端点

我们今天可以使用几乎任何 Ethereum 客户端,例如 Geth 或 OpenEthereum(原 Parity)。由于这对于发送交易来说有点复杂,我们只需在此创建一个免费的 QuickNode 账户 here 并轻松生成一个 Ethereum 端点。我们将使用 Kovan 测试链进行转账。创建免费的 Ethereum 端点后,复制你的 HTTP Provider URL:

Quicknode Ethereum 端点入门页面的截图,包含 HTTP 链接和 WSS

你稍后需要这个,所以复制并保存它。

创建钱包并获取一些测试 ETH

我们可以使用许多可用的 web3 库来创建钱包。今天我们将使用 ethers.js,一个 JavaScript 库,来创建一个将签名并发送交易的钱包。你还可以参考我们的指南,了解如何在 Go / Python / Ruby / PHP 中创建 Ethereum 钱包。

我们将使用 npm(Node 包管理器)安装 ethers,它随 node.js 一起提供。打开你的 cmd/终端并输入以下内容以检查是否安装了 node.js:

node -v

这应该返回已安装的 node.js 版本;如果未安装,请从其 官方网站 下载 node.js 的 LTS 版本。

让我们为我们的项目创建一个新目录,并将该目录作为我们在 cmd/终端中的当前工作目录:

mkdir noncusTransaction
cd noncusTransaction

现在通过输入以下内容安装 ethers:

npm i ethers@5.7

确保你安装的是 Ethers.js 版本 5.7

此步骤中最常见的问题是 node-gyp 的内部故障。你可以按照 node-gyp 安装说明 进行操作。

注意:如果你遇到 node-gyp 问题,你需要确保你的 python 版本与上述说明中列出的兼容版本之一匹配。

另一个常见问题是缓存陈旧;只需在你的 cmd/终端中输入以下内容即可清除 npm 缓存:

npm cache clean

如果一切顺利,ethers.js 将安装在你的系统上。

现在,打开一个文本编辑器并创建一个名为 transaction.js 的新 javascript 文件。将以下内容复制粘贴到文件中。

var ethers = require('ethers');
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);

上面的代码解释:

第 1 行:导入 ethers 库。

第 2 行:将私钥存储在变量 privateKey 中,确保获取你自己的私钥。你可以按照 本指南 了解如何使用 JavaScript 生成私钥。

注意:如果你要将代码放在互联网上(例如公共的 github 仓库),那么最好将私钥存储在 .env 文件 中,并通过环境变量将其导入到你的主代码中。

第 3 行:使用私钥创建新的钱包地址并将其存储在变量 wallet 中。

第 4 行:打印钱包地址以及一个字符串。

现在,保存文件并运行脚本。

node transaction

它应该看起来像这样。

现在,让我们获取一些测试 ETH 以在交易期间发送并支付 gas 费用。从输出中复制地址,转到 Kovan faucet 使用 GitHub 或 GitLab 登录,将钱包地址粘贴到 faucet 的文本字段中,然后点击“Send me KETH!”。

你可以通过将地址粘贴到 Kovan Etherscan 来检查是否收到了测试 ETH,你将看到 ETH 余额。

发送非托管交易

让我们使用我们之前创建的钱包创建一个代币转账交易,并使用 QuickNode 将交易发送到链上。

将你的 transaction.js 更新如下:

var ethers = require('ethers');
var url = ''ADD_YOUR_ETHEREUM_NODE_URL'';
var customHttpProvider = new ethers.providers.JsonRpcProvider(url);
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);
tx = {
  to: "0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE",
  value: ethers.utils.parseEther("0.05"),
  chainId: 42,
  nonce: 11
}
customHttpProvider.estimateGas(tx).then(function(estimate) {
    tx.gasLimit = estimate;
    tx.gasPrice = ethers.utils.parseUnits("3.14085197", "gwei");
    wallet.signTransaction(tx).then((signedTX)=>{
    customHttpProvider.sendTransaction(signedTX).then(console.log);
    });
});

所以继续将 **ADD_YOUR_ETHEREUM_NODE_URL** 替换为上面部分的 HTTP provider。

上面的代码解释:

第 1 行:导入 ethers 库。

第 2 行:将我们的 QuickNode URL 存储在 url 变量中。

第 3 行:实例化新的 ethers provider 并将其存储在变量 customHttpProvider 中。

第 4 行:将私钥存储在 privateKey 变量中(你必须生成自己的私钥)。

第 5 行:从私钥创建 新钱包

第 6 行:打印钱包地址以及一个字符串。

第 7-12 行:初始化我们的 交易对象,并提供诸如‘to’之类的参数,该参数包含接收者的地址(交易要发送到的任何地址)。其次,‘value’包含要转移的 ETH 值。第三,‘chainId’是链的网络 ID(这里为 42,因为我们使用的是 Kovan 测试网)。最后,‘nonce’是发送者已发送的交易数量。这里的值应始终是之前的交易数量 +1。

我们还可以使用 ethers.js 的 getTransactionCount() 方法 获取给定地址的 nonce。

第 13-14 行:使用 provider 估算 gas,然后将其存储在交易对象的 gasLimit 变量中。

第 15 行:设置 gas 价格并将其存储在交易的 gasPrice 变量中。

第 16 行:使用钱包签名交易

第 17 行:使用 provider 发送已签名的交易 并将交易详细信息打印到控制台。

保存文件并使用以下命令运行它:

node transaction

它将给出类似以下的输出:

复制交易哈希并将其粘贴到 Kovan Etherscan 的搜索栏中,以检查它是否已确认。

结论

恭喜你完成了非托管交易并成为你资金的唯一控制者。切勿与任何人分享你的私钥;始终将其存储在安全的地方,以确保你的钱包和资金的安全。

订阅我们的 新闻通讯 以获取更多关于 Ethereum 的文章和指南。你还可以随时通过 TwitterDiscord 社区服务器联系我们,那里有一些你会遇到的最酷的开发人员 :)

我们 ❤️ 反馈!

让我们知道 如果你有任何反馈或对新主题的请求。我们很乐意听取你的意见。

  • 原文链接: quicknode.com/guides/eth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。