是否有从命令行Hardhat脚本RSK读取令牌地址的方法?



我有一个Hardhat脚本查询RIF令牌余额根茎。然而,RIF地址是硬编码在我的脚本:

const rifTokenAddress = '0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5';
​
async function main() {
const erc20 = await ethers.getContractAt(
['function balanceOf(address owner) view returns (uint)'],
rifTokenAddress.toLowerCase(),
);
const walletAddress = (await ethers.getSigner(0)).address;
const rifBalance = await erc20.balanceOf(walletAddress);
console.log(ethers.utils.formatEther(rifBalance));
}
​
main();

现在我用这个命令来运行脚本:

npx hardhat run scripts/balances.js --network rskmainnet

我希望能详细说明命令行中的令牌地址如下:

npx hardhat run scripts/balances.js --network rskmainnet --token 0x2d919f19D4892381d58EdEbEcA66D5642ceF1A1F

有没有办法修改Hardhat脚本这样它就可以从命令行,类似于我如何选择网络与--network参数?​作为参考,这是我的hardhat.config.js文件:

require('@nomicfoundation/hardhat-toolbox');
const { mnemonic } = require('./.secret.json');
​
const accounts = {
mnemonic,
path: "m/44'/60'/0'/0",
};
​
module.exports = {
solidity: '0.8.9',
networks: {
hardhat: {},
rsktestnet: {
chainId: 31,
url: 'https://public-node.testnet.rsk.co/',
accounts,
},
rskmainnet: {
chainId: 30,
url: 'https://public-node.rsk.co/',
accounts,
},
},
};

我能想到的一个快速解决方案是,将npx hardhat命令作为脚本放在package.json中。

"hardhat-runner": "npx hardhat run --network rskmainnet scripts/balances.js"

现在您可以使用以下命令调用它。现在传递你的参数'token'。

npm run hardhat-runner --token=0x2d919f19D4892381d58EdEbEcA66D5642ceF1A1F

在你的js代码中,你会得到这个env变量

process.env.npm_config_token

在我看来,hardhat不接受自定义参数,因此直接传递任何参数都会导致HH308错误。这在将来可能会改变。

注意:此解决方案仅在NPM 7上测试过。

欢呼。

没有办法使用Hardhat脚本。这是因为脚本只允许Hardhat内置的CLI参数(包括--network),但不允许您定义自己的自定义CLI参数。

然而,通过将脚本转换为任务很容易完成,它允许您定义自己的自定义CLI参数。

参见Hardhat任务文档

回答你的具体问题:

创建一个文件tasks/balance.js并复制粘贴以下任务定义:

const { task } = require('hardhat/config');
const rifTokenAddress = '0x2aCc95758f8b5F583470bA265Eb685a8f45fC9D5';
module.exports = task('balance', 'Displays token balance')
.addOptionalParam('token', 'ERC20 token name')
.setAction(async ({ token }) => {
const erc20 = await ethers.getContractAt(
['function balanceOf(address owner) view returns (uint)'],
token?.toLowerCase() || rifTokenAddress.toLowerCase(),
);
const walletAddress = (await ethers.getSigner(0)).address;
const erc20Balance = await erc20.balanceOf(walletAddress);
console.log(ethers.utils.formatEther(erc20Balance));
});

注意上面的代码是基于你原来的Hardhat脚本,并被改编为Hardhat任务;添加参数

这段代码定义了一个balance任务,它带有一个可选的--token参数,该参数接受ERC20令牌地址。如果未指定--token,默认值为rifTokenAddress

导入hardhat.config.js顶部的任务:

require('@nomicfoundation/hardhat-toolbox');
require('./tasks/balance.js');
现在您可以从命令行查询令牌余额,如下所示:
# queries default token balance
npx hardhat balance
--network rsktestnet

或者像这样:

# queries specified token balance
npx hardhat balance
--network rsktestnet 
--token 0x19f64674D8a5b4e652319F5e239EFd3bc969a1FE

相关内容

  • 没有找到相关文章

最新更新