繁体   English   中英

替换 Solidity 结构中动态数组的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM