我试图将数组分配给结构item.creators.push(_creators[i]);,但没有分配数组。我没有收到来自编译的任何错误,但是在"Item“中创建的唯一属性是id。我能做什么?
contract BitshoppTokens is Context, ERC1155Burnable, ERC1155Pausable, AccessControlEnumerable {
using SafeMath for uint256;
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
struct Item {
uint256 id;
LibPart.Part[] creators;
LibPart.Part[] royalties;
}
mapping(uint256 => Item) public Items;
mapping(uint256 => uint256) private _totalSupply;
function mintERC1155(address to, uint256 amount, LibPart.Part[] memory _creators, LibPart.Part[] memory _royalties, bytes memory data) public payable returns(uint256) {
uint256 tokenId = incrementAndGet();
_mint(to, tokenId, amount, data);
uint256 total = 0;
Item storage item = Items[tokenId];
item.id = tokenId;
for (uint256 i = 0; i < _creators.length; ++i){
require(_creators[i].account != address(0x0), "Account should be present");
require(_creators[i].value != 0, "Creator share should be positive");
item.creators.push(_creators[i]);
total = total.add(_creators[i].value);
}
require(total == 10000, "total amount of creators share should be 10000");
for (uint256 i = 0; i < _royalties.length; ++i){
item.royalties.push(_royalties[i]);
}
return tokenId;
}
}对于上下文,LibPart有以下结构:
struct Part {
address payable account;
uint96 value;
}发布于 2021-08-12 13:43:09
您的输入数据可能有问题。
实际上,如果_creators.length等于0,那么只有Id才会被填充。例如,您可以找到如何做这里。
另一种检查方法是添加一行require(_creators.length > 0)。
https://ethereum.stackexchange.com/questions/106962
复制相似问题