首页 > 解决方案 > 在一次交易中将地址列表写入智能合约 - 字符串数组到合约

问题描述

我想向我的智能合约发送几个地址,并且合约应该将它们保存在地图中(例如) - 我的目标是赋予这些地址一个特殊的访问控制角色。

如何迭代赋予函数的数组?

或者我怎样才能给我的合约/函数这个地址列表/数组?

mapping(address => address) winnerAddresses;
// set the addresses in store
function setStore(address[] _winnerAddresses) public {
  winnerAddresses[_winnerAddresses] = _winnerAddresses;
}

在我们将地址保存到合约后,我将为每个给定地址调用 addUserToRole 函数。

如果你能帮助我会很高兴!非常感谢mh

标签: arraysethereumsolidity

解决方案


根据您的用例,您可以将值存储为 anarray而不是 a mapping

pragma solidity ^0.8;

contract MyContract {
    address[] winnerAddresses; // store as an array

    function setStore(address[] memory _winnerAddresses) public {
        winnerAddresses = _winnerAddresses;
    }
}

或者,如果您更喜欢将它们存储在 amapping中,则需要遍历输入array并分别存储每个项目。

pragma solidity ^0.8;

contract MyContract {
    // default value is `false`, so by default there's no winner
    // when you set the `winnerAddress[<some_address>]` to `true`, it means that this address is a winner
    mapping(address => bool) winnerAddresses;

    function setStore(address[] memory _winnerAddresses) public {
        for (uint i = 0; i < _winnerAddresses.length; i++) {
            winnerAddresses[_winnerAddresses[i]] = true;
        }
    }
}

目前(Solidity 0.8)无法将 amapping作为函数参数传递。


推荐阅读