【问题标题】:hdwallet provider create wallet for userhdwallet 提供商为用户创建钱包
【发布时间】:2019-03-21 17:39:48
【问题描述】:

我创建了一个促进代币销售的智能合约。我希望用户能够按下一个按钮,自动生成一个可以发送代币的 ERC20 钱包。

我正在使用 truffle HDWallet Provider 和 Infura。我不希望用户必须使用 MetaMask 或其他任何东西。我将使用用户生成的钱包的私钥在后端签署交易。

我将如何实现这一点,以便为每个想要执行交易的新用户创建一个新钱包?

【问题讨论】:

    标签: javascript html ethereum solidity truffle


    【解决方案1】:

    这是允许我在按下按钮时创建钱包的代码。我现在需要找到一种方法来存储这些钱包的凭据,以便我可以签署交易并将代币转移给它们。

      var bip39 = require('bip39');
      const EthereumUtil = require('ethereumjs-util');
      const hdkey = require('hdkey');
    
      const mnemonic = bip39.generateMnemonic(); //generates string
      const seed = bip39.mnemonicToSeed(mnemonic); //creates seed buffer
    
      const root = hdkey.fromMasterSeed(seed);
      const masterPrivateKey = root.privateKey.toString('hex');
    
      const addrNode = root.derive("m/44'/60'/0'/0/0");
      const pubKey = EthereumUtil.privateToPublic(addrNode._privateKey);
      const addr = EthereumUtil.publicToAddress(pubKey).toString('hex');
      const address = EthereumUtil.toChecksumAddress(addr);
    

    【讨论】:

      【解决方案2】:

      非常简单,只需创建一个 HDWalletProvider 并且provider.addresses 拥有您可以使用的所有帐户:

      代码如下:

      const createWallet =  function(_providerUrl) {
          const mnemonicPhrase = bip39.generateMnemonic()
          let provider = new HDWalletProvider({
              mnemonic: {
                  phrase: mnemonicPhrase
              },
              providerOrUrl: "http://localhost:8545"
          });
          return provider.addresses
      }
      

      地址有帐号

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        • 1970-01-01
        • 2017-05-19
        • 2021-08-07
        相关资源
        最近更新 更多