【问题标题】: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
}
地址有帐号