arrays - 在一次交易中将地址列表写入智能合约 - 字符串数组到合约
问题描述
我想向我的智能合约发送几个地址,并且合约应该将它们保存在地图中(例如) - 我的目标是赋予这些地址一个特殊的访问控制角色。
如何迭代赋予函数的数组?
或者我怎样才能给我的合约/函数这个地址列表/数组?
mapping(address => address) winnerAddresses;
// set the addresses in store
function setStore(address[] _winnerAddresses) public {
winnerAddresses[_winnerAddresses] = _winnerAddresses;
}
在我们将地址保存到合约后,我将为每个给定地址调用 addUserToRole 函数。
如果你能帮助我会很高兴!非常感谢mh
解决方案
根据您的用例,您可以将值存储为 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
作为函数参数传递。
推荐阅读
- javascript - 为什么Vue在加载图像时会出错
- python-3.x - OpenCV AttributeError 模块“cv2.cv2”没有属性“TrackerBoosting_create”
- c# - 无法使用 Emgu CV 连接到本地 IP 摄像机
- android - ds.child(key).setValue() 进入子级时出错
- avr - AVR 和 FATFS 多块读取
- python - VB,净值。您如何处理要求多个用户输入的 cmd 进程
- magento2 - Magento 2 UI dataprovider 不加载数据
- python - 字典到面向对象的转换
- reactjs - React Redux -> 为什么我得到 TypeError: state.item is not iterable
- python-3.x - 如何使用 TensorFlow 训练两塔模型?