天天看點

區塊鍊HD多鍊錢包,同一種子管理生成BTC/ETH/EOS錢包助記詞、私鑰、位址!

一、什麼是HD錢包:

     它是分層确定性(Hierarchical Deterministic)錢包的縮寫 HD Wallets,是目前廣泛使用的虛拟貨币錢包标準。HD錢包從單個根種子(root seed)中建立,為128到256位的随機數,任何相容HD錢包的根種子也可重新創造整個HD錢包,是以擁有HD錢包的根種子就等于擁有了所有密鑰,友善存儲、導入及導出。

二、BIP32/BIP39/BIP44含義:

BIP32:定義 Hierarchical Deterministic wallet (簡稱 "HD Wallet"),是一個系統可以從單一個 seed 産生一樹狀結構儲存多組            keypairs(私鑰和公鑰)。好處是可以友善的備份、轉移到其他相容裝置(因為都隻需要 seed),以及分層的權限控制等

BIP39:将 seed 用友善記憶和書寫的單字表示。一般由 12 個單字組成,稱為 mnemonic code(phrase),中文稱為助記詞或助記碼

BIP44:基于 BIP32 的系統,賦予樹狀結構中的各層特殊的意義。讓同一個 seed 可以支援多币種、多帳戶等。各層定義如下:

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

其中的 purporse' 固定是 44',代表使用 BIP44。而 coin_type' 用來表示不同币種,

例如 BTC 就是 0',ETH 是 60'   ETC 是 61

三、多鍊錢包的助記詞、私鑰、位址生成。

 注:所需要的依賴包安裝

安裝 bip39:https://www.npmjs.com/package/bip39

npm install bip39  --save  

安裝 ethers.js:  https://docs.ethers.io/ethers.js/html/index.html

npm install ethers  --save

安裝 bitcoinjs-lib:https://www.npmjs.com/package/bitcoinjs-lib

npm install bitcoinjs-lib  --save

安裝 eosjs-ecc:https://github.com/EOSIO/eosjs-ecc#randomkey

npm install eosjs-ecc --save
           
//引用依賴(根據工程環境安裝的不同版本對應使用)
import { ethers } from 'ethers';
import bitcoin from 'bitcoinjs-lib';
import bip39 from 'bip39';
import bip32 from 'bip32';
import eosEcc from 'eosjs-ecc';
           

1、HD錢包助記詞生成:

ethers.js生成助記詞:
var mnemonic = ethers.Wallet.createRandom().mnemonic
bip39生成助記詞:
var mnemonic = bip39.generateMnemonic()
           

2、BTC錢包通過助記詞生成私鑰、公鑰、位址:

//設定生成測試or正式環境的錢包
const network = bitcoin.networks.bitcoin
// 計算seed:
const seed = bip39.mnemonicToSeed(mnemonic)
const root = bip32.fromSeed(seed,network)
const path = "m/44'/0'/0'/0/0";
const keyPair = root.derivePath(path)
const privateKey = keyPair.toWIF()
console.log("BTC私鑰:", privateKey)
const publicKey = keyPair.publicKey.toString("hex")
console.log("BTC公鑰:", publicKey)
let address = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey , network:network})
console.log("BTC位址:", address.address, "\n")
           

3、ETH錢包通過助記詞生成私鑰、公鑰、位址:

var Wallet = ethers.Wallet.fromMnemonic(mnemonic);
var privateKey = Wallet.privateKey;
console.log("ETH私鑰:",privateKey)
var address = Wallet.address;
console.log("ETH位址:",address)
var compressedPublicKey = Wallet.compressedPublicKey;
console.log("ETH公鑰:",compressedPublicKey)

//生成新的助記詞、私鑰、位址
var wallet = ethers.Wallet.createRandom();
let mnemonic = wallet.mnemonic;
var address = wallet.address;
console.log("ETH位址:"address)
var privateKey = wallet.privateKey;
console.log("ETH私鑰:",privateKey)
var compressedPublicKey = wallet.signingKey.keyPair.compressedPublicKey;
console.log("ETH公鑰:",compressedPublicKey)
           

4、EOS錢包通過助記詞生成私鑰、公鑰:

var eosPrivate = eosEcc.seedPrivate(mnemonic);
console.log("EOS私鑰:",eosPrivate)
const  eosPubkey = eosEcc.privateToPublic(eosPrivate);
console.log("EOS公鑰:",eosPubkey)

 //随機生成新的私鑰公鑰
eosEcc.randomKey().then(privateKey => {
     console.log('Private Key:\t', privateKey) 
     console.log('Public Key:\t', eosEcc.privateToPublic(privateKey)) 
  })


如何注冊EOS賬戶:
需安裝: 
npm install eosjs --save
eos環境配置:
var Eos = require('eosjs')
var eosConfig = {
    keyProvider: ['私鑰'], // 配置私鑰字元串
    httpEndpoint: 'http://51.15.224.168:8888', //DEV開發鍊url與端口
    //httpEndpoint: 'https://nodes.get-scatter.com', //主網
    chainId: "038f4b0fc8ff18a4f0842a8f0564611f6e96e8535901dd45e43ac8691a1c4dca", // 通過cleos get info可以擷取chainId
    //chainId: "aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906", //主網
    broadcast: true,
}
var eos = Eos(eosConfig)

            var creatoraccount = "accounthr123"; //主賬号
            var newaccount = "sdrghiochaiq"; //新賬号
            var newaccount_pubkey = pubkey; //新賬号的公鑰
            //建構transaction對象
            eos.transaction(tr => {
                //建立賬号
                tr.newaccount({
                    creator: creatoraccount,
                    name: newaccount,
                    owner: newaccount_pubkey,
                    active: newaccount_pubkey
                })

                //為新賬号充值RAM
                tr.buyrambytes({
                    payer: creatoraccount,
                    receiver: newaccount,
                    bytes: 3072
                })
                //為新賬号抵押CPU和NET資源
                tr.delegatebw({
                    from: creatoraccount,
                    receiver: newaccount,
                    stake_net_quantity: '1.0000 EOS',
                    stake_cpu_quantity: '1.0000 EOS',
                    transfer: 0
                })
            }).then(r => {
                console.log(r);
            }).catch(e => {
                console.log(e)
            });
           
        }catch (e){
            
        }

           

測試結果:

區塊鍊HD多鍊錢包,同一種子管理生成BTC/ETH/EOS錢包助記詞、私鑰、位址!

學如逆水行舟,不進則退。心似平原跑馬,易放難收。全棧工程師是指掌握多種技能,并能利用多種技能獨立完成産品的人。 也叫全端工程師(同時具備前端和背景能力),英文Full Stack engineer。【人工智能】【區塊鍊】【系統/網絡/運維】【雲計算/大資料】【資料庫】【移動開發】【後端開發】【遊戲開發】【UI設計】【微服務】【爬蟲】【Java】【Go】【C++】【PHP】【Python】【Android/IOS】【HTML/CSS】【JavaScript】【Node】。。。

歡迎各位大神萌新一起專研分享各行各業技術!

Chain區塊鍊開發社群:593674370

區塊鍊HD多鍊錢包,同一種子管理生成BTC/ETH/EOS錢包助記詞、私鑰、位址!

繼續閱讀