NPM 包 truffle-privatekey-provider 使用教程
在以太坊(Ethereum)开发中,使用 truffle 部署智能合约通常需要一个私钥来进行执行。但是在敏感操作中,很多人不想将私钥暴露在代码中,因此有了 truffle-privatekey-provider 这个 NPM 包。本篇文章将向你介绍如何使用这个包来保护你的私钥并部署智能合约。
前置知识
在使用本篇文章中的示例代码前,需要掌握以下知识点:
- JavaScript
- Node.js
- Solidity(以太坊智能合约开发语言)
- truffle(以太坊开发框架)
安装
使用以下命令安装 truffle-privatekey-provider:
--- ------- ---------------------------
使用
在使用 truffle-privatekey-provider 之前,我们需要准备好以下文件:
- truffle.js(或 truffle-config.js):truffle 的配置文件
- 私钥文件:保存有私钥的文件(例如 keystore 文件)
配置 truffle.js
在 truffle.js 中,我们需要引入 truffle-privatekey-provider 并对其进行配置。具体代码如下:
----- ------------------ - --------------------------------------- ----- ---------- - ------------------------------------------------------------------- -------------- - - --------- - ------------ - ----- ------------ ----- ----- ----------- --- -- -------- - --------- -- -- --- ------------------------------ ------------------------------ ----------- -- ---- ------- -- -------- - --------- -- -- --- ------------------------------ ------------------------------ ----------- -- ---- ------- -- -- --
以上代码设置了三个网络:
- development:本地开发网络,使用默认的本地节点端口。
- ropsten:Ropsten 测试网络,使用 Infura 公共节点。请将 替换成你的私钥文件路径,以及在 provider 中填写你在 Infura 上的项目 ID。
- mainnet:以太坊主网络,使用 Infura 公共节点。同上。
注意,这里的私钥文件需要在保护措施良好的服务器上保存,并且只有有权访问该服务器的人才能够获得私钥。另外,你也可以替换掉这里使用的 Infura 节点,改用你自己部署的以太坊节点。
部署智能合约
在 truffle 中,使用以上 truffle.js 配置文件中定义的网络,可以通过以下命令来部署智能合约:
------- -------
以上命令默认会将合约部署到 development 网络。如果需要部署到其他网络,可以通过以下命令来指定网络:
------- ------- --------- --------------
其中, 可以是定义在 truffle.js 中的任意网络。
示例代码
本篇文章中的所有代码均保存在以下仓库中,供读者学习参考:
https://github.com/UniRegistries/truffle-privatekey-provider-demo
本仓库中包含的代码文件有:
- truffle.js:truffle 配置文件,需要根据自己的需求修改。
- contracts/Migrations.sol:一个简单的 Solidity 合约。
- migrations/1_initial_migration.js:一个 truffle 自带的部署脚本,用于部署 Migrations.sol 合约。
- scripts/getBalance.js:一个简单的 Node.js 脚本,用于查询指定地址的以太币余额。
- scripts/sendTransaction.js:一个简单的 Node.js 脚本,用于转账以太币。
通过以上示例代码,读者可以学习到如何在 truffle 开发中使用 truffle-privatekey-provider 来保护私钥。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/194710