typestar

coop_membership.sol en Solidity

El padrón de la cooperativa: entrar, pagar cuotas, postularse.

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

// The cooperative roll: join, pay dues, stand for steward.
contract CoopMembership {
    struct Member {
        uint64 joinedAt;
        uint64 duesPaidThrough;
        bool active;
    }

    address public steward;
    uint256 public memberCount;
    mapping(address => Member) public members;

    event Joined(address indexed who);
    event DuesPaid(address indexed who, uint64 paidThrough);
    event StewardChanged(address indexed from, address indexed to);

    error NotMember();
    error DuesLapsed(uint64 paidThrough);

    modifier onlyMember() {
        if (!members[msg.sender].active) revert NotMember();
        _;
    }

    constructor() {
        steward = msg.sender;
        _join(msg.sender);
    }

    function join() external {
        require(!members[msg.sender].active, "already in");
        _join(msg.sender);
    }

    function _join(address who) internal {
        members[who] = Member(uint64(block.timestamp), 0, true);
        memberCount += 1;
        emit Joined(who);
    }

    function payDues(uint64 throughDate) external onlyMember {
        members[msg.sender].duesPaidThrough = throughDate;
        emit DuesPaid(msg.sender, throughDate);
    }

    function standForSteward() external onlyMember {
        Member memory m = members[msg.sender];
        if (m.duesPaidThrough < block.timestamp) {
            revert DuesLapsed(m.duesPaidThrough);
        }
        emit StewardChanged(steward, msg.sender);
        steward = msg.sender;
    }
}

Cómo funciona

  1. Un struct Member registra ingreso, cuotas y estado.
  2. onlyMember cierra las acciones tras un error tipado.
  3. Postularse revisa las cuotas contra el reloj de la cadena.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
57
Caracteres a escribir
1298
Tokens
257
Ritmo de tres estrellas
55 tpm

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

Escribe este fragmento

Paso 1 de 3 en Bis; paso 26 de 28 en Fundamentos del lenguaje.

← Anterior Siguiente →