[英]Replacing the value of dynamic array inside a Solidity Struct
我在 UserListing 中有一个动态数组,并且在访问动态数组 Listing[] 以在 Solidity 编程中将状态更改为 Canceled 时遇到问题。 当前推送 function 只是将另一个数组附加到列表中,请问我们可以删除以前的列表并用新的列表替换它/更改列表 [] 中动态数组中的值。 如果提供任何帮助,非常感谢:)
struct UserListing {
address ownerAddress;
Listing[] list;
}
struct Listing {
uint listingId;
ListingStatus status;
address seller;
address token;
uint tokenId;
uint price;
}
uint private _listingId = 0;
mapping(uint => Listing) private _listings;
mapping(address => UserListing) public userListings;
function cancel(uint listingId) public {
Listing storage listing = _listings[listingId];
require(msg.sender == listing.seller, "Only seller can cancel listing");
require(listing.status == ListingStatus.Active, "Listing is not active");
listing.status = ListingStatus.Cancelled;
userListings[msg.sender].list.push(
Listing({
listingId : _listingId,
status: ListingStatus.Cancelled,
seller : msg.sender,
token: listing.token,
tokenId : listing.tokenId,
price : listing.price
})
);
IntERC721(listing.token).transferFrom(address(this), msg.sender, listing.tokenId);
emit Cancel(listingId, listing.seller);
}
据我了解,在cancel
中,您希望在具有给定listingId
的用户列表中找到项目(列表)并更改其状态。 为此,您无需删除任何内容。 您只需遍历用户的列表。 找到Listing
并更改其状态。
// i will modify userItems
// since state variables are storage by default, modifying this will modify the state of the contract
Listing[] storage userItems = userListings[msg.sender]
现在运行一个 for 循环:
for(uint256 i=0; i<userItems.length; i++){
if userItems[i].listingId==listingId{
userItems[i].status=ListingStatus.Cancelled,
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.