Truffle
如何從 Ganache 帳戶獲取 Truffle 的私鑰
在 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();