我用工厂合同来销售和购买商品。怎样才能收回多少买家购买和计算多少乙醚从销售货物?这是我的源代码。我是新来的聪明的合同
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;
}
}发布于 2019-10-12 08:02:37
在Purchase智能契约中,定义了买家总数和总收入的计数器,如下所示:
contract Purchase
{
uint public totalBuyers = 0;
uint public totalEarnings = 0;
...
}然后,当确定购买时,适当地增加这些柜台:
function confrimReceived() public
condition(msg.value == price)
payable
{
totalBuyers += 1;
totalEarnings += price;
...
}只要计数器是公开的,您就可以从其他智能契约或离链应用程序,甚至从Etherscan.io查询它们。
https://ethereum.stackexchange.com/questions/76529
复制相似问题