Publicación
Comparte tu conocimiento.
Aclaración sobre los reembolsos de gas y comparación entre «requerir» y «revertir» en los contratos inteligentes
Hola a todos,
Estoy intentando profundizar mi comprensión de ciertas condiciones en el desarrollo de contratos inteligentes y tengo una pregunta sobre un escenario específico.
Supongamos que hay una condición «obligatoria» en un contrato inteligente que debe cumplirse. Si esta condición no se cumple, el contrato debe anular todos los cambios realizados y reembolsar el gas utilizado en la transacción. Mi pregunta es, ¿cómo funciona el proceso de reembolso de gas teniendo en cuenta que siempre se consume gas durante el cálculo?
Además, he oído hablar de la condición de «revertir», pero agradecería que me aclararan en qué se diferencia de la de «exigir» en el desarrollo de contratos inteligentes.
- Smart Contract
- Solidity
Respuestas
1require
Hay 3 funciones para la validación en Solidity:revert
,assert
, y.
Requerido
- Se usa al principio de una función
- Valida contra entradas ilegales
- Verifica las condiciones del estado antes de la ejecución
- Reembolsa el gas sobrante
Ejemplo:
require(msg.sender == owner, "Only. owner can execute this action");
Revertir
- Idéntico al requerido
- Útil para compuertas de flujo lógicas más complejas (es decir, bloques complicados de tipo «si es entonces»)
- Reembolsa el gas sobrante
Ejemplo:
revert("Something funky has occured");
Afirmar
- Se usa al final de una función
- Valida algo que es imposible
- Es fundamental para las herramientas de análisis de código estático
- No reembolsa la gasolina sobrante
Ejemplo:
assert(num >= 0);
Tenga en cuenta esto require
y revert
reembolse solo la gasolina restante. Se consumirá cualquier gas usado antes de esa declaración. Ambas funciones utilizan el mismo código de operación REVERT desde el principio.
assert
es diferente porque no reembolsa el gas y utiliza todo el gas disponible para la transacción. Se espera que se utilice con menos frecuencia y se debe utilizar para comprobar las condiciones que son anormales y que no se espera que se produzcan.
Sabes la respuesta?
Inicie sesión y compártalo.
Solidity is an object-oriented, high-level language for implementing smart contracts. It is a curly-bracket language designed to target the Ethereum Virtual Machine (EVM).
- My ERC721 contract successfully deploys, but I can't verify the contract's source code with hardhat21
- Solidity y ethers.js calculan diferentes direcciones a partir de la misma firma21
- no puedo entender cuáles son las ubicaciones (uint256)22
- Cómo revertir keccak256 en Solidity22
- Aclaración sobre los reembolsos de gas y comparación entre «requerir» y «revertir» en los contratos inteligentes21