zoukankan      html  css  js  c++  java
  • nodejs 使用 ethers创建以太坊钱包

    创建钱包
    创建钱包流程: 生成随机助记词 => 通过助记词创建钱包=>钱包信息和加密明文(私钥和密码加密)

    导入钱包
    通过插件提供方法,根据助记词|keyStore|私钥,找到钱包信息(地址和私钥)=>钱包信息和加密明文(私钥和密码加密)AES加密存入localStorage

    生成记忆助词

    var mnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16));

    创建钱包

      if (!ethers.utils.HDNode.isValidMnemonic(mnemonic)) {
        result.success = false;
        result.message = "mnemonic Invalid";
      } else {
        var wallet = ethers.Wallet.fromMnemonic(mnemonic);
        result.data = {
          privateKey: wallet.privateKey,
          path: wallet.path,
          address: wallet.address,
          mnemonic: mnemonic
        }

    找回钱包

     if (req.body.type == "privateKey") {//根据私钥
        var wallet = new ethers.Wallet(req.body.data);
        result.data = wallet.address
      } else {//根据记忆帮词
        var mnemonic = ethers.Wallet.fromMnemonic(req.body.data);
        var wallet = new ethers.Wallet(mnemonic.privateKey);
        result.data = wallet.address;
      }

    源码

    inde.html

    <!DOCTYPE html>
    <html lang="zh-CN">
    
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>new a wallet</title>
      <style>
        .input-group{
        margin-bottom: 10px;
      }
      </style>
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
    </head>
    
    <body>
      <div class="container">
        <div class="page-header">
          <h1>x-wallet demo</h1>
        </div>
    
        <div class="row">
          <h3>new a wallet</h3>
          <div class="col-12">
            <div class="input-group">
              <span class="input-group-addon text-primary" id="generate-mnemonic">generate mnemonic</span>
              <input id="mnemonic" type="text" class="form-control" aria-describedby="generate-mnemonic">
              <div class="input-group-btn">
                <button id="GenerateMnemonic" class="btn btn-primary" type="submit">create</button>
              </div>
            </div>
          </div>
          <div class="col-12">
            <div class="input-group">
              <span class="input-group-addon text-primary">create a wallet</span>
              <input type="text" class="form-control" disabled id="new-wallet">
              <div class="input-group-btn">
                <button id="createWallet" class="btn btn-primary" type="submit">create</button>
              </div>
            </div>
          </div>
          <div class="col-12">
            <p id="wallet-content">
              <p>
          </div>
          <h3>Retrieve the wallet</h3>
          <div class="col-12">
            <div class="input-group">
              <span class="input-group-addon text-primary" id="group-by-privateKey">Group by privateKey</span>
              <input id="retrieve-privateKey" type="text" class="form-control" aria-describedby="group-by-privateKey">
              <div class="input-group-btn">
                <button id="retrieve-waller-privateKey" class="btn btn-primary" type="submit">Retrieve</button>
              </div>
            </div>
          </div>
          <div class="col-12">
            <div class="input-group">
              <span class="input-group-addon text-primary" id="group-by-mnemonic">Group by mnemonic</span>
              <input id="retrieve-mnemonic" type="text" class="form-control" aria-describedby="group-by-mnemonic">
              <div class="input-group-btn">
                <button id="retrieve-waller-mnemonic" class="btn btn-primary" type="submit">Retrieve</button>
              </div>
            </div>
          </div>
        </div>
      </div>
      <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
      <script type="text/javascript">
        $(function () {
          $("#GenerateMnemonic").on('click', function () {
            $.post("http://localhost:8888/generateMnemonic", {}, function (res) {
              var mnemonic = $('#mnemonic');
              mnemonic.val(res.data);
            })
          })
    
          $("#createWallet").on('click', function () {
            $.post("http://localhost:8888/createWallet", {
              mnemonic: $('#mnemonic').val()
            }, function (res) {
              if (res.success) {
                $("#wallet-content").html("address:" + res.data.address + "<br/>" +
                  "privateKey:" + res.data.privateKey + "<br/>" +
                  "mnemonic:" + res.data.path + "<br/>");
              }
              $("#new-wallet").val(res.data.address);
            })
          })
    
          $('#retrieve-waller-privateKey').on('click', function () {
            $.post("http://localhost:8888/retrieveWallet", {
              type: "privateKey",
              data: $("#retrieve-privateKey").val()
            }, function (res) {
              if (res.success) {
                alert("wallet:" + res.data);
              }
            })
          })
    
          $('#retrieve-waller-mnemonic').on('click', function () {
            $.post("http://localhost:8888/retrieveWallet", {
              type: "mnemonic",
              data: $("#retrieve-mnemonic").val()
            }, function (res) {
              if (res.success) {
                alert("wallet:" + res.data);
              }
            })
          })
    
        })
      </script>
    </body>
    
    </html>

    app.js

    var express = require('express');
    var ethers = require('ethers');
    var app = express();
    var bodyParser = require('body-parser');
    var urlencodedParser = bodyParser.urlencoded({
      extended: false
    })
    
    app.use(express.static('public'));
    
    app.get('/', function (req, res) {
      res.sendFile(__dirname + "/app/index.html");
    })
    app.post('/generateMnemonic', urlencodedParser, function (req, res) {
      var mnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16));
      var result = {
        success: true,
        message: "success",
        data: mnemonic
      }
    
      res.send(result);
      res.end();
    })
    
    app.post('/createWallet', urlencodedParser, function (req, res) {
      var result = {
        success: true,
        message: "success",
        data: null
      }
      var mnemonic = req.body.mnemonic;
      if (!ethers.utils.HDNode.isValidMnemonic(mnemonic)) {
        result.success = false;
        result.message = "mnemonic Invalid";
      } else {
        var wallet = ethers.Wallet.fromMnemonic(mnemonic);
        result.data = {
          privateKey: wallet.privateKey,
          path: wallet.path,
          address: wallet.address,
          mnemonic: mnemonic
        }
      }
      res.send(result);
      res.end();
    })
    
    app.post('/retrieveWallet', urlencodedParser, function (req, res) {
      var result = {
        success: true,
        message: "success",
        data: null
      }
      if (req.body.type == "privateKey") {
        var wallet = new ethers.Wallet(req.body.data);
        result.data = wallet.address
      } else {
        var mnemonic = ethers.Wallet.fromMnemonic(req.body.data);
        var wallet = new ethers.Wallet(mnemonic.privateKey);
        result.data = wallet.address;
      }
      res.send(result);
      res.end();
    })
    
    
    
    var server = app.listen(8888, function () {
      var host = server.address().address
      var port = server.address().port
      console.log("server start port:" + port)
    })

     效果:

    此随笔乃本人学习工作记录,如有疑问欢迎在下面评论,转载请标明出处。

    如果对您有帮助请动动鼠标右下方给我来个赞,您的支持是我最大的动力。

  • 相关阅读:
    数据建模学习笔记-1-《高质量数据库建模 1-重大意义》
    sqoop中,如果数据中本身有换行符,会导致数据错位
    telnet时显示:允许更多到 telnet 服务器的连接。请稍候再试
    Eclipse首字母快捷设置
    error: bad symbolic reference. A signature in HiveContext.class refers to term hive
    在IT的路上,我在成长
    uglifyjs-webpack-plugin 插件,drop_console 默认为 false(不清除 console 语句),drop_debugger 默认为 true(清除 debugger 语句)
    读《精通正则表达式(第三版)》笔记
    vue cli 3.x 设置4个空格缩进
    正则表达式 学习资料
  • 原文地址:https://www.cnblogs.com/huangenai/p/10095200.html
Copyright © 2011-2022 走看看