首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构在另一个结构中的坚固性

结构在另一个结构中的坚固性
EN

Stack Overflow用户
提问于 2022-05-25 08:38:52
回答 1查看 49关注 0票数 0

我刚刚开始学习稳固,我正在工作的投标合同,允许投标人投标的运动。我有竞选的结构。投标人有详细的信息(地址,姓名),我想存储投标人与他们的信息内的运动。竞选活动可以有一个以上的投标者。

这是我的竞选活动和投标结构

代码语言:javascript
复制
struct Campaign {
    uint256 campaignID;
    uint256 budget;
    uint256 bidCount;

}
 struct Bidder {
    bool bided;
    uint256 bid;
    string name;
    address bidderAddress;

}
mapping(address => Bidder) public bidders;
Campaign[] public campaigns;

我在这里写了一个出价函数,它接受竞选的索引,然后填充bidCount。

代码语言:javascript
复制
function bid(uint256 _bidIndex, uint256 _twitterID) public {
    require(!bidders[msg.sender].bided);

    bidders[msg.sender].bid = _bidIndex;
    campaigns[_bidIndex].bidCount += 1;
    totalBids += 1;
}

所以竞选活动可以像这样(如果可能的话)。

代码语言:javascript
复制
0: campaignID 1
1: budget 2ETH
2: bidCount 3
3: Bidder {0: name Bidder1, 1: address 0xahaaahha}
          {0: name Bidder2, 2: address 0x2334jddd}

任何帮助都将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-25 11:21:09

据我说,在这种情况下,您可以使用嵌套映射到活动结构,以“连接”不同的出价到一个单一的战役。我为您的情况创建了一个临时的智能契约,您可以在下面的行中看到它:

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Auction {
    address owner;

    constructor() {
        owner = msg.sender;
    }

    struct Campaign {
        uint256 campaignID;
        uint256 budget;
        uint256 bidCount;
        mapping(uint => Bidder[]) bidders;
    }

    struct Bidder {
        bool bided;
        uint256 bid;
        string name;
        address bidderAddress;
    }

    Campaign[] public campaigns;
    uint totalCampaign = 0;

    modifier onlyOwner {
        require(msg.sender == owner, "Error! You're not the smart contract owner!");
        _;
    }

    // Create campaigns
    function createCampaing(uint _budgetCampaign) public onlyOwner {
        Campaign storage _firstCampaigns = campaigns.push();
        _firstCampaigns.campaignID = totalCampaign;
        _firstCampaigns.budget = _budgetCampaign;
        totalCampaign++;
    }

    // Bid 
    function bid(uint _indexCampaign, string memory _nameBidder) public {
        Campaign storage _bidCampaign = campaigns[_indexCampaign];
        _bidCampaign.bidCount += 1;
        uint _bidIndex = _bidCampaign.bidCount;
        _bidCampaign.bidders[_indexCampaign].push(Bidder(true, _bidIndex, _nameBidder, msg.sender));
    }

    // Getter Bids
    function getBids(uint _indexCampaign) onlyOwner external view returns(Bidder[] memory) {
        return campaigns[_indexCampaign].bidders[_indexCampaign];
    }
}

使用getBids()函数,您将检索它与其索引识别的特定活动的所有出价。我添加了一个onlyOwner修饰符,它允许它们只从智能契约所有者(而不是第一次将智能契约部署到块链中)调用的特定函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72374419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档