Curso dApps Sesión #2 "Escribiendo un contrato básico con Solidity"
Channel: coinosis
Date: 2020-07-30

*Presentación:* https://docs.google.com/presentation/d/1apC6xIjdwap0jSGLoeZ5sypcAnGlMeBlWmQQAY7MA94/edit#slide=id.g8bcac5e016_1_454 en este link pueden seguir los slides de la primera parte. Sin embargo buena parte de la sesión fue código en vivo. Pueden navegar en los diferentes momentos usando el siguiente índice:

*Secciones importantes de la sesión*
1. 25:40 Agenda de la sesión 2.
2. 26:13 Qué vamos a hacer: Revisión del tipo de mercado descentralizado que haremos.
3. 27:16 Arquitectura de la aplicación.
4. 28:09 Instalando truffle usando Emacs, además hicimos el ejercicio gracias a Dilver Huertas quien mostró (36:49) cómo funciona en VisualStudio Code.
5. 43:23 Creación del contrato Compraventa.sol.
6. 48:44 Función enviarFondosVendedor
      * Estructura básica de esa función.
      * Definición del tipo de variable.
      * Verificación de los fondos correctos por parte del vendedor.
7. 58:22 Función enviarFondosComprador
      * Validación que el depósito del comprador y envío del precio.
      * Definición de los factores de depósito.
8. 1:02:18 Función liberarFondos
      * Aclaración de los tipos de datos en Solidity: Ether Units.
      * Definición del comprador con msg.sender usando address como tipo de variable.
      * Código necesario para liberar los fondos para el comprador y el vendedor.
      * Revisión del orden correcto de ejecución, usando 'estado' del contrato.
9. 1:15:25 Comentario sobre seguridad: El hack del DAO
      * Muestra de la vulnerabilidad llamada el ataque de reentrada.
      * Aportes de diferentes participantes para entender el problema.
      * Implementación de la protección de seguridad, uso del patrón: checks effects interactions.
10. 1:27:27 Reflexión sobre cómo se almacena el dinero: Ante la pregunta de Santiago Jiménez se hizo una aclaración sobre cómo y qué es lo que se almacena en un contrato inteligente. La contabilidad que hacen los programadores del dinero y su carácter abstracto.
11. 1:31:00 - 1:36:03 Break de 5 minutos
12. 1:31:15 Anuncio para la distribución de los fondos
      * Explicación de cómo se envían los fondos, respecto a los aplausos enviados en coinosis.co
13. 1:38:09 Compilar el contrato
      * Uso del comando 'truffle compile'.
      * Inclusión de la visibilidad de las funciones como públicas.
14. 1:44:44 Pregunta de Dilver sobre el uso de la función: transfer (Aclaración de Juan Salcedo sobre el uso de VSCode)
15. 1:48:14 Tareas para la sesión 3
      * Proponer mejores factores para los depósitos del vendedor y del comprador.
      * Hacer un script de medición del gas usado por cada función.
      * Proponer optimizaciones de gas.
      * Implementar el patrón de retiro (https://blog.b9lab.com/the-solidity-withdrawal-pattern-1602cb32f1a5).
      * Hacer un README explicando el proyecto y/o cómo instalarlo.
      + Repositorio donde trabajaremos: https://github.com/coinosis/markethPlace

*Aportes valiosos*
- 45:49 Ante el aporte de David Obregón sobre cómo se nombran los contratos. En efecto hay una convención y es usar "CapWords" o PascalCase. Más información aquí: https://solidity.readthedocs.io/en/v0.6.11/style-guide.html#naming-conventions
- 53:56 Usar fracciones en Solidity es complicado, por esta razón Emilio escribió un artículo al respecto: https://medium.com/coinosis/c%C3%B3mo-usar-decimales-en-solidity-915f890914ee
- 1:02:34 Pregunta de Willian Valencia sobre por qué el precio se define como un entero. Se menciona qué es el GWei como unidad de medida dentro de Solidity. Aquí está la documentación de las unidades de Ether: https://solidity.readthedocs.io/en/v0.6.11/units-and-global-variables.html
- 1:24:21 Ante la discusión de lo que es un ataque de reentrada o "re-entracy attack", aquí una lectura técnica sobre esta vulnerabilidad: https://quantstamp.com/blog/what-is-a-re-entrancy-attack Además aquí una explicación del patrón en Solidity que surgió como buena práctica: https://fravoll.github.io/solidity-patterns/checks_effects_interactions.html

*Siguiente sesión, Jueves 23 - 6 : 30 pm* 👉🏼  https://coinosis.co/curso-dapps-sesion-3/asistencia