Errores tipados en Solidity
Contexto con tipos, más barato que los strings de revert.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
// Custom errors carry typed context and cost less than strings.
contract PlotAssigner {
error PlotTaken(uint256 plot, address holder);
error OverLimit(uint256 requested, uint256 max);
uint256 public constant MAX_PER_MEMBER = 2;
mapping(uint256 => address) public holder;
mapping(address => uint256) public held;
function claim(uint256 plot) external {
if (holder[plot] != address(0)) {
revert PlotTaken(plot, holder[plot]);
}
if (held[msg.sender] >= MAX_PER_MEMBER) {
revert OverLimit(held[msg.sender] + 1, MAX_PER_MEMBER);
}
holder[plot] = msg.sender;
held[msg.sender] += 1;
}
}
Cómo funciona
- Dos errores cargan la parcela, el titular y los límites.
revert PlotTaken(plot, holder[plot])nombra el conflicto.- Constantes como
MAX_PER_MEMBERdocumentan la política.
Palabras clave y builtins usados aquí
addresscontractexternalfunctionifmappingpublicuint256
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 640
- Tokens
- 132
- Ritmo de tres estrellas
- 55 tpm
Al ritmo de tres estrellas de 55 tokens por minuto, este intento toma unos 144 segundos.
Paso 3 de 3 en Guardas; paso 10 de 28 en Fundamentos del lenguaje.