nodejs 使用 ethers创建以太坊钱包
创建钱包
创建钱包流程: 生成随机助记词 => 通过助记词创建钱包=>钱包信息和加密明文(私钥和密码加密)
导入钱包
通过插件提供方法,根据助记词|keyStore|私钥,找到钱包信息(地址和私钥)=>钱包信息和加密明文(私钥和密码加密)AES加密存入localStorage
生成记忆助词
var mnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes());
创建钱包
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());
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(, function () {
var host = server.address().address
var port = server.address().port
console.log("server start port:" + port)
})
效果:
此随笔乃本人学习工作记录,如有疑问欢迎在下面评论,转载请标明出处。
如果对您有帮助请动动鼠标右下方给我来个赞,您的支持是我最大的动力。
nodejs 使用 ethers创建以太坊钱包的更多相关文章
- (转)以太坊 钱包 创建 导入 Keystore
最近闲来无事 研究了下以太坊钱包 下边分享下 准备工作 : 需要用到的加密:BIP32 BIP39 BIP44 SCRYPT 加密算法 githab地址 https://github.com/Nova ...
- 以太坊钱包Geth使用命令
一.启动以太坊钱包Geth 打开一个控制台,执行同步区块命令 #同步测试链geth --fast --cache=512 --rpc --rpcapi personal,db,eth,net,web3 ...
- [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(四) 使用web3j对接以太坊钱包
本文给大家介绍了 Web3j Java 版本的框架的基本使用,大家可根据本文的内容进行扩展性的练习,对其他 API 的使用进行尝试. 使用web3j对接以太坊钱包 一.开发准备事项 启动 Geth 此 ...
- 一键创建以太坊ERC20代币教程
30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...
- PPT分享 | 以太坊钱包分析与介绍
艾伯特AI人工智能(公众号:aibbtcom)按: (编者按:本文为姗姗来迟的Meetup系列推文.12月3日,林修平在亚太区以太坊社区培训与交流Meetup深圳站上跟我们分享了他对以太坊各种钱包模式 ...
- c#实战开发:用.net core开发一个简单的Web以太坊钱包 (六)
今天就来开发一个C# 版的简易钱包 先回顾以前的内容 c#实战开发:以太坊Geth 命令发布智能合约 (五) c#实战开发:以太坊Geth 常用命令 (四) c#实战开发:以太坊钱包快速同步区块和钱包 ...
- 牛奶ddw如何通过以太坊钱包实现互相打赏
很多朋友不清楚如何转账ddw,但是万能的网友是无敌的,这两天就自己摸索的一点经验总结下今天的转账经验. 1. 提取到自己的账户 这个大家都知道如何操作,使用官方的钱包 在“日日盈app”中点击&quo ...
- 以太坊钱包开发系列4 - 发送Token(代币)
以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...
- 以太坊钱包开发系列2 - 账号Keystore文件导入导出
以太坊去中心化网页钱包开发系列,将从零开始开发出一个可以实际使用的钱包,本系列文章是理论与实战相结合,一共有四篇:创建钱包账号.账号Keystore文件导入导出.展示钱包信息及发起签名交易.发送Tok ...
随机推荐
- .NET Core 获取操作系统各种信息
.NET Core 获取操作系统各种信息 一.前言 .NET Core 内置了一些API供我们获取操作系统.运行时.框架等信息.这些API不是很常用,所有有些小伙伴可能还不知道,这里做一些可能用到的获 ...
- volume.go
package)) ) ,) ) );) , } }
- 简化异常处理的Throwables类
简化异常处理的Throwables类 有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中.Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常.例如: ...
- NOI前的考试日志
4.14 网络流专项测试 先看T1,不会,看T2,仙人掌???wtf??弃疗.看T3,貌似最可做了,然后开始刚,刚了30min无果,打了50分暴力,然后接着去看T1,把序列差分了一下,推了会式子,发现 ...
- 【莫比乌斯反演】BZOJ2005 [NOI2010]能量采集
Description 求sigma gcd(x,y)*2-1,1<=x<=n, 1<=y<=m.n, m<=1e5. Solution f(n)为gcd正好是n的(x, ...
- OKHttp源码学习--HttpURLConnection HttpClient OKHttp Get and post Demo用法对比
1.HttpURLConnection public class HttpURLConnectionGetAndPost { private String urlAddress = "xxx ...
- 如何将markdown转换为wxml
话说我要为技术博客写一个小程序版,我的博客解决方案是 hexo + github-page,格式当然是技术控们喜欢的 markdown 了 .但小程序使用的却是独有的模版语言 WXML.我总不能把之前 ...
- safari 浏览器 input textarea select 等不能响应用户输入
解决办法 -webkit-user-select:auto; /*webkit浏览器*/ user-select:auto; -o-user-select:auto; -ms-user-select: ...
- Spark学习之数据读取与保存总结(一)
一.动机 我们已经学了很多在 Spark 中对已分发的数据执行的操作.到目前为止,所展示的示例都是从本地集合或者普通文件中进行数据读取和保存的.但有时候,数据量可能大到无法放在一台机器中,这时就需要探 ...
- 文本离散表示(一):词袋模型(bag of words)
一.文本表示 文本表示的意思是把字词处理成向量或矩阵,以便计算机能进行处理.文本表示是自然语言处理的开始环节. 文本表示按照细粒度划分,一般可分为字级别.词语级别和句子级别的文本表示.字级别(char ...