首页 > 其他分享 >5.区块链系列之私钥管理

5.区块链系列之私钥管理

时间:2022-10-29 15:57:06浏览次数:78  
标签:系列 env process PRIVATE js KEY 私钥 区块

本文讲解如何对私钥加密处理以及部署后需注意的事项

1.新建encryptKey.js

const ethers = require("ethers");
const fs = require("fs-extra");
require("dotenv").config();

async function main() {
  const wallet = new ethers.Wallet(process.env.PRIVATE_KEY);
  const encryptedJsonKey = await wallet.encrypt(
    process.env.PRIVATE_KEY_PASSWORD,
    process.env.PRIVATE_KEY
  );
  console.log(encryptedJsonKey);
  fs.writeFileSync("./.encryptedKey.json", encryptedJsonKey);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

目前我们的.env文件配置为

PRIVATE_KEY=36b785b98b0567f1e6cdfe4f67e884d8d3fb24ba0dbac0776f935d558f39e165
RPC_URL=http://127.0.0.1:7545
PRIVATE_KEY_PASSWORD=shenjian.online

控制台执行生成.encryptedKey.json文件

(base) PS D:\blockchain\ehthers-simple-storage-fcc> node encryptKey.js

现在我们删除.env中的PRIVATE_KEY=36b785b98b0567f1e6cdfe4f67e884d8d3fb24ba0dbac0776f935d558f39e165

2. 修改deploy.js私钥部分

现在我们将上节介绍的deploy.js文件中注释私钥部分放开

async function main() {
  let provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL);
  // 私钥不加密方式,开发
  //let wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

  // 生产环境私钥一定要加密,并且history历史命令记录也要清空,否则后果自负!!!!!!!!
  const encryptedJson = fs.readFileSync("./.encryptedKey.json", "utf8");
  let wallet = new ethers.Wallet.fromEncryptedJsonSync(
    encryptedJson,
    process.env.PRIVATE_KEY_PASSWORD
  );
  wallet = wallet.connect(provider);
  ......
}

再次运行部署,同样成功

(base) PS D:\blockchain\ehthers-simple-storage-fcc> node deploy.js
Deploying, please wait...
Contract deployed to 0xe52A9CFCCAd1cDF934614D0Cd93BB7Fa9650ae64
Current Favorite Number: 0
Updating favorite number...
New Favorite Number: 7

3. linux下进一步安全

.env文件中我们去掉PRIVATE_KEY_PASSWORD=shenjian.online,
然后运行[linux下]

PRIVATE_KEY_PASSWORD=shenjian.online node deploy.js
history -c

欢迎关注公众号算法小生沈健的技术博客查看最新文章

标签:系列,env,process,PRIVATE,js,KEY,私钥,区块
From: https://www.cnblogs.com/shenjian-online/p/16838898.html

相关文章

  • 9.区块链系列之hardhat框架测试合约
    先前我们讲解了如何部署智能合约,今天我们来对合约进行测试,这是非常重要的一部分,毕竟一旦部署后不可变,如果测试不充分,那么黑客就不会客气了1.单元测试在test目录下新建te......
  • 8.区块链系列之hardhat框架部署合约(二)
    现在我们来实践hardhat部署合约中的其他更多技术要点1.代码方式验证合约注册https://etherscan.io/,如下图添加拷贝API_KEY在.env文件中新增ETHERSCAN_API_KEYE......
  • 10.区块链系列之hardhat部署抵押赎回Fund合约
    本文继续通过笔者学习到的抵押赎回智能合约Fund来进一步学习solidity语言,加深对开发的理解,其中通过storage节省gas是需要重点实践的,毕竟涉及到资产代码已提交至https://gi......
  • Spring Boot系列之使用问题总结
    RabbitMQ报错AmqpException:Nomethodfoundforclassjava.lang.Integer在使用springboot集成RabbitMQ的时候,选择使用springboot提供的starter,spring-boot-starter-a......
  • Spring Boot系列之修改内置Tomcat版本
    背景在springboot出来之前,或者没有使用springboot时,JavaEE开发时如果选择tomcatservlet,需要自己指定tomcat版本;此处没有考虑那种直接把打包的war直接扔到本地......
  • 点线系列总结
    目录1.前言2.类2.1Point2.2Line2.3Graphical2.4Quadrilateral2.5Pentagon3.设计与分析3.1点线形系列4-凸四边形的计算3.2点线形系列5-凸五边形的计算3.3期中考试4......
  • C# 从死磕到精通系列 string 类型
    首先看下string类型支持的常见方法:像:1.ToString将其他类型转换为string类型。null不可转。(据说现在最新版可以支持了)    2.Split  根据指定字符切换字符串返......
  • 关于VM系列振弦传感器测量模块 固件版本SF3.50相较于SF3.33的新特性说明
    测频性能提升微弱信号增强,进一步增强了微弱信号的识别和处理算法。增加辅助测频,在不改变以往固件使用的前提下,利用预置噪声、特征频率模型及过滤算法SFC(SmartFrequencyC......
  • Winform GDI 系列(2) 窗体边框重绘制
    ///<summary>///窗体边框重绘制///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidForm1_Paint(......
  • leetcode(32)前缀和系列题目
    303.区域和检索-数组不可变记录前i个元素的和,因此sum[left,right+1]=pre[right+1]-pre[left]classNumArray:def__init__(self,nums:List[int]):......