イーサー坊keystoreファイル生成の概要

1363 ワード

以太坊財布は大きく分けて2種類ございます
  • gethオリジナル財布
  • に基づく
    256ビットの秘密鍵をランダムに生成し、パスワードで暗号化してjson文字列を生成しkeystoreファイルに格納する.
  • BIPプロトコルに基づいて
  • を生成する.
    この部分は,生財布の生成秘密鍵部分を修正しただけで,ランダム256ビット秘密鍵の代わりにBIPプロトコルを用いた.
    BIPはビットコインのアップグレードプロトコルです
    BIP 32は、秘密鍵の管理を容易にするため、1つのseedで鍵ツリーを生成する.
    BIP 39プロトコルは、seedを助記語で符号化している.アシストとseedは等価であり、アシストはseedの別の符号化フォーマットである.
    BIP 44プロトコルは、アドレスアプリケーションの範囲をさらに拡大し、ビットコイン、イーサー坊など多くのフォーマットのアドレスをカバーしています.
    Web 3ベースの実装:
    // , 
    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');