使用 Truffle 将仪表板指定为网络选项时获取 Metamask 当前网络名称

Get Metamask current network name when dashboard is specified as a network option using Truffle

我正在使用Truffle开发DAPP。请问是否可以在部署过程中以dashboard作为指定网络动态获取网络名称。我的意思是我有一个 deploy-config.js 文件,其中包含针对不同网络的不同配置。我还有一个 2_deploy_MyContract.js 迁移文件。 MyContract 期望构造函数中的结构作为参数。

const MyContract = artifacts.require('MyContract');
const getConfig = require('../deploy-config');

module.exports = async function (deployer) {
    const config = getConfig(currently_selected_network); <-- The Problem

    await deployer.deploy(
        MyContract,
        {
            ...config.data
        }
    );
};

当我 运行 truffle migrate --reset --network dashboard 我可以随时使用元掩码更改所选网络。我想以某种方式获取它部署到的网络名称并将其作为 currently_selected_network 传递,以便我的 js 函数可以提供正确的配置值。我想我可以尝试通过更新 truffle-config.js 文件来指定网络名称,然后仅部署到那些预定义的网络,但是使用 dashboard 允许我不将助记符保留在回购协议中并通过 Metamask 扩展签署每笔交易.

如果您有任何其他关于如何实现此目标的想法,我将非常乐意听取您的意见!

这就是 deploy-config.js 的样子

const config = {
  network1: {
   paramA: "A"
   paramB: "B"
  },
  network2: {
   paramA: "C"
   paramB: "D"
  }
}

function getConfig(networkName) {
 switch(networkName) {
  case "network1":
   return config.network1;
  case "network2":
   return config.network2;
  default:
   return null;
}

module.exports = getConfig

在您的迁移脚本中添加 network 到您的匿名函数 我相信顺序和 arg 位置很重要。 例如

module.exports = async (deployer, network, accounts) => {
   console.log(network);
   console.log(accounts);// also useful to have this at hand

}