eth钱包keystore
⑴ 一步一步教你使用以太坊钱包
下面开始介绍myetherwallet
记住,这个钱包只支持如下几种
ETH、ETC、和符合ERC20协议的token,
其他 不支持的币不要转进来(转进来会丢失)
浏览器打开网站:
https://www.myetherwallet.com
在页面右上角选择你喜欢的语言,如下图所示
第一步 创建钱包
输入密码(至少9位)
下载keystore文件(这里保存你的公钥和私钥)
保存你的私钥
初次解锁钱包(建议一定要多试下第二步,不要立马就转币进去,否则有可能你没记住密码或者keystore没放好,多试几次可以让你更加熟悉)
一般初次点击解锁之后,页面可能不刷新,直接鼠标往下滚下来就看到你的钱包信息了
第二步 查看钱包信息
当你完成了第一步,钱包就已经建好了。
这一步只是教你平时怎么打开钱包看看里面的余额之类的
你的ETH的余额和交易历史
你的所有代币token的余额和交易历史
第三步 接收和发送ETH及其他token代币
接收ETH和其他的代币token(这个钱包所支持的,点击show all tokens看所有支持的代币)
都用同一个地址即可,不需要任何额外的标记或操作
点击左上角 发送以太币/发送代币,选择keystoreFile,
上传keystore文件,填写密码,解锁账号
3.发送给别人ETH或代币的时候,你就要输入对方对应的ETH地址或代币地址,不要填错,
比如你要发送到你的交易平台,如果发送EOS,这里就要放你交易平台的EOS的充值地址,
而不是放ETH充值地址,当然你还需要在下面这个下拉菜单这里选择一下相应的代币类型,
比如EOS
⑵ 【ETH钱包开发03】web3j转账ETH
在之前的文章中,讲解了创建、导出、导入钱包。
【ETH钱包开发01】创建、导出钱包
【ETH钱包开发02】导入钱包
本文主要讲解以太坊转账相关的一些知识。交易分为ETH转账和ERC-20 Token转账,本篇先讲一下ETH转账。
1、解锁账户发起交易。钱包keyStore文件保存在geth节点上,用户发起交易需要解锁账户,适用于中心化的交易所。
2、钱包文件离线签名发起交易。钱包keyStore文件保存在本地,用户使用密码+keystore的方式做离线交易签名来发起交易,适用于dapp,比如钱包。
本文主要讲一下第二种方式,也就是钱包离线签名转账的方式。
交易流程
1、通过keystore加载转账所需的凭证Credentials
2、创建一笔交易RawTransaction
3、使用Credentials对象对交易签名
4、发起交易
注意以下几点:
1、Credentials
这里,我是通过获取私钥的方式来加载 Credentials
还有另外一种方式,通过密码+钱包文件keystore方式来加载 Credentials
2、nonce
nonce是指发起交易的账户下的交易笔数,每一个账户nonce都是从0开始,当nonce为0的交易处理完之后,才会处理nonce为1的交易,并依次加1的交易才会被处理。
可以通过 eth_gettransactioncount 获取nonce
3、gasPrice和gasLimit
交易手续费由gasPrice 和gasLimit来决定,实际花费的交易手续费是 gasUsed * gasPrice 。所有这两个值你可以自定义,也可以使用系统参数获取当前两个值
关于 gas ,你可以参考我之前的一篇文章。
以太坊(ETH)GAS详解
gasPrice和gasLimit影响的是转账的速度,如果gas过低,矿工会最后才打包你的交易。在app中,通常给定一个默认值,并且允许用户自己选择手续费。
如果不需要自定义的话,还有一种方式来获取。获取以太坊网络最新一笔交易的 gasPrice ,转账的话, gasLimit 一般设置为21000就可以了。
Web3j还提供另外一种简单的方式来转账以太币,这种方式的好处是不需要管理nonce,不需要设置gasPrice和gasLimit,会自动获取最新一笔交易的gasPrice,gasLimit 为21000(转账一般设置成这个值就够用了)。
这个问题,我想是很多朋友所关心的吧。但是到目前为止,我还没有看到有讲解这方面的博客。
之前问过一些朋友,他们说可以通过区块号、区块哈希来判断,也可以通过Receipt日志来判断。但是经过我的一番尝试,只有 BlockHash 是可行的,在web3j中根据 blocknumber 和 transactionReceipt 都会报空指针异常。
原因大致是这样的:在发起一笔交易之后,会返回 txHash ,然后我们可以根据这个 txHash 去查询这笔交易相关的信息。但是刚发起交易的时候,由于手续费问题或者以太网络拥堵问题,会导致你的这笔交易还没有被矿工打包进区块,因此一开始是查不到的,通常需要几十秒甚至更长的时间才能获取到结果。我目前的解决方案是轮询的去刷 BlockHash ,一开始的时候 BlockHash 的值为0x00000000000,等到打包成功的时候就不再是0了。
这里我使用的是rxjava的方式去轮询刷的,5s刷新一次。
正常情况下,几十秒内就可以获取到区块信息了。
区块确认数=当前区块高度-交易被打包时的区块高度。
⑶ iOS开发ETH钱包
框架:web3swift => https://github.com/matter-labs/web3swift
1、创建钱包
2、导入钱包
3、获取余额
4、转账
5、调用智能合约
注意:
1、网络的切换
测试网 let web3 = Web3.InfuraRinkebyWeb3()
主网 let web3 = Web3.InfuraMainnetWeb3()
2、转账相关的,必须配置
KeystoreManager
TransactionOptions
3、调用智能合约,参数不对,会直接返回nil
⑷ Imtoken钱包「地址、密码、私钥、助记词、 Keystore」
imToken在使用之前,有几个名词必须深刻理解,不然就有可能造成区块链资产的损失,这几个名词为地址、密码、私钥、助记词、keystore。
若以银行账户为类比,这 5 个词分别对应内容如下:
地址=银行卡号
密码=银行卡密码
私钥=银行卡号+银行卡密码
助记词=银行卡号+银行卡密码
Keystore+密码=银行卡号+银行卡密码
Keystore ≠ 银行卡号
地址=银行卡号
1.生成
创建钱包后会生成一个以 0x 开头的 42 位字符串,这个字符串就是钱包地址,一个钱包对应一个钱包地址,地址唯一且不能修改,也就是说一个钱包中所有代币的转账收款地址都是一样的。例如,一个钱包中 ETH 的转账收款地址和 EOS 的转账收款地址是一样。这一点和交易平台上的不一样,平台上不同代币的转账收款地址一般都不同,因此,转币到交易平台前一定要确认好地址。
2.用途
钱包地址可以用于接收别人转币,也可以作为转币的凭证。
密码=银行卡密码
1.设定
在创建钱包时,需要设定一个密码,这个密码要求不少于 8 个字符,为了安全,密码最好设置复杂一点。密码可以进行修改或重置,修改密码有两种方法,一是直接修改密码,这需要输入原密码。如果原密码忘记了,用助记词或私钥导入钱包,同时设置新密码。
2.用途
密码的用途有两个,一是转账时候的支付密码,二是用 keystore 导入钱包时的登录密码。
3.特征
在现实世界中,一个银行卡只对应一个密码,对密码修改后,原密码就失去作用。但是在 imToken 钱包中,就不一样了,一个钱包在不同手机上可以用不同的密码,彼此相互独立,互不影响。例如,在 A 手机钱包中设置了一个密码,在 B 手机导入这个钱包并设置一个新密码,并不影响 A 手机钱包的密码使用。
私钥=银行卡号+银行卡密码
1.导出
创建钱包后,输入密码可以导出私钥,这个私钥属于明文私钥,由 64 位字符串组成,一个钱包只有一个私钥且不能修改。
2.用途
在导入钱包中,输入私钥并设置一个密码(不用输入原密码),就能进入钱包并拥有这个钱包的掌控权,就可以把钱包中的代币转移走。
助记词=银行卡号+银行卡密码
助记词=私钥
1.备份
创建钱包后,会出现一个备份助记词功能,选择备份助记词,输入密码,会出现 12 个单词,每个单词之间有一个空格,这个就是助记词,一个钱包只有一个助记词且不能修改。
2.用途
助记词是私钥的另一种表现形式,具有和私钥同样的功能,在导入钱包中,输入助记词并设置一个密码(不用输入原密码),就能进入钱包并拥有这个钱包的掌控权,就可以把钱包中的代币转移走。
3.特征
助记词只能备份一次,备份后,在钱包中再也不会显示,因此在备份时一定要抄写下来。
keystore+密码=银行卡号+银行卡密码
Keystore ≠ 银行卡号
keystore=加密私钥
keystore+密码=私钥
1.备份
钱包里有一个备份 keystore 功能,选择备份 keystore,输入密码,会出现一大段字符,这个就是 keystore。
2.用途
在导入钱包中,选择官方钱包,输入 keystore 和密码,就能进入钱包了。需要说明的是,这个密码是本手机原来设置的本钱包密码, 这一点和用私钥或助记词导入钱包不一样,用私钥或助记词导入钱包,不需要知道原密码,直接重置密码。
3.特征
keystore 属于加密私钥,和钱包密码有很大关联,钱包密码修改后,keystore 也就相应变化,在用 keystore 导入钱包时,需要输入密码,这个密码是备份 keystore 时的钱包密码,与后来密码的修改无关。
六、结语
在现实世界中,如果你的银行卡丢了,密码忘了,可以去银行帮你找回,你的钱还是你的钱,丢不了,这是中心化的优势。
但是在区块链世界中,除了你自己,没有人存储你的钱包信息,钱包信息要是丢了,没人能够帮你找回,钱包公司也不能。因此,只要你保护好钱包信息,钱包里面的财产只属于你自己,谁也抢不走,这是去中心化的优势。
1.忘记
你若把钱包信息忘了,会有什么后果呢?分这么几种情况:
(1)地址忘了,可以用私钥、助记词、keystore+密码,导入钱包找回。
(2)密码忘了,可以用私钥、助记词,导入钱包重置密码。
(3)密码忘了,私钥、助记词又没有备份,就无法重置密码,就不能对代币进行转账,等于失去了对钱包的控制权。
(4)密码忘了,keystore 就失去了作用。
(5)私钥忘了,只要你钱包没有删除,并且密码没忘,可以导出私钥。
(6)私钥忘了,还可以用助记词、keystore+密码,导入钱包找回。
(7)助记词忘了,可以通过私钥、keystore+密码,导入钱包重新备份助记词。
(8)keystore 忘了,只要你钱包没有删除,密码没忘,可以重新备份keystore。
(9)keystore 忘了,可以通过私钥、助记词,导入钱包重新备份 keystore。
从上可以看出,只要「私钥、助记词、Keystore+密码」有一个信息在,钱包就在。因此,备份好「私钥、助记词、Keystore+密码」最关键。
2.泄露
自己备份好钱包信息很重要,同时防止钱包信息泄漏,也很重要。若把钱包信息泄漏出去了,会有什么后果呢?分这么几种情况:
(1)地址泄漏了,没有关系。
(2)密码泄漏了,没有关系。
(3)地址+密码泄漏了,只要手机不丢,也没有关系。
(4)keystore 泄漏了,密码没有泄漏,没有关系。
(5)keystore+密码泄漏了,别人就能进入钱包,把币转走。
(6)私钥泄漏了,别人就能进入钱包,把币转走。
(7)助记词泄漏了,别人就能进入钱包,把币转走。
从上可以看出,只要「私钥、助记词、Keystore+密码」有一个信息泄漏出去,别人就拥有了你钱包的控制权,你钱包中的币就会被别人转移走。因此,「私钥、助记词、Keystore+密码」绝不能泄漏出去,一旦发现有泄漏的可能,就要立刻把里面的币转移走。
3.备份
既然私钥、助记词、Keystore+密码」如此重要,那么如何进行保存呢,最安全的方法就是: 手抄纸上
由于 Keystore 内容较多,手抄不方便,保存在电脑上也不安全,因此可以不对 Keystore 进行备份,只手抄私钥、助记词就足够了,手抄备份要注意以下几点:
(1)多抄几份,分别放在不同的安全区域,并告诉家人。
(2)对手抄内容进行验证,导入钱包看能不能成功,防止抄写错误。
(3)备份信息不要在联网设备上进行传播,包括邮箱、QQ、微信等。
(4)教会家人操作钱包。
如您需要查询您的区块链资产,可点击以下相应区块链资产链接,输入资产地址点击查询即可。
BTC 区块链查询链接 https://btc.com/
ETH 系列区块链查询链接 https://etherscan.io/
ETC 区块链查询 http://gastracker.io/
ZEC 区块链查询 https://explorer.zcha.in/
BTS 区块链查询 https://bitshares.openledger.info/#/dashboard
⑸ 【ETH钱包开发02】导入钱包
本文主要讲解通过助记词、keystore、私钥 3种方式来导入钱包。导入钱包就是说根据输入的这3者中的一个去重新生成一个新的钱包。导入钱包的过程和创建的过程其实是差不多的。
根据助记词导入钱包不需要原始密码,密码可以重新设置。根据用户输入的助记词,先验证助记词的合规性(格式、个数等),验证正确后,配合用户输入的密码重新生成一个新的钱包。
验证助记词的合规性(格式、个数等)
助记词导入钱包
通过私钥导入钱包其实和创建钱包的过程基本一致。因为私钥在导出的时候转换成了16进制,所以在导入私钥的时候,要把16进制转换为byte数组。
keystore就是钱包文件,实际上就是钱包信息的json字符串。导入keystore是需要输入密码的,这个密码是你最后导出keystore时的密码。将keystore字符串变成walletFile实例再通过 Wallet.decrypt(password, walletFile); 解密,成功则可以导入,否则不能导入。
这是Web3j的API,程序走到这里经常OOM!
具体原因的话,我就不多说了,细节大家可以看这里
https://www.jianshu.com/p/41d4a38754a3
解决办法
根据源码修改 decrypt 方法,这里我用一个已经修改好的第三方库
修改后的解密方法
导入Kestore
1、导入助记词和私钥是不需要以前的密码的,而是重新输入新的密码;导入Keystore则需要以前的密码,如果密码不正确,会提示地址和私钥不匹配。
2、关于备份助记词
用过imtoken的同学可以看到imtoken是可以导出(备份)助记词的。这个一开始我也很困惑,后来了解到其实它实在创建钱包的时候,在app本地保存了助记词,导出只是讲数据读取出来而已。还有一点,imtoken一旦备份了助记词之后,之后就没有备份那个功能了,也就是说助记词在本地存储中删除了;而且导入钱包的时候也是没有备份助记词这个功能的。
⑹ 【区块链课程】3.1—数字钱包的概念、特点
一、 钱包的概念
生活中的传统钱包相当于一个容器,可用来存放现金,但对于数字货币钱包而言,它不是用来储存数字货币的,而是用来储存和管理(包含私钥和公钥) 的管理容器,数字钱包里有地址(类似于你的银行卡账号)、私钥(类似于你银行卡的密码)。
私钥: 用户使用私钥进行签名交易,从而证明拥有该交易的输出权,其交易信息并不是存储在该钱包内,而是存储在区块链中。
公钥: 用来生成地址,储存交易,信息由私钥通过非对称加密算法生成。
钱包地址: 是一个以双字母开头(代表币种)的42位16进制哈希值字符串。ETH的地址是以 0x 开头的 42 位 16 进制哈希值字符串。例如: 如果将钱包比作银行卡, 那么钱包地址就是银行卡号。
三者之间的关系,简单说就是: 私钥生成公钥,公钥生成地址。 简而言之,地址就是你的账户,银行卡号,私钥就是你的账户密码。所以如果别人盗取了你的私钥,也就绝对拥有你账户的拥有权。
二、 钱包的特点
类比银行卡,私钥好比我们的银行卡密码+银行卡账号,而根据公钥生成的数字货币地址,就好比我们的银行卡账号,用作交易的转账地址。数字货币是保存在交易市场的,钱包这张银行卡保管着我们的地址和密码信息,让我们拥有地址上对应的数字货币的支配权。
三、钱包之于区块链的价值
加密数字货币是一种基于区块链技术的数字货币,数字货币钱包是专门用来管理这些资产的应用。钱包应用按照密码学原理创建1个或多个钱包地址,每个钱包地址都对应1个密钥对:私钥和公钥。
公钥是根据私钥进行一定的数学运算生成,与私钥一一对应。公钥主要是对外交易使用,每次交易都必须使用私钥对交易记录进行签名以证明对相关钱包地址里面的资产有控制权。
私钥是唯一能够证明对于数字资产有控制权的凭证,对于数字资产钱包来说,私钥是最重要的。私钥的生成和存储方式决定了资产安全与否。
所以钱包的目的就是用来保存私钥的。只要有私钥,就代表了你拥有了对应的token。
但目前数字货币市场上存在着数字管理不便、交易和兑换门槛高、区块链性能不足以及设计不合理、区块链开发成本高、连接现实难、缺乏应用场景等问题。说的简单点,就是基于不同公链开发的token都需要各自的钱包,于是我们的手机就被多种钱包的App占满。
四、数字钱包的几大关键词:
1、钱包名:
数字货币钱包的钱包名就是你创建钱包时的账号名或者昵称,每个钱包地址对应一个账号名,因为通常数字钱包都可以创建多个钱包地址,为了便于分辨和管理,给每个钱包地址设置一个名字还是很有必要的。
2、密码:
当你创建数字货币钱包账号的时候,需要设置一个密码,当你转账支付时需要使用这个密码确认;当你对钱包的私钥或者keystore进行备份导出时也需要密码确认;另外,如果你使用keystore导入钱包时也需要密码确认,而使用私钥导入时可以重置密码。
3、助记词:
当你创建钱包的时候,会要求你记录一串助记词,通常是由多个(12,15,18,21位)不规则的英文单词毫无规律的组成的,相当于你数字钱包的密码+支付密码。助记词在创建钱包的时候会提示你进行保存,请务必保存好,建议用笔记录在单独的笔记本上,并保管好你的笔记本。
4、keystore:
keystore是钱包存储私钥的一个文件(json),这个文件使用时要用到钱包的密码。选择导出或者导入keystore时,都需要输入密码,这个密码是你原来设置的本钱包密码, 这一点和用私钥或助记词导入钱包不一样,用私钥或助记词导入钱包,不需要知道原密码,可以直接重置密码。
⑺ 管好你的“钱包”
Kiwi(WeChat:Kiwind)
一:什么是私钥?助记词?什么是明文私钥?以及什么是keystore ?
1、私钥: 随机生成的,用来解锁对应(钱包)地址的一串字符。生成一个比特币地址的同时就会有一个私钥被生成,严格来说是, 先生成私钥,然后通过私钥使用加密函数来计算出地址 。作为用户,我们很少会直接看到私钥,一般情况下,私钥是被存储在钱包文件里,由钱包软件进行管理。下面就是一个比特币私钥:
这是对应私钥生成的地址:
2、助记词: 其实是 明文私钥的另一种表现形式 ,因为私钥是一个64位的哈希值,非常复杂。所以通过助记词将其简化。
3、明文私钥:未加密的私钥。这意味着任何人只要拿到你的明文私钥,就可以控制你的钱包资产。 我们时常会听说用户被盗币了,其实就是私钥泄露,币被转走。有时候我们会把地址比作银行卡号,私钥比作银行卡密码。所以说保护好自己的私钥有多重要。
4、keystore : 是 加密过后的私钥 ,需要用用户生成这个文件时设置的密码解开,才能够进行交易操作。如果你备份了keystore 但是忘记了自设密码,那么就尴尬了。所以keystore 的同时,也要记住密码。
二:如何导入钱包?
以imToken为例:
1、官方钱包导入
2、助记词导入
3、私钥导入
注意 :
1、imToken目前无法导出明文私钥,只能导出助记词和Keystore,但是可以导入明文私钥。
2、明文私钥可以去MyEtherWallet,先将Keystore导入,然后导出明文私钥。具体操作步骤如下:
(1)登陆 myetherwallet.com
(2)点击View Wallet Info(查看钱包信息),后选择Keystore File,在右侧的灰色区域上传Keystore文本信息,注意要.txt格式。
(3)上传完成,输入imToken上设置的钱包密码,点击Unlock解锁。
(4)导出明文私钥(切记安全保存)。
3、使用imToken的ETH钱包时,用Keystore导入钱包时,输入的是之前的密码。用助记词和私钥导入钱包时,输入的是新的密码。所以一旦助记词被盗,黑客是可以设置新的密码的!
具体说明请看下这篇来自“乌托邦皮条社”彭皓的文章:
http://mp.weixin.qq.com/s/5uNosRiiqpeTYOVR7i2TrQ
⑻ 以太坊怎么根据地址获取私钥
安装metamask metamask是可以安装在浏览器上的扩展程序,可以在进行安装。建议在安装在虚拟机中
以太坊的私钥生成是通过secp256k1椭圆曲线算法生成的,secp256k1是一个椭圆曲线算法,同比特币。公钥推导地址和比特币相比,在私钥生成公钥这一步其实是一样的,区别在公钥推导地
以太坊钱包地址就是你的银行卡号,倘若你把地址忘了,可以用私钥、助记词、keystore+密码,导入钱包找回。首先注册登录bitz,找到资产下面的以太坊,点击充值,这时候就能获取充值地址了。然后把钱包里的以太坊直接充到这个地址就行了。