带你玩转区块链--虚拟货币钱包的基础和实现-第二章-第五节【钱包篇】--未完,持续更新中

一、意义:

           在区块链世界中,虚拟货币一般存放在三个地方(矿机用户端、钱包、交易所)。矿机端转账繁琐,没有UI界面,对于无运维基础的用户来说具有很大的上手难度。交易端无法直接获取矿机端的收益,且有项目方跑路的危险性。为了解决以上问题,亟需一款既有安全性又能简单完成转账的软件。此时“钱包”横空出世,以区块链世界运输者的身份完善了区块链世界。

          钱包的作用也很直观,两个功能:1.存放钱。2.交易(转账,把钱付出去,收进来)。下面我们来刨根挖底、一步一步开发一款自己的钱包。

二、虚拟货币钱包技术剖析

1.HD钱包BIP44

相信各位小伙伴,在平时生活中都使用或听说过区块链钱包。那么各位对于助记词一定不会陌生,一个简单的助记词是如何创建和管理多币种的地址呢?答案就在HD钱包里。

HD 钱包是目前常用的确定性钱包 ,HD 是 Hierarchical Deterministic(分层确定性)的缩写。所谓分层,就是一个大公司可以为每个子部门分别生成不同的私钥,子部门还可以再管理子子部门的私钥,每个部门可以看到所有子部门里的币,也可以花这里面的币。也可以只给会计人员某个层级的公钥,让他可以看见这个部门及子部门的收支记录,但不能花里面的钱,使得财务管理更方便了。这个过程就是基于BIP44来实现的,具体实现的方法就不深究了,各位有一个概念即可。

2.Ethers.js

Ethers.js则是一个轻量级的web3.js替代品。具有Web3的全部功能。且Ethers.js具有创建钱包等相关功能,所以我们在此节将使用Ethers.js与合约交互。官方文档:https://learnblockchain.cn/docs/ethers.js/

安装:

npm install --save ethers

5种生产钱包的方法:

为了快速测试,这里我们默认连接ganache-cli(8545)

let ethers=require('ethers');
//1.通过私钥创建钱包
let privateKey='0xec3702c3c89d352b95e0e0288fab1ca16c55977963804748e215cb9415c72b58';
let w1=new ethers.Wallet(privateKey);
console.log(w1.privateKey);
console.log(w1.address);
//2.随机创建一个新的钱包
let w2=new ethers.Wallet.createRandom();
console.log(w2.privateKey);
console.log(w2.address);
console.log(w2.mnemonic);
//3.给定json文件,创建钱包
let data = {
    id: "fb1280c0-d646-4e40-9550-7026b1be504a",
    address: "88a5c2d9919e46f883eb62f7b8dd9d0cc45bc290",
    Crypto: {
        kdfparams: {
            dklen: 32,
            p: 1,
            salt: "bbfa53547e3e3bfcc9786a2cbef8504a5031d82734ecef02153e29daeed658fd",
            r: 8,
            n: 262144
        },
        kdf: "scrypt",
        ciphertext: "10adcc8bcaf49474c6710460e0dc974331f71ee4c7baa7314b4a23d25fd6c406",
        mac: "1cf53b5ae8d75f8c037b453e7c3c61b010225d916768a6b145adf5cf9cb3a703",
        cipher: "aes-128-ctr",
        cipherparams: {
            iv: "1dcdf13e49cea706994ed38804f6d171"
        }
    },
    "version" : 3
};

let json = JSON.stringify(data);
let password = "foo";

ethers.Wallet.fromEncryptedJson(json, password).then(function(wallet) {
    console.log("Json Address: " + wallet.address);
    // "Address: 0x88a5C2d9919e46F883EB62F7b8Dd9d0CC45bc290"
});
//4.给定助记词,生成钱包
let mnemonic = "pepper gift color reward collect timber pyramid rhythm avoid head city want";
let path = "m/44'/60'/0'/0/0";    //格式为: m/44'/60'/0'/0/{account_index}
let secondMnemonicWallet = ethers.Wallet.fromMnemonic(mnemonic, path);
console.log("secondMnemonicWallet Address: " + secondMnemonicWallet.address);
//5.随机创建一个助记词钱包
let randValue=ethers.utils.randomBytes(16);
let w5_mnemonic=ethers.utils.HDNode.entropyToMnemonic(randValue);
console.log(`mnemonic: ${w5_mnemonic}`);
let path1 = "m/44'/60'/0'/0/0";
let thirdMnemonicWallet = ethers.Wallet.fromMnemonic(w5_mnemonic, path1);
console.log("thirdMnemonicWallet:",thirdMnemonicWallet.address);

3.React

一款前端框架,由于官方推出了Truffle-react框架,所以促进了大部分区块链项目使用react开发。目前React和Vue拥有着区块链项目很大的市场占有率。

三、项目实现

1.准备工作

create-react-app Wallet-eth
npm install --save ethers
发布了24 篇原创文章 · 获赞 0 · 访问量 6063

猜你喜欢

转载自blog.csdn.net/Laughing_G/article/details/104715173