Precio de Bitcoin Precio de Bitcoin
Ctrl+D Precio de Bitcoin
ads
Casa > UNI > Info

¿Cómo actualizar su contrato a Solidity 0.8?

Author:

Time:

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:

UNI
El CEO de Visa está de acuerdo en que Bitcoin es oro digital y está dispuesto a cooperar con los intercambios

Alfred Kelly, director ejecutivo de la empresa multinacional estadounidense de servicios financieros Visa.

Informe de seguridad en cadena de 2020: más de 60 ataques y pérdidas de DeFi superaron los $ 250 millones

El año mágico de 2020 llegó a su fin con la compañía del mercado alcista, sin embargo, durante este año.

Los cuatro pasos de la recolección de estafas de moneda virtual: seguir los buenos consejos, invitarte a la urna, robar y robar, y finalmente........

A partir del 3 de febrero, como "Beijing Lian'an Information Technology Co., Ltd." pasó a llamarse "Zhongke Lian'an (Beijing) Technology Co., Ltd.".

¿Cómo actualizar su contrato a Solidity 0.8?

Nos estamos acercando al lanzamiento de Solidity 1.0 (a menos que 0.10 después de 0.9.

DeFi es una calle de sentido único que vale la pena esperar

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.

Informe en escala de grises: cerca de $3300 millones de entradas en el cuarto trimestre.Habrá seis tendencias principales en el mercado del cifrado en 2021.

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.

ads