gpt4 book ai didi

javascript - 如何通过HardHat获取底层合约地址的私钥?

转载 作者:行者123 更新时间:2023-12-05 04:39:43 28 4
gpt4 key购买 nike

我有来自 HardHat 教程的智能合约 https://hardhat.org/tutorial/writing-and-compiling-contracts.html

我成功部署了它。

async function main() {
const [deployer] = await ethers.getSigners();

console.log("Deploying contracts with the account:", deployer.address);

console.log("Account balance:", (await deployer.getBalance()).toString());

const Token = await ethers.getContractFactory("Token");
const token = await Token.deploy();

console.log("Token address:", token.address);
}

main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});

但是只有联系人的地址返回给我,私钥没有。

  console.log("Deploying contracts with the account:", deployer.address);

这样怎么才能得到私钥呢?我需要它的方法

web3.eth.accounts.wallet.add('0x<private_key>');

否则我无法在智能合约上调用转账方法。

最佳答案

设计上不可能。

合约地址由部署交易参数决定。具体来说,ethers deploy() 函数默认使用 CREATE 操作码,因此合约地址由部署地址和部署地址决定交易 nonce 参数。

但合约地址的私钥在部署期间从未生成 - 因此无法返回。只是地址。


Because otherwise I can't call the transfer method on the smart contract.

正确。如果你想从合约中转出资金,你需要实现一个功能才能做到这一点。

pragma solidity ^0.8;

contract MyContract {

// transfers the entire balance of this contract to the `msg.sender`
function widthdraw() external {
require(msg.sender == address(0x123), "Not authorized");
payable(msg.sender).transfer(address(this).balance);
}
}

关于javascript - 如何通过HardHat获取底层合约地址的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70394350/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com