Buenas prácticas
Clase 2 de 15 • Curso de Introducción a Seguridad de Smart Contracts
Contenido del curso
Clase 2 de 15 • Curso de Introducción a Seguridad de Smart Contracts
Contenido del curso
López Agustín
Adolfo Sebastián Jara Gavilanes
Diego Fernando Gómez Peña
Pro Code
Sebastian Perez
Rafael Mosquera
Sebastian Perez
Marcelo Haro
Julian Duque
Controlar el uso de gas, es controlar el uso de nuestros contratos:
Una correcta utilizacion del gas hace que los metodos funciones y el uso de nuestro contrato sea aprovechado al maximo, que sea muy eficiente y tambien vamos a reducir costos a nivel financiero, sobre todo evitar posibles usos incorrectos del gas, por ejemplo si nosotros exponemos una llamada externa en nuestros contratos, vamos a evitar que puedan hacer excesivas operaciones con el control correcto del gas, por lo tanto siempre que se pueda en una llamada externa hay que poner un limite de gas, un tope, para que justamente el contrato o el codigo que se vaya a utilizar luego de la llamada externa no aproveche esta utilizacion del gas para hacer algo malintencionado.
Tambien tenemos a mano las librerias, lo bueno de las librerias es que no tenemos que reinventar la rueda, es decir, cuando vamos a escribir un codigo, para resolver determinada operacion, no tenemos que reeplantearnos y volver a escribir todo el desarrollo, sino que podemos aprovechar estos contratos que ya estan escritos, y estan auditados, entonces es una gran medida de seguridad para poder utilizar y sobre todo ganar tiempo a nivel de desarrollo, no olvidemos que muchas de estas librerias que estan publicadas hoy, estan hechas por desarrolladores que son expertos.
Control de accesso:
El control de Acceso va a limitar que un usuario que no tenga permisos pueda ejecutar funciones en nuestros contratos, sobre todo esto va a prevenir que de repente en un token pueda venir un usuario y pueda emitir monedas sin ser administrador/owner por lo tanto, tomar estas medidas y controlar el correcto uso del contrato a nivel de roles y permisos es una gran medida de seguridad para prevenir que estos usuarios accedan y ejecuten acciones que no queremos en nuestros contratos
Bloquear el contrato:
Imaginemos que ocurre algun problema o detectamos alguna falla o comportamiento indebido en el uso del contrato, automaticamente podemos bloquear el contrato, podemos dejar en pausa y podemos tomar alguna medida al respecto: ej, tratar de actualizar una version distinta al contrato para no perder la informacion y tambien arreglar el error o simplemente evitar que una falla o vulnerabilidad siga siendo atacada, entonces podemos poner en pausa nuestro contrato
Tenemo sque tener en cuenta:
Si aplicamos gestion de permisos, de roles, o simplemente bloqueamos el contrato, vamos a estar atentando contra la descentralizacion del mismo, entonces aca tenemos que ser muy cuidadosos en que nuestro proyecto, nuestro contrato no se convierta en algo decentralizado si no deseamos que asi sea, lo mejor para los escenarios descentralizados es justamente que la misma red, o participantes gestionen que todo funcione de forma correcta, pero en algunos casos el control de acceso nos va a servir de gran manera
Transferencias y Hook:
Un tema fundamental a la hora de interactuar con los distintos contratos en la red son las transferencias y las funciones que reciben transferencias de parte de los contratos, por lo tanto son conceptos que tenemos que entender bien en profundidad, muchos de los ataques vienen por el lado de no conocer a fondo por no saber como se realzian estas transacciones o como se realizan a nivel de seguridad, por ej establecer un limite de gas, entonces entendiendo muy bien el flujo de transferencias y de recepcion de ethers en la red, evita que nuestros contratos tengan muchisimos factores de ataques de los que estan siendo explotados y que nosotros podamos prevenir entendiendo bien conceptos
Excelentes notas de la clase
Controlar el uso del gas: Nos ayuda a:
Utilizacion de librerias: No reinventamos la reuda, Nos ofrecen soluciones a desafios que podemos econtrar con nuestros proyectos.
Control de acceso: Prevenir que un usuario sin permisos ejecute codigo en nuestro contrato
Bloquear un contrato: En caso de detectar un ataque y tomar medidas para salvarlo.
Transferencias y Hooks: Conocer a fondo el duncionamiento de cómo enviar Ether desde un contrato y cómo un contraro recibe transferencias es clave para prevenir vulnerabilidades
Nota: Ejercer el control de un contrato puede convertir nuestro proyecto en un escenario centralizado.
¿Cómo actualizarías la lógica de un contrato si son inmutables?
Lo tienes que hacer en un contrato separado. Hay algunos patrones que te permiten tener lógicas actualizables como Proxy o Diamond, puedes explorar esas soluciones también
¿Todo control en los contratos inteligentes implica centralización?
Buena pregunta. En principio te diría que sí, al menos como estamos acostumbrados. Ojo, la centralización no siempre es mala, todo depende del escenario que querramos modelar. Blockchain está muy ligado a lo descentralizado y por eso no siempre es bueno el control, pero hay mecanismos como la gobernanza que nos sirven para tratar de ejercer un control descentralizado
Controlar el uso del gas Una buena gestión del gas ayuda a:
uy no