本文目录

以太坊钱包项目中 Geth 的启用 DEMO

🌙
手机阅读
本文目录结构

DEMO 代码如下

省略了 geth 的比较等之类的校验;

核心代码如下;

const Manager = require('ethereum-client-binaries').Manager;
const config = require('./clientBinaries.json');
const mgr =  new Manager(config);
const { spawn, spawnSync } = require('child_process');
var op = require('openport');

let home;
if(process.env.APPDATA) {
  home = process.env.APPDATA + '/MedRec';
}else {
  home = process.env.HOME;
  home += process.platform == 'darwin' ? '/Library/Preferences' : '/.medrec';
}

let runGeth = (binaryPath) => {
  op.find(
    {
      startingPort: 6338,
      endingPort: 10000,
    },
    function (err, port) {
      if(err) {
        console.error('Could not find open port for the Ethereum client');
        process.exit(1);
      }
      let bootnode = 'enode://757b0f2c9e2bede3a2554985880fae15bdf6ce90b375ec9cb025a397499b75f7994ee05edbdaddaf469edb72198220f2a32c216925ca50a5626f497de889d652@34.239.63.141:6338';
      let instance = spawn(binaryPath, [
        '--datadir=' + home,
        '--bootnodes=' + bootnode,
        '--rpc',
        '--rpcapi=eth,miner,personal,net,web3',
        '--rpccorsdomain=*', //TODO: fix this security vulnerability and specify exact domains
        '--port=' + port, '--networkid=633732',
        '--targetgaslimit=10000000000000',
      ]);

      instance.stderr.on('data', (data) => {
        process.stdout.write(`Ethereum: ${data}`);
      });
    }
  );

};

let initGeth = (binaryPath) => {
  spawnSync(binaryPath, ['--datadir', home, 'init', 'EthereumClient/medrec-genesis.json']);
  runGeth(binaryPath);
};

mgr.init({
  folders: [
    home + '/Geth/',
  ],
})
  .then(() => {
    if(mgr.clients.Geth.state.available) {
      initGeth(mgr.clients.Geth.activeCli.fullPath);
    }else {
      mgr.download('Geth', {
        downloadFolder: home,
      }).then(file => initGeth(file.unpackFolder + '/geth'));
    }
  })
  .catch(err => {
    console.log(err);
    process.exit(1);
  });

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了