Supongamos que se usa un contrato inteligente para agregar papas. Cada vez que una persona obtiene una patata nueva, envía una transacción al contrato inteligente que suma 1 al recuento total de patatas.
Supongamos que, dentro de un solo bloque, una persona envía accidentalmente dos transacciones para agregar al conteo de papas cuando solo tenía la intención de enviar una. Teniendo en cuenta que se procesan en el mismo bloque, ¿hay alguna forma de garantizar que solo una agregue al conteo global de papas?
¿Cómo puede decirles a los mineros que solo incluyan una transacción de un tipo específico por dirección por bloque?
Una forma obvia es usar un mapeo para rastrear qué cuentas han enviado una transacción:
contract C {
mapping (address => bool) sentTx;
uint public globalCount;
function potato() {
if (!sentTx[msg.sender]) {
globalCount++;
sentTx[msg.sender] = true;
}
}
}
Esto funciona porque el almacenamiento de contratos se actualiza después de cada transacción.
¿Cómo puede decirles a los mineros que solo incluyan una transacción de un tipo específico por dirección por bloque?
Los mineros básicamente tienen el control total (sujeto al software de minería que ejecutan) y deciden qué transacciones incluir en un bloque y en qué orden. El protocolo impone pocas reglas a los mineros: si una transacción es válida y un bloque es válido, los mineros pueden hacer lo que quieran: los mineros no tienen que excluir o incluir ninguna transacción en particular.
nick carraway
ética
nick carraway
ética