我刚刚开始学习稳固,我正在工作的投标合同,允许投标人投标的运动。我有竞选的结构。投标人有详细的信息(地址,姓名),我想存储投标人与他们的信息内的运动。竞选活动可以有一个以上的投标者。
这是我的竞选活动和投标结构
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。
function bid(uint256 _bidIndex, uint256 _twitterID) public {
require(!bidders[msg.sender].bided);
bidders[msg.sender].bid = _bidIndex;
campaigns[_bidIndex].bidCount += 1;
totalBids += 1;
}所以竞选活动可以像这样(如果可能的话)。
0: campaignID 1
1: budget 2ETH
2: bidCount 3
3: Bidder {0: name Bidder1, 1: address 0xahaaahha}
{0: name Bidder2, 2: address 0x2334jddd}任何帮助都将不胜感激。谢谢
发布于 2022-05-25 11:21:09
据我说,在这种情况下,您可以使用嵌套映射到活动结构,以“连接”不同的出价到一个单一的战役。我为您的情况创建了一个临时的智能契约,您可以在下面的行中看到它:
// 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修饰符,它允许它们只从智能契约所有者(而不是第一次将智能契约部署到块链中)调用的特定函数。
https://stackoverflow.com/questions/72374419
复制相似问题