HDWallet 从与 hardhat 相同的助记符生成不同的地址

HDWallet generates different addresses from same mnemonics than hardhat

我的目的是获取安全帽账户的私钥,通过指定的助记词生成。然而,无数的答案表明,在安全帽中无法获得这些账户的私钥。

话虽这么说,我有一个脚本,它接受一个助记符,从中创建一个 HDWallet,然后派生其他 HDWallet,它们应该具有 hardhat 从同一助记符生成的相同地址。虽然他们没有。

我错过了什么吗?为什么 HDWallets 从同一个助记词生成的地址与 hardhat 不同?

这是脚本:

async function main() {
  const mnemonic = process.env.MNEMONIC!;
  console.log('mnemonic:', mnemonic);

  const HDNode = ethers.utils.HDNode.fromMnemonic(mnemonic);

  for (let i = 0; i < 20; i++) {
    const derivedNode = HDNode.derivePath(`m/44'/60'/0'/${i}`);
    console.log(`child ${i} address:`, derivedNode.address);
  }
}

事实证明,我指定的派生路径不正确。

而不是

const derivedNode = HDNode.derivePath(`m/44'/60'/0'/${i}`);

我应该用

const derivedNode = HDNode.derivePath(`m/44'/60'/0'/0/${i}`);