首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何计算有多少买家向我的智能合同提出要求,并得到earnedEther

我如何计算有多少买家向我的智能合同提出要求,并得到earnedEther
EN

Ethereum用户
提问于 2019-10-07 09:23:13
回答 1查看 95关注 0票数 0

我用工厂合同来销售和购买商品。怎样才能收回多少买家购买和计算多少乙醚从销售货物?这是我的源代码。我是新来的聪明的合同

代码语言:javascript
复制
contract FactroyContract {
  address[] public contracts;
  address public lastContractAddresses;

  event newPurchaseContract (address contractAddress);

  function getContractcount() public view returns(uint ContracCount) 
  {
    return contracts.length;
  }

  function newPurchase(uint value, string memory bookName, string memory description, string memory imageHash, string memory privHash, string memory dataHash) 
    public 
    payable
    returns(address NewContract)
  {
    Purchase c = new Purchase(address(msg.sender), value, bookName, description, imageHash, privHash, dataHash);
    contracts.push(c);
    lastContractAddresses = address(c);
    emit newPurchaseContract(c);
    return c;
  }

  function seePurchase(uint pos) public view returns(address contractAddress)
  {
    return address(contracts[pos]);
  }
}

contract Purchase
{
  uint public price;
  address public seller;
  address[] public buyers;
  address public buyer;
  string public ipfsHash;
  string public preview;
  string public cover;
  string public name;
  string public text;

  constructor(address contractSeller, uint value, string memory bookName, string memory description, string memory imageHash, string memory privHash, string memory dataHash) public payable
  {
    seller = contractSeller;
    name = bookName; 
    text = description;
    cover = imageHash;
    preview = privHash;
    ipfsHash = dataHash;
    price = value * 1000000000000000000;
  }

  modifier condition(bool _condition) 
  {
    require(_condition);
    _;    
  }

  modifier onlyBuyer()
  {
    (msg.sender == buyer);
    _;
  }

  modifier onlySeller()
  {
    (msg.sender == seller);
    _;
  }

  event ItemReceived();

  function confrimReceived() public 
    condition(msg.value == price)
    payable
  {
    emit ItemReceived();

    buyer = msg.sender;
    seller.transfer(address(this).balance);
  }
  function getBuyerCount() public view returns(address buyerAddresses)
  {
    return buyers.length;
  }

  function getEtherCount() public view return(uint earnedEather)
  {
    return price+= msg.value;
  }
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2019-10-12 08:02:37

Purchase智能契约中,定义了买家总数和总收入的计数器,如下所示:

代码语言:javascript
复制
contract Purchase
{
  uint public totalBuyers = 0;
  uint public totalEarnings = 0;
  ...
}

然后,当确定购买时,适当地增加这些柜台:

代码语言:javascript
复制
function confrimReceived() public 
  condition(msg.value == price)
  payable
{
  totalBuyers += 1;
  totalEarnings += price;
  ...
}

只要计数器是公开的,您就可以从其他智能契约或离链应用程序,甚至从Etherscan.io查询它们。

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

https://ethereum.stackexchange.com/questions/76529

复制
相关文章

相似问题

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