Truffle

如何從 Ganache 帳戶獲取 Truffle 的私鑰

  • October 22, 2018

在 truffle+ganache 上進行一些 ERC-735 測試時,我在創建聲明簽名時遇到了困難。他們需要從我的 ganache 帳戶簽名,但我不知道它的私鑰。要使用的程式碼是這樣的:

const messageToSign = "hello world";
const privateKey = "43f2ee33c522046e80b67e96ceb84a05b60b9434b0ee2e3ae4b1311b9f5dcc46";
var msgHash = EthUtil.hashPersonalMessage(new Buffer(messageToSign));
var sig = EthUtil.ecsign(msgHash, new Buffer(privateKey, 'hex')); 
var signatureRPC = EthUtil.toRpcSig(sig.v, sig.r, sig.s)
console.log(signatureRPC);

正如在使用 truffle 測試文件中的私鑰簽署數據中所解釋的那樣,有一種方法可以使用以下方法對來自 Truffle 的消息進行簽名:

let signedMessage = await web3.personal.sign("data", accounts[0])

但現在已棄用,它會引發“不支持方法personal_sign”錯誤,因此解決方案似乎是使用私鑰進行顯式簽名(上面的程式碼)。

如何從 ganache 獲取私鑰?甚至更好的是,我可以從松露中獲得私鑰嗎?

您可以ganache以助記符作為參數 ( -m 'jar boss sister abuse equal ....') 開始。這樣做,您將:

  • 保證每次執行都生成相同的地址
  • 能夠從該助記符中導出私鑰
const bip39 = require('bip39');
const hdkey = require('ethereumjs-wallet/hdkey');
const wallet = require('ethereumjs-wallet');

const seed = bip39.mnemonicToSeed(mnemonic); // mnemonic is the string containing the words
const hdk = hdkey.fromMasterSeed(seed);
const addr_node = hdk.derivePath("m/44'/60'/0'/0/0"); //m/44'/60'/0'/0/0 is derivation path for the first account. m/44'/60'/0'/0/1 is the derivation path for the second account and so on
const addr = addr_node.getWallet().getAddressString(); //check that this is the same with the address that ganache list for the first account to make sure the derivation is correct
const private_key = addr_node.getWallet().getPrivateKey();

引用自:https://ethereum.stackexchange.com/questions/60995