主网在 Remix Solidity 智能合约中部署地址数组作为构造函数参数不起作用

Posted

技术标签:

【中文标题】主网在 Remix Solidity 智能合约中部署地址数组作为构造函数参数不起作用【英文标题】:Mainnet deploying array of addresses as constructor parameter in Remix Solidity smart contract does not work 【发布时间】:2019-04-04 15:11:16 【问题描述】:

我正在尝试通过 Remix/Metamask 将智能合约部署到主网。我有一个构造函数参数的地址数组,无法接受交易。我在每个地址周围都尝试了双引号“”和单引号。任何人都知道如何编写数组参数,以便将其解释为数组而不是字符串(见图)?

谢谢!

【问题讨论】:

您可以发布您为部署合同而拨打的电话吗?根据我的经验,一个简单的字符串数组就足够了,例如:params = ["addr1","addr2"],然后将 params 作为构造函数参数传递。 不幸的是,我无法缝合上传另一张图片以更好地展示它,但这只是网络应用程序中的 Remix Deploy。在 Run 部分中,您可以在 Deploy 下输入构造函数参数。我没有做任何代码来部署,只是将数组添加到部署下的参数框中。 您至少可以将您传递给构造函数的参数发布。当然,如果这里发布的内容太大,只需在中间添加.....。我对其进行了测试,它会接受这样传递的地址数组:["0xca35b7d915458ef540ade6068dfe2f44e8fa733c","0x14723a09acff6d2a60dcdf7aa4aff308fddc160c"] 【参考方案1】:

您只需要用双引号传入地址数组。例如,

pragma solidity ^0.4.25;

contract Test 
  address[] mAddrs;
  event Deployed(address indexed theaddr);

  constructor(address[] addrs) public 
    mAddrs = addrs;

    for (uint8 i = 0; i < mAddrs.length; i++)
      emit Deployed(mAddrs[i]);
  

部署参数设置为["0xca35b7d915458ef540ade6068dfe2f44e8fa733c", "0x14723a09acff6d2a60dcdf7aa4aff308fddc160c", "0x4b0897b0513fdc7c541b6d9d7e929c4e5364d2db"]

结果(注意第一个地址显示在日志输出中):

【讨论】:

以上是关于主网在 Remix Solidity 智能合约中部署地址数组作为构造函数参数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

智能合约实战 solidity 调试环境设置 Debugger/remix

智能合约实战 solidity 调试环境设置 Debugger/remix

智能合约实战 solidity 语法学习 02 [ SPDX remix控制台介绍 ]

智能合约实战 solidity 语法学习 02 [ SPDX remix控制台介绍 ]

Remix-IDE

智能合约实战 [solidity 语法学习](持续更新)