Nos estamos acercando al lanzamiento de Solidity 1.0 (a menos que 0.10 después de 0.9, por supuesto). ¡Solidity 0.8 está disponible solo 5 meses después de 0.7!
La comunidad Denglian está traduciendo sincrónicamente documentos de Solidity 0.8
Hoy discutiremos cómo actualizar la migración del contrato a la versión 0.8...
Echemos un vistazo a dos grandes funciones nuevas: SafeMath integrado y el nuevo manejo de errores.
Así es, ya no necesita importar Openzeppelin SafeMath. Lo mejor de todo es que no necesita hacer nada para activar la integración SafeMath de Solidity. Simplemente escriba a+b, y la transacción se revertirá automáticamente cuando se desborde.
Es posible que vea el siguiente mensaje de error en herramientas como Remix, porque 0.8 aún no es totalmente compatible. Como el desbordamiento no ha dado la razón exacta.
transact to Solidity08.test errored: VM error: revert. revert Pero esto debería cambiar en el futuro.
¿Qué pasa si realmente quieres que tu código se desborde? ¿Todavía muy preocupado por las tarifas de gas?
Luego deshabilite SafeMath ajustando la declaración en forma no marcada:
contract Solidity08 { function test() external pure devoluciones(uint256) { / / ;Use SafeMath de forma predeterminada, y recurra uint256 x = 0; x--;   ; return x; }}contrato Solidity08 { ;función prueba() externo puro devoluciones( uint256) { // No utilice SafeMath, devuelva type(uint256) .max ; uint256 x = 0; desmarcado { x-- ; } return x; }} 2. Los códigos de operación no válidos se reemplazan por revert resultarán en la ejecución del código de operación INVÁLIDO. El problema con este código de operación es que consume todo el gas restante. Esto es claramente malo e innecesario. ¿Por qué desperdiciar Gas y donarlo a mineros?
Para más detalles, vea la diferencia entre revertir y afirmar aquí.
Solidity ahora usa el código de operación de reversión. Para distinguir entre una reversión regular y un error interno del sistema (pánico), Solidity agrega un identificador antes de devolver los datos:
Los errores de reversión regulares comienzan con los primeros cuatro bytes de keccak256 (Error (cadena)), que equivale a 0x08c379a0.
**Error interno del sistema (Panic)** comienza con los primeros cuatro bytes de keccak256(Panic(uint256)), que es igual a 0x4e487b71.
Panic tiene un indicador de error adicional. Los pánicos disponibles actualmente son:
0x01: usar activo;
0x11: desbordamiento de SafeMath.
0x12: dividir por 0.
0x21: conversión a tipo de enumeración inexistente.
0x22: error de codificación de matriz de bytes de almacenamiento.
0x31: pop() en una matriz vacía.
0x32: Excepción de sobrelongitud de índice.
0x41: asignación de demasiada memoria o creación de una matriz demasiado grande.
0x51: Llamada a una variable de tipo función intrínseca no inicializada.
Consulte la nueva sección de manejo de errores en los documentos para obtener más detalles aquí.
La migración debería ser bastante sencilla en la mayoría de los casos. Solo en algunos casos puede resultarle más difícil realizar conversiones de tipos extraños.
Los cambios que debe realizar para la migración incluyen:
ABIEncoderV2 ahora se activa automáticamente de forma predeterminada. A partir de 0.6, Encoder ya no es experimental, pero por razones heredadas, se conserva el nombre pragma experimental. Ahora no necesita agregar esta línea.
Elimine cualquier Openzeppelin SafeMath, ya no lo necesita.
Es posible que se requieran algunas conversiones de tipo.
msg.sender y tx.origin no se pagan por defecto. Cambie msg.sender.transfer a payable(msg.sender).transfer.
Las conversiones de tipo solo se permiten si coinciden con el tipo dado, por lo que uint256(-1) ya no funcionará. Utilice type(uint256).max en su lugar.
Las conversiones de tipo están limitadas en algunos casos cuando el signo se cambia varias veces, porque el orden de las conversiones de tipo puede tener un efecto en el resultado. Ahora verá un error tipo TypeError. No se permite la conversión de tipo explícito de int256 a bytes32, primero debe convertir manualmente a uint256.
Combinación de modificaciones
myContract.functionCall{gas: 10000}{value: 1 ether }() se cambia a:
myContract.functionCall{gas: 10000, value: 1 ether}().
Cambie x**y**z a (x**y)**z porque el orden predeterminado de ejecución ha cambiado.
Cambie el tipo de byte a byte1 .
Omití algunos detalles, para ver el registro de cambios completo y los detalles de todos los cambios, consulte los documentos aquí.
Fuente: https://soliditydeveloper.com/solidity-0.8
Proyecto de traducción pionero: https://github.com/lbc-team/Pioneer
Equipo de traducción: https://learnblockchain.cn/people/412
Pequeño oso: https://learnblockchain.cn/people/15
Solidity0.8: https://blog.soliditylang.org/2020/12/16/solidity-v0.8.0-release-announcement/
Versión 0.7: https://blog.soliditylang.org/2020/07/28/solidity-v0.7.0-release-announcement/
Documentación para Solidity 0.8: https://learnblockchain.cn/docs/solidity/
SafeMath: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol
Aquí: https://medium.com/blockchannel/the-use-of-revert-assert-and-require-in-solidity-and-the-new-revert-opcode-in-the-evm-1a3a7990e06e
Aquí: https://docs.soliditylang.org/en/latest/control-structures.html#panic-via-assert-and-error-via-require
Aquí: https://docs.soliditylang.org/en/latest/080-breaking-changes.html
Red celular: https://www.cellnetwork.io/?utm_souce=learnblockchain
Traducción de: Denglian Translation Project
Traductor: Equipo de traducción
Corrección: Tiny Bear
Tags:
Alfred Kelly, director ejecutivo de la empresa multinacional estadounidense de servicios financieros Visa.
El año mágico de 2020 llegó a su fin con la compañía del mercado alcista, sin embargo, durante este año.
A partir del 3 de febrero, como "Beijing Lian'an Information Technology Co., Ltd." pasó a llamarse "Zhongke Lian'an (Beijing) Technology Co., Ltd.".
Nos estamos acercando al lanzamiento de Solidity 1.0 (a menos que 0.10 después de 0.9.
En la última semana de negociación de enero de 2021.
Este artículo intenta comprender los cambios del mercado en 2020-2021 desde la perspectiva de DeFi, brindando una nueva perspectiva.Desde principios de 2020 hasta el presente.
El 2 de febrero de 2021, hora del este, Grayscale Investment Company publicó en Twitter su informe de inversión del cuarto trimestre de 2020. El contenido se divide principalmente en: revisión del mercado de Bitcoin e.