Correas Fernández, JesúsSande Ríos, Javier2023-09-112023-09-112023https://hdl.handle.net/20.500.14352/87702Trabajo de Fin de Grado en Ingeniería Informática UCM, Departamento de Sistemas Informáticos y Computación, Curso 2022/2023On Ethereum, smart contracts must have two key characteristics: efficiency, an essential feature in smart contracts with a direct economic impact on the user, and security. The compiler of Solidity, the most widely used language for programming Ethereum smart contracts, automatically incorporates various security checks to avoid programming errors. This is the case of bounds checks on array accesses. Nevertheless, these checks introduce some computational overhead, which might be unnecessary in some scenarios. In this project, two approaches are proposed to reduce the costs associated with these controls and, consequently, array accesses. First, we introduce a new Solidity code construct that allows you to disable bounds checks in those sections of code that programmers deem unnecessary. Secondly, we propose a new compiler optimization phase that takes advantage of the high-level language structures of the program in order to optimize low-level accesses to arrays and relax the applicability conditions of current optimizations. Finally, we confirm through experimental results the effectiveness of both solutions in reducing the computational cost of array accesses.En Ethereum, los contratos inteligentes deben tener dos características clave: eficiencia, característica esencial con un impacto económico directo en el usuario, y la seguridad. El compilador de Solidity, el lenguaje más utilizado para programar contratos inteligentes en Ethereum, incorpora automáticamente varios controles de seguridad para evitar errores de programación. Este es el caso de los controles de límites en los accesos a arrays. No obstante, estas comprobaciones introducen cierta sobrecarga computacional, que puede ser innecesaria en algunos escenarios. En este proyecto, se proponen dos enfoques para reducir los costos asociados con estos controles y, en consecuencia, con el acceso a arrays. Primero, presentamos una nueva construcción de código de Solidity que permite deshabilitar las comprobaciones de límites en aquellas secciones de código en las que los programadores las consideran innecesarias. En segundo lugar, proponemos una nueva fase de optimización en el compilador, que aprovecha las estructuras del lenguaje de alto nivel del programa para optimizar los accesos de bajo nivel a los arrays y relajar las condiciones de aplicabilidad de las optimizaciones actuales. Finalmente, confirmamos a través de resultados experimentales la efectividad de ambas soluciones para reducir el costo computacional de los accesos mediante índice a arrays.engAttribution-NonCommercial-NoDerivatives 4.0 Internationalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Optimizing Compilation of Array Accesses in Solidity Smart ContractsCompilación Optimizante de Accesos a Arrays en Contratos Inteligentes en Soliditybachelor thesisopen access004(043.3)EthereumBlockchainSmart contractSolidityOptimizing compilerRuntime checkContratos inteligentesCompilador optimizadorComprobaciones en tiempo de ejecuciónInformática (Informática)33 Ciencias Tecnológicas