Las 100 preguntas de Solidity más habituales en entrevistas

Solidity

En esta guía vamos a ver cuáles son las preguntas más habituales que suelen hacer en entrevistas especializadas en Solidity. Como no podría ser de otro modo, también veremos las respuestas.

¿Qué es un Smart Contract de Ethereum?

Es una pequeña aplicación que se ejecuta en la blockchain de Ethereum.

¿Qué tiene de especial un Smart Contract en comparación con otras aplicaciones?

Una vez que se ha desplegado un smart contract de Ethereum, no es posible para su ejecución, ni modificarlo ni hackearlo, siempre y cuando no contenga bugs. Su código es inmutable, aunque sí es posible modificar su estado. Una vez iniciado, ni siquiera el creador del Smart Contract o el desarrollador de la Blockchain podrá pararlo.

¿Puede un Smart Contract interactuar con otros Smart Contract?

Sí. Cualquier Smart Contract podrá llamar a otra función de otro Smart Contract siempre y cuando la función se haya declarado como pública o como externa.

¿Puede un Smart Contract de Solidity realizar peticiones web a una API?

No. Un Smart Contract solamente puede ejecutar sus funciones y las de otros Smart Contracts dentro de la propia blockchain. Si necesitas que algo similar ocurra, debes invocar a una función del contrato desde una web para luego leer los cambios realizados. También es posible escuchar los eventos que emita el contrato.

¿Puede un Smart Contract almacenar muchos datos?

No, ya que almacenar datos cuesta GAS. Los datos se almacenan en bloques, siendo el espacio limitado y caro. Aunque en teoría sea posible almacenar muchos datos, no es algo nada deseable debido a su alto coste.

¿Es posible crear smart contracts en lenguages que no sean Solidity?

Sí, es posible crear Smart Contracts en lenguages como Vyper, LLL o Rust, en el caso de Solana. Sin embargo, el lenguaje más popular es Solidity.

¿Es solidity un lenguaje de tipado estático o dinámico?

Solidity es un lenguaje de tipado estático. Esto significa que es necesario definir el tipo de las variables. Esto difiere de lenguajes como JavaScript, en donde cualquier variable puede contener cualquier valor. En la Blockchain es importante controlar totalmente lo que ocurre, ya que una vez despliegues tu contrato, no podrás modificarlo. Una forma de asegurarte de ello, consiste en definir el tipo de todas las variables explícitamente.

¿Es solidity un lenguaje compilado o interpretado?

Solidity es un lenguage compilado. Antes de ejecutar un Smart Contract necesitas compilarlo, a diferencia de otros lenguages como JavaScript, en donde puedes poner a funcionar tu código directamente, siendo interpretado en tiempo de ejecución.

¿Cuál es la extensión de los archivos de Solidity?

La extensión de los archivos de solidity es .sol.

¿Puede un archivo de Solidity contener varios Smart Contracts?

Sí, basta con declarar varios contratos, aunque no es una práctica recomendable, ya que el código está má organizado cuando los contratos están en archivos separados.

¿Cuál es la estructura de un Smart Contract creado con Solidity?

Primero necesitas agregar la sentencia pragma:

pragma solidity ^0.8.20

Esta sentencia indica la versión de Solidity que quieres usar. Evita errores cuando creas el contrato para una versión de Solidity específica pero por ejemplo lo compilas para otra versión.

Luego viene la declaración del contrato. En su interior se suelen declarar primero las variables y luego las funciones y los modificadores:

contract A
{
  //variables
  uint a;

  // Funciones
  function ejemplo() { ... }
}

¿Cuál es la diferencia entre una variable de estado y una variable local?

Las variables de estado o globales persisten en la blockchain cuando un Smart Contract finaliza su ejecución. Por otro lado, las variables locales solamente existen en el ámbito de una función y no se almacenan en la blockchain.

¿Cómo arreglar problemas de shadowing de tipos con variabes locales?

Un problema de shadowing de tipos se da cuando en una función se vuelve a definir el tipo de una variable de estado, dando lugar a errores, como en el siguiente ejemplo:

contract Almcen
{
  uint data;
  
  function set(uint _data) external
  {
    address data = _data;
  }
}

Para arreglar la anterior función, debería eliminarse el tipo address del interior de la función, tal que así:

contract Almcen
{
  uint data;
  
  function set(uint _data) external
  {
    data = _data;
  }
}

Continuará…


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”