个人版eth钱包开发及导出教程

    2020-04-02 12:04:14 #eth钱包开发 #批量创建eth钱包 #eth交易所钱包

      伴随着数字货币发展的浪潮,ETH越来越被人们所接受。如果你仅在交易所开了账户,却没钱包地址,那么你的数字资产正处于一个被交易所托管的状态。万一交易所出现了技术故障、被盗等意外的话,你的钱就凉凉了。大型交易所或许还会想办法还给你,但不能保证它不会随时倒闭、跑路……这样的你还能放心吗?

      币世界里的钱包的功能是什么?

      钱包是用来存储、接收以及发送用户的加密货币资产。

      哪些场景中会使用到ETH钱包?

      1、其他人要送你币,你是不是要发送给对方一个钱包地址用来接收币。

      2、你需要转给其他人币,你是否需要一个钱包把自己拥有的币转到他的钱包地址里。

      3、参与ICO活动,此时你是不是需要用钱包把比特币转到项目方的钱包地址里,然后耐心等待对方把token发到你钱包中。

      4、在去中心化交易所进行交易活动,登录钱包,资产转账在自己钱包和别人钱包之间进行。

      5、在中心化交易所中进行炒币活动,比如币安等大型交易所,提现操作的时候会要求你填写一个钱包的地址。

      6、其他一些Dapp:比如在参与eth游戏、社区等,常常需要用钱包登录。

      在创建、导出钱包之前,我们先简单认识一下BIP。

      BIP协议其实是btc的一种改进协议,在区块链钱包开发中用常用的有BIP32、BIP39和BIP44。

      BIP32,给层级确定性钱包即HD Wallet进行了定义,是一个系统从seed生成类似于一树状结构储存多组 keypairs(私钥和公钥)。它的优势在于方便备份、转接到别的相容装置以及对于分层的控制权等。

      BIP39,主要用于生成助记词,它能将 seed 用人们方便记忆和简洁的英文单词表示,常见的由十二个单字组成,从包含2048个单词的词库里抽取。

      BIP44,它是一款基于 BIP32 的系统,赋予树状结构中的每一层拥有着特殊的意义。让相同的seed 可以支持多币种、多帐户。各层定义如下:

      m / purpose' / coin_type' / account' / change / address_index

      purporse': 固定数值44', 意味着BIP44

      coin_type'意思是币种, 可兼容多种币, 像比特币是0', 以太坊是60',比特币常见是 m/44'/0'/0'/0,比特币常见是 m/44'/60'/0'/0

      account’:代表账号

      change’: 0代表外部链(External Chain),意味着用户接收比特币,1代表内部链(Internal Chain),作用是接收找零

      address_index:代表钱包索引

      以太坊钱包开发需用到两个第三方库

      web3j:我们可以认为是eth API的java版本

      bitcoinj:它可生成支持 BIP32以及BIP44钱包。还有一些其他的库支持BIP32和BIP44。例如:Nova Crypto的系列包,就包含有BIP32,BIP39,BIP44。值得一提的是,由于web3j不支持生成BIP 44的钱包,而市面上很多钱包采用BIP32,BIP39,BIP44标准结合而成,所以引用此包。

      在完成钱包创建以后,可运用如下工具去测试助记词以及校验助记词成功生成的address、公钥、私钥等。
      https://iancoleman.io/bip39/

      如何创建钱包?

      在认识BIP 后,我们开始进行以太坊钱包开发,创建钱包分为如下步骤:

      首先,生成一组随机的助记词;其次是计算出种子;接着得到 master key和 child key,最后我们选取第一组child key即m/44'/60'/0'/0/0 生成私钥,keystore及地址。

      1、引用库:

      web3j


     

      创建钱包相关



      2、生成一组随机的助记词



      3.根据之前生成助记词生成Seed生成master key ,通过BIP44派生的地址,获得KeyPair



      实际上现在已得到钱包的公钥、私钥以及地址了。

      4、根据keypair开始创建钱包


     

      这种情况下得到的就是符合bip32、bip39、bip44的钱包,当然也可以和市面上包括imtoken在内的很多钱包通用了。

      HLWallet


      如何导出钱包

      首先,需要导出私钥

      根据解密获取ECKeyPair

      根据ECKeyPair获取私钥,随后转换成16进制,就是最终的私钥了。



      其次,导出keystore




      值得注意的一点:在进行导出私钥、keystore、助记词之前,都必须先进行密码验证是否正确,,可以调用如下方法,接入没有抛出异常的提醒,那就可以把信息展示给用户看了。
    Wallet.decrypt(password, walletFile);

      最后,成功导出助记词

      助记词其实是没有办法通过私钥或者keystore推导出来的。常用的做法是在进行钱包创建的时候把助记词先加密后放在本地存储,需要导出时解密。

      需要留意的一点:通过IMToken导入私钥或者KeyStore创建的钱包,是没有导出助记词这个功能的;假如是根据助记词创建的,那么有导出助记词的功能。并且这个助记词一旦选择备份之后,备份的功能就会立即消失,相当于从本地存储中删除了。


     

      但是现在一般的交易所都不会自己去单独开发一套钱包系统了。不仅仅因为比特币以太坊等区块节点数据庞大,同步传输慢,而且在服务器和带宽的花费成本比较高。最重要的是养不起这样的一个技术团队!原生钱包放在服务器非常不安全,被偷就凉凉了。现在市面上大家用的比较多的像优盾钱包,拥有API快捷接入,支持市面上所有币种,余额自动归集等优势,满足企业级数字资产钱包管理的多种需求


    相关文章:

    1、币交易平台如何成功对接BTC钱包?

    2、新手必看 | 钱包还有冷热之分吗?

    3、优盾专访丨一个“武汉人”的封城自述,纠结与希望

    4、区块链钱包开发中私钥存储如何用代码生成

    在線客服

    申請試用

    申請試用

    設置