typestar

harvest_split.sol en Solidity

Reparte lo cosechado por horas, pagado por el patrón de retiro.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

// Split each harvest's proceeds by recorded picking hours.
contract HarvestSplit {
    mapping(address => uint256) public hours_;
    mapping(address => uint256) public owed;
    address[] public pickers;
    uint256 public totalHours;
    bool public seasonOpen = true;

    event HoursLogged(address indexed picker, uint256 hoursWorked);
    event ProceedsIn(uint256 amount);
    event Paid(address indexed picker, uint256 amount);

    function logHours(uint256 hoursWorked) external {
        require(seasonOpen, "season closed");
        if (hours_[msg.sender] == 0) {
            pickers.push(msg.sender);
        }
        hours_[msg.sender] += hoursWorked;
        totalHours += hoursWorked;
        emit HoursLogged(msg.sender, hoursWorked);
    }

    // Proceeds arrive; each picker's share lands in owed.
    function deposit() external payable {
        require(totalHours > 0, "no hours logged");
        seasonOpen = false;
        emit ProceedsIn(msg.value);
        for (uint256 i = 0; i < pickers.length; i++) {
            address p = pickers[i];
            owed[p] += (msg.value * hours_[p]) / totalHours;
        }
    }

    // Pull payments: zero first, then send.
    function withdraw() external {
        uint256 amount = owed[msg.sender];
        require(amount > 0, "nothing owed");
        owed[msg.sender] = 0;
        (bool ok, ) = msg.sender.call{value: amount}("");
        require(ok, "send failed");
        emit Paid(msg.sender, amount);
    }
}

Cómo funciona

  1. logHours registra a quienes cosechan y el total.
  2. deposit cierra la temporada y porciona por horas.
  3. withdraw anula antes de enviar — efectos primero, siempre.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
46
Caracteres a escribir
1305
Tokens
268
Ritmo de tres estrellas
55 tpm

Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 292 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 27 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →