以太坊钱包开发

Similar documents
之 和, 除 高 層 建 築 物 以 不 超 過 建 築 面 積 百 分 之 十 五 外, 其 餘 以 不 超 過 建 築 面 積 百 分 之 十 二 點 五 為 限, 其 未 達 二 十 五 平 方 公 尺 者, 得 建 築 二 十 五 平 方 公 尺 ( 二 ) 水 箱 水 塔 設 於 屋 頂

以太坊开发实战 公开

PowerPoint 演示文稿

Microsoft PowerPoint ShengYang Presentation Slides_240609

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

从 宾 馆 到 又 一 城 是 十 五 分 钟, 从 又 一 城 到 邵 逸 夫 是 十 分 钟, 去 时 一 路 上 坡 很 辛 苦, 回 时 一 路 下 坡 很 轻 松, 很 像 上 小 学 时 的 心 情, 这 是 最 初 几 天 最 深 的 感 受 有 段 时 间 很 少 走 校 内 的 路

合金投资年报正文.PDF



概述

Q2-CN NL

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

深圳市跨境易电子商务有限公司

Simulator By SunLingxi 2003

Intruduction to the NGINX stream subsystem and OpenResty's support


Microsoft Word - 版頭.doc

第六組公文傳閱表

工程师培训

2015年莆田一青会射箭资格赛.xls

区块链亡灵军团

Microsoft Word - 第3章.doc

一、

标题

市场主流数字货币硬件钱包研究报告

学院信息第八期

3. 反 映 : 4. 五 花 八 门 : 5. 慷 慨 : 6. 参 与 : 7. 慰 劳 : 8. 延 续 : 9. 珍 爱 : 10. 浪 漫 : 三. 找 出 下 列 每 组 词 中 的 近 义 词 或 同 义 词 : 节 日 节 气 节 令 时 节 习 俗 民 俗 仪 式 风 俗 文 献

C/C++ - 文件IO

instructions.PDF

untitled

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

第一编 文明之前的人类

2

SL2511 SR Plus 操作手冊_單面.doc

5

共识算法 SOLO kafka(cft) FBFT 节点数 1 2f+1 3f+1 错误节点容忍 不容忍 最多 1/2 个 crash 节点 最多 1/3 个拜占庭错误节点 交易性能 一般 TPS 2000+TPS 快速拜占庭容错算法 (Fast Byzantine Fault Tole

Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provided by SUNPLUS TECHNOLO

Microsoft Word - 01.DOC

ttian

! "#$%& $()*+#$, $(-.&,./.+#/(-.&01( &-#&(&$# (&2*(,#-3.,14& $ +()5(*-#5(-#/-/#(-1#&-+)(& :;<<= > A B?

9202reply-s.doc


无类继承.key

响应式在iOS开发中的应用 For PDF

C/C++ - 函数

FILTRON 1. DC AC AC 220V 50HZ / / / / 4. 1) / DC AC FILTRON DC AC FILTRON DC 12V 12VDC D

<313034A4BDB67DA4C0B56FBA5DB3E65FBD64A5BB2E786C7378>

5A-ESP8266__SDK__SSL_User_Manual__CN.pages

毕 业 设 计 (论 文)

IP2PGO User Guide

IP1883_39A00WT_Cht_37_ indd

TrustSQL对接开发指南


Quick Start Guide

CHAPTER VC#

个人网上银行专业版客户使用手册

IP505SM_manual_cn.doc

概述

(Microsoft Word - \251I\250D\245D\246W

r_09hr_practical_guide_kor.pdf

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

( 一 ) 全 面 贯 彻 党 和 国 家 的 教 育 方 针 政 策, 落 实 国 家 有 关 教 育 的 法 律 法 规 ; 研 究 草 拟 江 苏 省 教 育 法 规 和 政 策, 并 组 织 实 施 ( 二 ) 研 究 教 育 发 展 战 略 思 路, 统 筹 规 划 协 调 指 导 江 苏

untitled

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内

83066.indb

胃癌早诊早治技术方案.doc


区块链安全的至暗时刻

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭

14. 阿 亮 在 寒 假 春 節 期 間 與 父 母 到 一 座 廟 裡 拜 拜, 廟 裡 的 神 有 掌 生 死 簿 的 判 官 勾 攝 生 魂 的 黑 白 無 常 執 行 拘 提 魂 魄 的 牛 頭 馬 面, 整 間 廟 看 起 來 有 些 陰 森, 請 問 阿 亮 到 了 哪 一 座 廟 內

Partition Key: 字 符 串 类 型, 表 示 当 前 Entity 的 分 区 信 息 这 个 Property 对 于 Table Service 自 动 纵 向 和 横 向 扩 展 至 关 重 要 Row Key: 字 符 串 类 型, 在 给 定 Partition Key 的

ebook71-13

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

色 位 於 直 角 座 標 系 的 原 點 上, 白 色 則 位 於 距 原 點 最 遠 的 頂 點 上, 以 黑 色 至 白 色 位 置 之 間 的 線 段 (Gray scale) 表 示 灰 階 值 的 變 化, 愈 接 近 黑 色 的 線 段 位 置, 灰 階 值 愈 小, 反 之 則 愈

財金資訊-80期.indd

Microsoft Word - ch04三校.doc


PowerPoint プレゼンテーション

Oracle高级复制配置手册_业务广告_.doc

Microsoft Word - Learn Objective-C.doc

IP-Routing-05.pdf

szj1.s92

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

书名 : 作 者 : 出版社 : 出版 :

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

JLX

<4D F736F F D20BB4FA55FA5ABA5DFA6A8A55CB0AAAFC5A4A4BEC7A46AA8C6B04F3939A67EABD72E646F63>

获取 Access Token 1 基础概念 access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要妥善保存,access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新

AL-M200 Series

幻灯片 1

每日免费获取报告 1 每日微信群内分享 5+ 最新重磅报告 ; 2 每日分享当日华尔街日报 金融时报; 3 每周分享经济学人 4 每月汇总 500+ 份当月重磅报告 ( 增值服务 ) 扫一扫二维码关注公号回复 : 研究报告加入 起点财经 微信群

python_free


( Version 0.4 ) 1

GCKX703.PS2

科別

Transcription:

以太坊钱包开发 熊丽兵 (Tiny 熊 )

我 熊丽兵 Tiny熊 深 入浅出区块链 learnblockchain.cn 精通以太坊智能合约开发 作者 登链学院创始 人 电 子 工业出版社

Demo https://gitee.com/xilibi2003/ethwebwallet

大纲 钱包账号 地址 私钥 钱包账号管理理 以太转账 ERC20 Token 转账 Ethers.js 库

( 数字 ) 钱包 钱包存钱了了吗? 钱包实际是 一个管理理私钥的 工具

钱包账号 钱包账号看上去是 一个地址 关键是私钥

var Crypto = require('crypto') var secp256k1=require('secp256k1') var createkeccakhash=require('keccak') // 一个 32 字节的随机数 (1~2^256-1), 直接把他当成私钥 var privatekey=crypto.randombytes(32); console.log(privatekey.tostring('hex')); // 由 secp256k1 椭圆曲线算法先计算出公钥 var pubkey=secp256k1.publickeycreate(privatekey,false).slice(1); // 进 行行 keccak256 hash 运算再取后 40 位得到 var address =createkeccakhash('keccak256').update(pubkey).digest().slice(-20); console.log("0x" + address.tostring('hex'));

创建钱包账号 随机 生成私钥 (32 字节 ) 分层确定性推倒

随机数 生成私钥 随机在1到2^256之间选 一个数字 不不可预测或不不可重复

分层确定性推倒 随机 生成的私钥, 备份麻烦, 不不易易管理理 BIP (Bitcoin Improvement Proposals) bip32 提案 (HD 钱包 ) https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

HD钱包 随机数种 子推倒 生成私钥 https://learnblockchain.cn/2018/09/28/hdwallet/

分层推倒过程 https://learnblockchain.cn/2018/09/28/hdwallet/

秘钥路路径 HD 钱包中的密钥是 用 路路径 命名的, 每个级别之间 用斜杠 (/) 字符来表示 如 : 第 一个主密钥 生成的 子私钥是 m/0 第 一个公共钥匙是 M/0 第 一个 子密钥的 子密钥就是 m/0/1

BIP44 m / purpose' / coin_type' / account' / change / address_index https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki https://github.com/satoshilabs/slips/blob/master/slip-0044.md

随机数 or 助记词 090ABCB3A6e1400e9345bC60c78a8BE7 candy maple cake sugar pudding cream honey rich smooth crumble sweet treat https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

生成助记词 https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

助记词推倒出种 子 密钥拉伸函数 : 用来增强弱密钥的安全性 https://github.com/bitcoinjs/bip39

var bip39 = require('bip39') var hdkey = require('ethereumjs-wallet/hdkey') var util = require('ethereumjs-util') // 生成助记词 var mnemonic = bip39.generatemnemonic() var seed = bip39.mnemonictoseed(mnemonic); var hdwallet = hdkey.frommasterseed(seed); var key1 = hdwallet.derivepath("m/44'/60'/0'/0/0"); console.log(" 私钥 :"+util.buffertohex(key1._hdkey._privatekey)); var address1 = util.pubtoaddress(key1._hdkey._publickey, true); console.log(" 地址 :"+util.buffertohex(address1)); https://iancoleman.io/bip39/

私钥存储 1. 加密存储 - 对称加密私钥 2. 如何选择加密秘钥 (KDF)

私钥存储 { "address":"856e604698f79cef417aab...", "crypto":{ cipher":"aes-128-ctr", 对称加密算法 ciphertext":"13a3ad2135bef1ff228e399dfc8d74a...", 密 文 "cipherparams":{ "iv":"92e7468e8625653f85322fb3c..." }, "kdf":"scrypt", "kdfparams":{ "dklen":32, "n":262144, 秘钥派 生算法参数 "p":1, "r":8, "salt":"3ca198ce53513ce01bd651aee54b16b6a..." }, "mac":"10423d837830594c18a91097d09b7f2316..." 校验码 }, "id":"5346bac5-0a6f-4ac6-baba-e2f3ad464f3f", "version":3 V3 KeyStore }

V3 KeyStrore 解密

如何确认密码正确性? mac= sha3(dk[16:32], ciphertext)

转账 一个交易易 长这样 : const txparams = { nonce: '0x00', gasprice: '0x09184e72a000', gaslimit: '0x2710', to: '0x0000000000000000000000000000000000000000', value: '0x00', data: 0x7f74657374320000000000000000000000000000, // EIP 155 chainid - mainnet: 1, ropsten: 3 chainid: 3 }

Gas 矿 工费 ( 预算 )= gaslimit * gasprice gaslimit: 有 工作量量决定, 少了了 out-of-gas, 多了了退回 普通转账是 21000 gasprice: 决定矿 工打包的优先级, 出价过低打包慢, 出价过 高不不划算

签名及 广播 const tx = new EthereumTx(txParams) tx.sign(privatekey) const serializedtx = tx.serialize() web3.eth.sendrawtransaction(serializedtx, function (err, transactionhash) { console.log(transactionhash); }); https://github.com/ethereumjs/ethereumjs-tx

Token转账 Token = 符合 ERC20 接 口的合约 Token转账 = 调 用合约的转账函数 = 向合约地址发起交易易 交易易的data 是 ABI编码数据

Token转账 [ { "constant": false, "inputs": [{ "name": "to", "type": "address" }, { "name": "tokens", "type": "uint256" }], "name": "transfer", "outputs": [{ "name": "success", "type": "bool" }], "payable": false, "statemutability": "nonpayable", "type": "function" ABI: Application Binary Interface 描述合约提供的接 口 } ]

Token 转账 ABI: Application Binary Interface 描述合约提供的接 口 var abi = [...]; var addr = "0x..."; var contract = new ethers.contract(address, abi, provider); contract.transfer(targetaddress, amount).then(function(tx) { console.log(tx); });

ethers.js 和 web3.js 一样, 是 一套和以太坊区块链进 行行交互的库 ethers.js 对 BIP32 BIP39 BIP44 等相关的提案进 行行了了实现 4 个功能模块 : Wallets & Signers Providers Contracts Utilities https://docs.ethers.io/ethers.js/html/

ethers.js 随机数私钥创建钱包账号 var privatekey = ethers.utils.randombytes(32); var wallet = new ethers.wallet(privatekey); 助记词 方式创建钱包账号 var rand = ethers.utils.randombytes(16); var mnemonic = ethers.utils.hdnode.entropytomnemonic(rand); var path = "m/44'/60'/0'/0/0"; ethers.wallet.frommnemonic(mnemonic, path);

ethers.js KeyStore 加解密 wallet.encrypt(pwd.val()).then(function(json) { var blob = new Blob([json], {type: "text/plain;charset=utf-8"}); saveas(blob, "keystore.json"); }); ethers.wallet.fromencryptedjson(json, password).then(function(wallet) { // }, function(error) { // });

ethers.js 连接provider var provider = new ethers.providers.jsonrpcprovider("http://127.0.0.1:8545"); var activewallet = wallet.connect(provider); activewallet.sendtransaction({ to: targetaddress, value: amountwei, //gasprice: activewallet.provider.getgasprice(), //gaslimit: 21000, }).then(function(tx) { });

钱包安全性 谨慎谨慎谨慎 ( 没有后悔悔药 ) 强密码 + 离线保存 ( 勿 用 网络分享 ) 开源钱包 / 硬件钱包 / 多签钱包

现场群

谢谢