美文网首页
以太坊keystore文件生成简介

以太坊keystore文件生成简介

作者: 大鱼本鱼 | 来源:发表于2018-10-08 12:17 被阅读0次

    以太坊钱包大致分两类

    1. 基于geth原生钱包

    随机生成256位私钥,用密码加密后生成json字符串并存储成keystore文件。

    1. 基于BIP协议生成

    这部分只是将原生钱包的生成私钥部分做了修改,用BIP协议替代了随机256位私钥。

    BIP是比特币的升级协议

    BIP32是为了方便管理私钥,用一个seed生成密钥树。

    BIP39协议是用助记词方式编码了seed。助记词和seed是等效的,助记词是seed的另一种编码格式。

    BIP44协议进一步扩展了地址应用范围,覆盖比特币,以太坊等多种格式地址。

    基于web3的实现:

    //助记词,引用
    bip39 = require('bip39');
    hdkey = require('ethereumjs-wallet/hdkey');
    util = require('ethereumjs-util');
    
    //生成助记词
    mnemonic = bip39.generateMnemonic();
    
    //根据助记词,生成seed,获取key(公私钥对)
    seed = bip39.mnemonicToSeed(mnemonic);
    hdWallet = hdkey.fromMasterSeed(seed);
    //key0
    key0 = hdWallet.derivePath("m/44'/60'/0'/0/0");
    //key1
    key1 = hdWallet.derivePath("m/44'/60’/0’/0/1");
    .............
    
    //根据key0生成钱包地址
    address0 = util.toChecksumAddress(util.pubToAddress(key0._hdkey._publicKey, true).toString('hex'));
    
    //获取key0私钥
    privateKey0 = "0x" + key0._hdkey._privateKey.toString('hex');
    
    //用私钥获取以太坊账户account0
    account0 = web3.eth.accounts.privateKeyToAccount(privateKey0);
    
    //加密私钥并生成keystore的json文件
    acc0json = web3.eth.accounts.encrypt(privateKey, 'password');
    
    //用keystore文件获取以太坊账户account0
    account0 = web3.eth.accounts.decrypt(acc0json,'password');
    

    相关文章

      网友评论

          本文标题:以太坊keystore文件生成简介

          本文链接:https://www.haomeiwen.com/subject/ziwdaftx.html