本文详细介绍了非托管钱包与托管钱包的区别,并指导如何使用QuickNode进行非托管交易。文章涵盖了非托管钱包的优势、设置QuickNode以太坊端点、创建钱包、获取测试ETH以及发送非托管交易的步骤。
在加密技术和区块链领域,私钥是最敏感的数据之一。然而,关于选择托管钱包(钱包提供商保管用户的私钥)和非托管钱包(钱包用户自己保管私钥)一直存在争议和困惑。本指南将深入探讨托管钱包和非托管钱包之间的区别,以及如何使用 QuickNode 进行非托管交易。
前提条件
非托管钱包是一种区块链钱包,钱包所有者完全控制并保管 私钥。非托管钱包可以通过两种方法创建和访问。使用私钥(一串字母数字字符)或使用 助记词,即由 12-24 个单词组成的短语,存储在钱包所有者一端(通常写在纸上并存储在安全的地方,远离互联网和计算机)。
以下是非托管钱包的一些优势:
区块链中托管钱包与非托管钱包的区别 / #web3 - YouTube
QuickNode
131K 订阅者
QuickNode
搜索
信息
购物
点击取消静音
如果播放没有立即开始,请尝试重新启动设备。
你已退出登录
你观看的视频可能会被添加到电视的观看历史记录中,并影响电视推荐。为避免这种情况,请取消并在计算机上登录 YouTube。
取消确认
分享
包括播放列表
检索共享信息时出错。请稍后再试。
稍后观看
分享
复制链接
观看
0:00
/ •直播
•
订阅我们的 YouTube 频道以获取更多视频! 订阅
在 QuickNode,我们在全球运行许多节点。所有这些节点都始终连接到互联网并且是动态的。QuickNode API 连接到一个由强大节点组成的全球网络。这些节点并不总是连接到单一的基础设施组件。API 设计为在单一基础设施组件之间执行动态切换,以提供更好的稳定性和正常运行时间。这使得在节点上存储任何敏感数据都不太理想,因为它们经常处于变化中。还有一个安全方面的问题,因为这些节点面向互联网。为了用户数据的安全,我们不允许它们存储私钥。由于它们是动态的,它们经常改变状态以提供更好的性能。这意味着密钥可能会丢失,从而导致用户数据丢失。这些是运行非托管节点并让用户成为其钱包的唯一控制者的原因。在接下来的部分中,我们将看到如何使用库创建钱包,进行非托管交易,并使用 QuickNode 发送交易。
我们今天可以使用几乎任何 Ethereum 客户端,例如 Geth 或 OpenEthereum(原 Parity)。由于这对于发送交易来说有点复杂,我们只需在此创建一个免费的 QuickNode 账户 here 并轻松生成一个 Ethereum 端点。我们将使用 Kovan 测试链进行转账。创建免费的 Ethereum 端点后,复制你的 HTTP Provider URL:
你稍后需要这个,所以复制并保存它。
我们可以使用许多可用的 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 的文章和指南。你还可以随时通过 Twitter 和 Discord 社区服务器联系我们,那里有一些你会遇到的最酷的开发人员 :)
让我们知道 如果你有任何反馈或对新主题的请求。我们很乐意听取你的意见。
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!