В чем разница между балансами [владелец] и балансами [plot.owner]? - PullRequest
0 голосов
/ 28 февраля 2019

Я изучаю Солидность с помощью этого https://medium.com/coinmonks/ethereum-land-marketplace-dapp-tutorial-part-1-create-and-deploy-a-smart-contract-351bc0d62be2

Ниже приведена функция, в которой я не знаю разницы между балансами [владелец] и балансами [plot.owner].

function buyPlot(uint index) public payable {
    Plot storage plot = plots[index];

    require(msg.sender != plot.owner && plot.forSale && msg.value >= plot.price);

    if(plot.owner == 0x0) {
        balances[owner] += msg.value;
    }else {
        balances[plot.owner] += msg.value;
    }

    plot.owner = msg.sender;
    plot.forSale = false;

    emit PlotOwnerChanged(index);
}

Означает ли это, что если никто не владеет участком (где plot.owner == 0x0), то выплачивать средства владельцу смарт-контракта (создателю) или первому владельцу земли?

Вот весь код.

pragma solidity ^0.4.11;

contract LandContract {
address owner;
mapping (address => uint) public balances;

struct Plot {
    address owner;
    bool forSale;
    uint price;
}

Plot[12] public plots;

event PlotOwnerChanged(
    uint index
);

event PlotPriceChanged(
    uint index,
    uint price
);

event PlotAvailabilityChanged(
    uint index,
    uint price,
    bool forSale
);

constructor() public {
    owner = msg.sender;
    plots[0].price = 4000;
    plots[0].forSale = true;
    plots[1].price = 4000;
    plots[1].forSale = true;
    plots[2].price = 4000;
    plots[2].forSale = true;
    plots[3].price = 4000;
    plots[3].forSale = true;
    plots[4].price = 4000;
    plots[4].forSale = true;
    plots[5].price = 4000;
    plots[5].forSale = true;
    plots[6].price = 4000;
    plots[6].forSale = true;
    plots[7].price = 4000;
    plots[7].forSale = true;
    plots[8].price = 4000;
    plots[8].forSale = true;
    plots[9].price = 4000;
    plots[9].forSale = true;
    plots[10].price = 4000;
    plots[10].forSale = true;
    plots[11].price = 4000;
    plots[11].forSale = true;

}

function putPlotUpForSale(uint index, uint price) public {
    Plot storage plot = plots[index];

    require(msg.sender == plot.owner && price > 0);

    plot.forSale = true;
    plot.price = price;
    emit PlotAvailabilityChanged(index, price, true);
}

function takeOffMarket(uint index) public {
    Plot storage plot = plots[index];

    require(msg.sender == plot.owner);

    plot.forSale = false;
    emit PlotAvailabilityChanged(index, plot.price, false);
}

function getPlots() public view returns(address[], bool[], uint[]) {
    address[] memory addrs = new address[](12);
    bool[] memory available = new bool[](12);
    uint[] memory price = new uint[](12);

    for (uint i = 0; i < 12; i++) {
        Plot storage plot = plots[i];
        addrs[i] = plot.owner;
        price[i] = plot.price;
        available[i] = plot.forSale;
    }

    return (addrs, available, price);
}

function buyPlot(uint index) public payable {
    Plot storage plot = plots[index];

    require(msg.sender != plot.owner && plot.forSale && msg.value >= plot.price);

    if(plot.owner == 0x0) {
        balances[owner] += msg.value;
    }else {
        balances[plot.owner] += msg.value;
    }

    plot.owner = msg.sender;
    plot.forSale = false;

    emit PlotOwnerChanged(index);
}

function withdrawFunds() public {
    address payee = msg.sender;
      uint payment = balances[payee];

      require(payment > 0);

      balances[payee] = 0;
      require(payee.send(payment));
}


function destroy() payable public {
    require(msg.sender == owner);
    selfdestruct(owner);
}
}

1 Ответ

0 голосов
/ 28 февраля 2019

Да, plot.owner - это человек, которому принадлежит участок.Принимая во внимание, что owner является лицом, которое развернуло контракт.Вы можете думать об этом, как будто любой участок, который еще не был куплен, принадлежит owner, то есть человеку, который развернул контракт (при условии, что он не передал право собственности кому-либо еще), поэтому, когда вы покупаете собственность, котораяранее не принадлежал никому, тогда деньги пойдут владельцу по контракту

...