Todas estas preguntas se pueden responder en tres oraciones o menos.
Fácil
- ¿Cuál es la diferencia entre las funciones
private,internal,publicyexternal? - Aproximadamente, ¿qué tamaño puede tener un smart contract?
- ¿Cuál es la diferencia entre
createycreate2? - ¿Qué cambio importante en la aritmética ocurrió con Solidity 0.8.0?
- ¿Qué
CALLespecial se requiere para que funcionen los proxies? - ¿Cómo se calcula el costo en dólares de una transacción de Ethereum?
- ¿Cuáles son los desafíos de crear un número aleatorio en la blockchain?
- ¿Cuál es la diferencia entre una Subasta Holandesa (Dutch Auction) y una Subasta Inglesa (English Auction)?
- ¿Cuál es la diferencia entre
transferytransferFromen ERC20? - ¿Qué es mejor usar para una allowlist de direcciones: un
mappingo un array? ¿Por qué? - ¿Por qué no se debería usar
tx.originpara la autenticación? - ¿Qué función hash utiliza principalmente Ethereum?
- ¿Cuánto es 1 gwei de Ether?
- ¿Cuánto es 1 wei de Ether?
- ¿Cuál es la diferencia entre
assertyrequire? - ¿Qué es un flash loan?
- ¿Qué es el patrón check-effects-interaction?
- ¿Cuál es la cantidad mínima de Ether requerida para ejecutar un nodo de solo staking?
- ¿Cuál es la diferencia entre
fallbackyreceive? - ¿Qué es la reentrancy?
- ¿Qué impide que los bucles infinitos se ejecuten para siempre?
- ¿Cuál es la diferencia entre
tx.originymsg.sender? - ¿Cómo envías Ether a un contrato que no tiene funciones
payable, o unreceiveofallback? - ¿Cuál es la diferencia entre
viewypure? - ¿Cuál es la diferencia entre
transferFromysafeTransferFromen ERC721? - ¿Cómo se puede convertir un token ERC1155 en un token no fungible?
- ¿Qué es el access control y por qué es importante?
- ¿Qué hace un modifier?
- ¿Cuál es el valor más grande que puede almacenar un
uint256? - ¿Qué es una tasa de interés variable y fija?
Medio
- ¿Cuál es la diferencia entre transfer y send? ¿Por qué no deberían usarse?
- ¿Qué es una storage collision en un contrato proxy?
- ¿Cuál es la diferencia entre
abi.encodeyabi.encodePacked? uint8,uint32,uint64,uint128,uint256son todos tamaños de uint válidos. ¿Existen otros?
¿Qué cambió conblock.timestampantes y después de proof of stake?- ¿Qué es el frontrunning?
- ¿Qué es un esquema commit-reveal y cuándo lo usarías?
- ¿Bajo qué circunstancias podría
abi.encodePackedcrear una vulnerabilidad? - ¿Cómo determina Ethereum el BASEFEE en EIP-1559?
- ¿Cuál es la diferencia entre un cold read y un warm read?
- ¿Cómo fija el precio de los activos un AMM?
- ¿Qué es un function selector clash en un proxy y cómo ocurre?
- ¿Cuál es el efecto en el gas al hacer que una función sea
payable? - ¿Qué es un ataque de signature replay?
- ¿Cómo diseñarías un juego de piedra, papel o tijera en un smart contract de tal manera que los jugadores no puedan hacer trampa?
- ¿Qué es el free memory pointer y dónde se almacena?
- ¿Qué function modifiers son válidos para las interfaces?
¿Cuál es la diferencia entre memory y calldata en un argumento de función? - Describe los tres tipos de costos de gas de storage para operaciones de escritura.
- ¿Por qué los contratos upgradeables no deberían usar el constructor?
- ¿Cuál es la diferencia entre UUPS y el patrón Transparent Upgradeable Proxy?
- Si un contrato hace un
delegatecalla una dirección vacía o a una implementación que se autodestruyó previamente, ¿qué sucede? ¿Qué pasa si es un low-level call en lugar de undelegatecall? - ¿Qué peligro presentan los tokens ERC777?
- Según la guía de estilo de Solidity, ¿cómo deberían ordenarse las funciones?
- Según la guía de estilo de Solidity, ¿cómo deberían ordenarse los function modifiers?
- ¿Qué es una bonding curve?
- ¿En qué se diferencia
_safeMintde_minten la implementación ERC721 de OpenZeppelin?
¿Qué palabras clave se proporcionan en Solidity para medir el tiempo?
¿Qué es un sandwich attack? - Si se hace un
delegatecalla una función que hace un revert, ¿qué hace eldelegatecall? - ¿Cuál es una alternativa eficiente en gas para multiplicar y dividir por una potencia de dos?
- ¿Qué tamaño de uint se puede empaquetar con una dirección en un solo slot?
- ¿Qué operaciones otorgan un reembolso parcial de gas?
¿Para qué se utiliza ERC165? - Si un proxy hace un
delegatecalla A, y A ejecutaaddress(this).balance, ¿de quién es el balance que se devuelve, del proxy o de A? - ¿Para qué es útil un parámetro de slippage?
- ¿Qué hace ERC721A para reducir los costos de mint? ¿Cuál es el tradeoff?
- ¿Por qué Solidity no soporta la aritmética de coma flotante?
- ¿Qué es TWAP?
- ¿Cómo calcula Compound Finance la utilización?
- Si se hace un
delegatecalla una función que lee de una variable immutable, ¿cuál será el valor? - ¿Qué es un token fee-on-transfer?
- ¿Qué es un rebasing token?
- ¿En qué año un timestamp almacenado en un
uint32sufrirá un overflow? - ¿Qué es el LTV en el contexto de DeFi?
- ¿Qué son los aTokens y cTokens en el contexto de Compound Finance y AAVE?
- Describe cómo usar un protocolo de lending para ir leveraged long o leveraged short en un activo.
- ¿Qué es un perpetual protocol?
Difícil
- ¿Cómo representa los números la aritmética de fixed point?
- ¿Qué es un ataque de frontrunning de approval en ERC20?
- ¿Qué opcode logra
address(this).balance? - ¿Cuántos argumentos puede tener un event de Solidity?
- ¿Qué es un event anónimo de Solidity?
- ¿Bajo qué circunstancias una función puede recibir un
mappingcomo argumento? - ¿Qué es un ataque de inflación en ERC4626?
- ¿Cuántos storage slots utiliza esto:
uint64[] x = [1,2,3,4,5]? ¿Difiere de memory? - Antes de la actualización Shanghai, ¿bajo qué circunstancias
returndatasize()es más eficiente quePUSH 0? - ¿Por qué el compilador inserta el opcode INVALID en los contratos de Solidity?
- ¿Cuál es la diferencia en cómo se codifican a nivel de la EVM un custom error y un
requirecon un string de error?
¿qué es el parámetro kink en la fórmula DeFi de Compound?
¿cómo puede el nombre de una función afectar su costo de gas, si es que lo hace? - ¿Cuál es una vulnerabilidad común con ecrecover?
- ¿Cuál es la diferencia entre un optimistic rollup y un zk-rollup?
- ¿Cómo elige EIP1967 los storage slots, cuántos hay y qué representan?
- ¿Cuánto es un Szabo de ether?
- ¿Para qué se puede usar
delegatecallademás de usarlo en un proxy? - ¿Bajo qué circunstancias un smart contract que funciona en Ethereum no funcionaría en Polygon u Optimism? (Asume que no hay dependencias de contratos externos)
- ¿Cómo puede un smart contract cambiar su bytecode sin cambiar su dirección?
- ¿Cuál es el peligro de poner
msg.valuedentro de un bucle?
Describe el calldata de una función que toma un array de longitud dinámica deuint128cuando se pasauint128[1,2,3,4]como argumento - ¿Por qué las comparaciones de desigualdad estricta son más eficientes en gas que ≤ o ≥? ¿Qué opcode(s) extra se añaden?
- Si un proxy llama a una implementación, y la implementación se autodestruye en la función que es llamada, ¿qué sucede?
- ¿Cuál es la relación entre el scope de una variable y la profundidad del stack?
- ¿Qué es una transacción de access list?
- ¿Cómo puedes detener una ejecución con el opcode mload?
- ¿Qué es un beacon en el contexto de los proxies?
- ¿Por qué es necesario tomar un snapshot de los balances antes de llevar a cabo una votación de gobernanza?
- ¿Cómo se puede ejecutar una transacción sin que el usuario pague por el gas?
- En Solidity, sin usar assembly, ¿cómo obtienes el function selector del calldata?
- ¿Cómo se deriva una dirección de Ethereum?
- ¿Qué es el estándar metaproxy?
- Si un try catch hace un call a un contrato que no hace revert, pero ocurre un revert dentro del bloque try, ¿qué sucede?
- Si un usuario llama a un proxy que hace un
delegatecalla A, y A hace un call regular a B, desde la perspectiva de A, ¿quién esmsg.sender? desde la perspectiva de B, ¿quién esmsg.sender? Desde la perspectiva del proxy, ¿quién esmsg.sender? - ¿Bajo qué circunstancias las vanity addresses (direcciones con ceros iniciales) ahorran gas?
- ¿Por qué una cantidad significativa de bytecodes de contratos comienzan con 6080604052? ¿Qué hace esa secuencia de bytecode?
- ¿Cómo determina Uniswap V3 los límites de los intervalos de liquidez?
- ¿Qué es la risk-free rate?
- Cuando un contrato llama a otro a través de call,
delegatecallo staticcall, ¿cómo se pasa la información entre ellos? - ¿Cuál es la diferencia entre
bytesybytes1[]? - ¿Cuál es la mayor cantidad de apalancamiento que se puede lograr en un bucle borrow-swap-supply-collateral si el LTV es del 75%? ¿Y con otros límites de LTV?
- ¿Cómo logra Curve StableSwap la liquidez concentrada?
- ¿Qué peculiaridades tiene el contrato de la stablecoin de Tether?
- ¿Cuál es el uint más pequeño que almacenará 1 millón? ¿1 mil millones? ¿1 billón? ¿1 mil billones?
- ¿Qué peligro presentan los contratos lógicos UUPS no inicializados?
- ¿Cuál es la diferencia (si la hay) entre lo que devuelve un contrato si ocurre una división por cero en Solidity o si ocurre una división por cero en Yul?
- ¿Por qué no se puede usar
.push()para añadir elementos a un array en memory?
Avanzado
- ¿En qué direcciones se encuentran los precompiles de Ethereum?
- Describe qué es la “liquidez” en el contexto de Uniswap V2 y Uniswap V3.
- Si se hace un
delegatecalla un contrato que hace undelegatecalla otro contrato, ¿quién esmsg.senderen el proxy, en el primer contrato y en el segundo contrato? - ¿Cuál es la diferencia entre cómo se codifican en ABI un
uint64y unuint256en el calldata? - ¿Qué es la read-only reentrancy?
- ¿Cuáles son las consideraciones de seguridad al leer un array de
bytes(memory) desde un call a un smart contract no confiable? - Si despliegas un contrato de Solidity vacío, ¿qué bytecode estará presente en la blockchain, si lo hay?
- ¿Cómo fija la EVM el precio del uso de memory?
- ¿Qué se almacena en la sección de metadata de un smart contract?
- ¿Qué es el ataque de uncle-block desde una perspectiva de MEV?
- ¿Cómo llevas a cabo un ataque de signature malleability?
- ¿Bajo qué circunstancias las direcciones con ceros iniciales ahorran gas y por qué?
- ¿Cuál es la diferencia entre
payable(msg.sender).call{value: value}("")ymsg.sender.call{value: value}("")?
¿Cuántos storage slots ocupa un string? - ¿Cómo funciona la funcionalidad
--via-iren el compilador de Solidity? - ¿Los function modifiers se llaman de derecha a izquierda o de izquierda a derecha, o es no determinista?
- Si haces un
delegatecalla un contrato y se ejecuta el opcode CODESIZE, ¿qué tamaño de contrato se devolverá? - ¿Por qué es importante firmar con ECDSA un hash en lugar de un
bytes32arbitrario? - Describe cómo funciona el symbolic manipulation testing.
- ¿Cuál es la forma más eficiente de copiar regiones de memory?
- ¿Cómo puedes validar on-chain que otro smart contract emitió un event, sin usar un oráculo?
- Cuando se llama a selfdestruct, ¿en qué momento se transfiere el Ether? ¿En qué momento se borra el bytecode del smart contract?
- ¿Bajo qué condiciones el Proxy.sol de OpenZeppelin sobrescribe el free memory pointer? ¿Por qué es seguro hacer esto?
- ¿Por qué Solidity deprecó la palabra clave “years”?
- ¿Qué hace la palabra clave verbatim y dónde se puede utilizar?
- ¿Cuánto gas se puede enviar en un call a otro smart contract?
- ¿Cómo se ve en hexadecimal una variable
int256que almacena -1? - ¿Cuál es el uso del opcode signextend?
- ¿Por qué los números negativos en el calldata cuestan más gas?
- ¿Qué es una función hash zk-friendly y en qué se diferencia de una función hash que no es zk-friendly?
- ¿Qué hace un metaproxy?
- ¿Qué es un nullifier en el contexto de zero knowledge, y para qué se utiliza?
- ¿Qué es SECP256K1?
- ¿Por qué no deberías obtener el precio desde
slot0en Uniswap V3? - Describe cómo calcular la novena raíz de un número on-chain en Solidity.
- ¿Cuál es el peligro de usar
returnen assembly dentro de una función de Solidity que tiene un modifier? - Sin usar el operador
%, ¿cómo puedes determinar si un número es par o impar? - ¿Qué devuelve
codesize()si se llama dentro del constructor? ¿Y fuera del constructor?
Aprende más
Participa en nuestro Solidity Bootcamp para profundizar tus conocimientos en el desarrollo de smart contracts de Ethereum.