<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Filosofía Código</title>
        <link>https://paragraph.com/@filosofiacodigo-2</link>
        <description>Blockchain como tecnología y cultura.</description>
        <lastBuildDate>Sat, 03 Oct 2026 05:53:48 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Filosofía Código</title>
            <url>https://storage.googleapis.com/papyrus_images/b43ad0559cce9408cdd2a80013475f83b3baf60a20367d5c7f76745f8576bbdd.jpg</url>
            <link>https://paragraph.com/@filosofiacodigo-2</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Un Futuro para Elecciones Transparentes con ZK]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/un-futuro-para-elecciones-transparentes-con-zk</link>
            <guid>YWK63JCG2opZxFmIDKIX</guid>
            <pubDate>Sat, 19 Oct 2024 19:43:18 GMT</pubDate>
            <description><![CDATA[Al igual que las recientes elecciones bajo el gobierno de Nicolás Maduro, la historia de desconfianza en las elecciones se repite como un reloj en muchos países de LATAM cada 4, 5 o 6 años. Las acusaciones de fraude, votos mal contados y la conclusión en gobiernos militares son temas recurrentes. En mí país Honduras, por ejemplo, Juan Orlando Hernández, ex-presidente, ahora está preso en una cárcel estadounidense, acusado de Narcotráfico luego de una reelección muy cuestionada.En mi país, Hon...]]></description>
            <content:encoded><![CDATA[<p>Al igual que las recientes elecciones bajo el gobierno de Nicolás Maduro, la historia de desconfianza en las elecciones se repite como un reloj en muchos países de LATAM cada 4, 5 o 6 años. Las acusaciones de fraude, votos mal contados y la conclusión en gobiernos militares son temas recurrentes. En mí país Honduras, por ejemplo, Juan Orlando Hernández, ex-presidente, ahora está preso en una cárcel estadounidense, acusado de Narcotráfico luego de una reelección muy cuestionada.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0242e7c65cb267d6c75c0c484201bfdec6276b793ca63a4a66ce8637b490f45b.png" alt="En mi país, Honduras, nuestro ex-presidente ahora está en una cárcel estadounidense acusado de Narcotráfico luego de una reelección muy cuestionada." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">En mi país, Honduras, nuestro ex-presidente ahora está en una cárcel estadounidense acusado de Narcotráfico luego de una reelección muy cuestionada.</figcaption></figure><p>Estos problemas han hecho que las elecciones sean vistas con escepticismo. Es claro que la OEA, las reformas y las fuerzas armadas no han sido suficiente para restaurar la confianza. Tampoco el internet, pues está sujeto a la manipulación de votos electrónicos. Y aunque las blockchains, como Ethereum, resuelven el problema de la manipulación, tienen un defecto: la información es pública, lo que abre la puerta a la coerción y el soborno.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/971a3b3d6f457fa6c84530d9c02fa6d165cf7fad5942e6ce6253e623d1e3b739.png" alt="La OEA, las regulaciones y las fuerzas armadas no han sido capaces de devolver la confianza en las elecciones." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">La OEA, las regulaciones y las fuerzas armadas no han sido capaces de devolver la confianza en las elecciones.</figcaption></figure><p>Aquí entra una tecnología relativamente reciente: Zero Knowledge (ZK). Aunque su origen data de los años 80, ha sido en los últimos años que ha dado saltos significativos, prometiendo restaurar la confianza no solo en las elecciones, sino en múltiples áreas.</p><h3 id="h-que-es-zero-knowledge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">¿Qué es Zero Knowledge?</h3><p>Zero Knowledge, o ZK, permite demostrar algo sin revelar información adicional. Por ejemplo:</p><ul><li><p>Para entrar a una discoteca: <strong>Probar que soy mayor de edad sin revelar mi edad.</strong></p></li><li><p>Para obtener un préstamo: <strong>Demostrar que tengo suficiente salario para un préstamo sin revelar la cantidad exacta.</strong></p></li><li><p>Para votaciones: <strong>Mostrar que soy parte de un grupo de votantes sin revelar cuál soy.</strong></p></li></ul><p>En elecciones, ZK podría permitir a los ciudadanos demostrar que tienen derecho a votar sin exponer su identidad, previniendo la coerción y el fraude. Pero, ¿cómo funciona ZK a nivel técnico?</p><h3 id="h-la-parte-tecnica-zk-y-elecciones" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">La Parte Técnica: ZK y Elecciones</h3><p>Imagina que cada ciudadano tiene un par de llaves criptográficas: una <strong>llave pública</strong> y una <strong>llave privada</strong>. La <strong>llave pública</strong> es como tu número de identidad, mientras que la <strong>llave privada</strong> es un secreto personal que usas para probar que esa identidad te pertenece, sin necesidad de exponerla.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef9e49260232bd67430198da1c5430d6ab0f77d17d8d357a5ddf751c676aa4ce.png" alt="En Estonia, puedes demostrar criptográficamente tu identidad con una tarjeta USB. En otros modelos podrías almacenarla en tu celular o incluso en una hoja de papel." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">En Estonia, puedes demostrar criptográficamente tu identidad con una tarjeta USB. En otros modelos podrías almacenarla en tu celular o incluso en una hoja de papel.</figcaption></figure><p>Una propiedad fundamental de las llaves criptográficas es que, con la <strong>llave privada</strong>, puedes generar tu <strong>llave pública</strong>, pero no al revés. Esto se logra usando <strong>funciones hash</strong>, las cuales convierten la llave privada en una llave pública. La función hash es unidireccional, lo que garantiza la seguridad de tu identidad.</p><pre data-type="codeBlock" text="hash(llavePrivada) = llavePublica
"><code><span class="hljs-built_in">hash</span>(llavePrivada) = llavePublica
</code></pre><p>Cuando un ciudadano vota, su voto se puede incluir en una <strong>prueba de inclusión</strong> ZK. Esta prueba permite demostrar que un ciudadano está en una lista de votantes sin revelar quién es ni por quién votó.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4279605a275c105a8ce85f87b39601b22b127558aef7f233d0645ad803d7ff5a.png" alt="Cada votante puede presentar una Prueba de Inclusión, demostrando que es parte de una lista sin revelar quién es." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Cada votante puede presentar una Prueba de Inclusión, demostrando que es parte de una lista sin revelar quién es.</figcaption></figure><p>Aquí entra en juego el concepto del Árbol Merkle, una estructura de datos que permite validar pruebas de inclusión de forma eficiente. Cada nodo del árbol es el hash de los nodos hijos, y el nodo raíz representa la lista de todos los votantes. Esto permite a cada votante generar una prueba de que está en la lista en tiempo logarítmico O(log n), sin que el sistema tenga que verificar toda la lista cada vez en tiempo lineal O(n). Este tipo de optimización es importante para poder ejecutar votaciones con un gran número de personas, ya que ZK es computacionalmente demandante, y necesitamos que cada votante pueda emitir su voto desde dispositivos personales.</p><h3 id="h-ejemplo-de-prueba-de-inclusion-en-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Ejemplo de Prueba de Inclusión en ZK</h3><pre data-type="codeBlock" text="inclusionProof(private: llavePrivada, public: listaVotantes) {
  llavePublica = hash(llavePrivada)
  existe = listaVotantes.contains(llavePublica)
  return existe
}
"><code>inclusionProof(<span class="hljs-keyword">private</span>: llavePrivada, <span class="hljs-keyword">public</span>: listaVotantes) {
  llavePublica <span class="hljs-operator">=</span> hash(llavePrivada)
  existe <span class="hljs-operator">=</span> listaVotantes.contains(llavePublica)
  <span class="hljs-keyword">return</span> existe
}
</code></pre><p>En este pseudocódigo, la función toma como entrada la <strong>llave privada</strong> y la <strong>lista de votantes</strong> (almacenada en un Árbol Merkle). Esto genera una <strong>prueba ZK</strong> que demuestra que la llave pública del votante está en la lista, sin revelar quién es ni detalles de la llave privada.</p><h3 id="h-verificacion-en-ethereum" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Verificación en Ethereum</h3><p>Una vez que los votos se registran, se necesitan lugares confiables para validar las pruebas ZK y asegurarnos que nadie votó dos veces. ¿Dónde? La respuesta es <strong>Ethereum</strong>. Ethereum es una blockchain global descentralizada y resistente a la censura, donde cualquiera puede validar transacciones y pruebas. De esta manera no dependemos de gobiernos o empresas centralizadas como ser Google Cloud, Amazon Web Services, Microsoft Azure o el resto del internet al que estamos acostumbrados a usar hoy.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4b4f98f9db0009434eddb9cf8c94abfd7a4d174fc79c4ae272b7d5b77b25f5e0.png" alt="Ethereum hoy cuenta con una seguridad económica de mas de 80 billones de dólares, lo que lo hace la red más segura y resistente a la censura capaz de procesar votos" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Ethereum hoy cuenta con una seguridad económica de mas de 80 billones de dólares, lo que lo hace la red más segura y resistente a la censura capaz de procesar votos</figcaption></figure><p>Con Ethereum, podemos verificar pruebas ZK de manera pública y segura. Aunque otras blockchains como Solana o Avalanche también son opciones, ninguna ofrece las garantías de seguridad y descentralización que Ethereum proporciona. La única vulnerabilidad sería lo que comúnmente conocemos como el ataque del 51%, pero hoy en día se necesitarían decenas de miles de millones de dólares para ejecutar este ataque.</p><h3 id="h-por-que-no-usamos-zk-aun" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">¿Por qué No Usamos ZK Aún?</h3><p>Aunque la tecnología ZK ha avanzado mucho, todavía está en fases experimentales. Los lenguajes como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/speedrun-de-zk-noir-circom-zokrates-en-15-mins-2080">Circom, Noir, y Zokrates</a> permiten crear circuitos ZK, pero aún quedan desafíos por resolver, como la escalabilidad y el costo computacional de generar pruebas ZK en dispositivos personales.</p><p>Además, otro gran obstáculo es cómo manejar el emisor de identidades. Si no confiamos en el gobierno para emitir identidades, necesitaríamos soluciones alternativas como la <strong>identificación biométrica</strong> o los <strong>grafos sociales</strong> (como los proyectos <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.brightid.org/">BrightID</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://attest.org/">Ethereum Attestation Service</a>), donde las personas se verifican entre sí para combatir ataques Sybil.</p><h3 id="h-mi-nota-personal" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Mi Nota Personal</h3><p>Años atrás, comencé como desarrollador de videojuegos profesional y fullstack, pero luego enfoqué mi carrera hacia blockchain y luego, ZK. Creo que, aunque aún hay barreras por superar, estamos más cerca de lo que parece de lograr una adopción masiva de esta tecnología, que puede resolver los problemas actuales de confianza y privacidad.</p><p>Si te interesa iniciarte en el desarrollo ZK y contribuir a un futuro donde interactuemos de manera más justa, te invito a ver mi curso <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=twqcNERMJxw&amp;list=PLtBMv9K24Hn-zBNrP9vBal09pxDWqm3DX&amp;index=4">introductorio completo sobre ZK</a>, donde además podrás acceder a excelentes oportunidades laborales a nivel mundial.</p><p>Gracias por leer, también me puedes encontrar en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/filosofiacodigo">twitter</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.instagram.com/filosofiacodigo">instagram</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/c/Filosof%C3%ADaC%C3%B3digo">youtube</a> para lo más nuevo en temas de desarrollo en ZK.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/dacaabf304c9ae1ca577e9ae28cc02322e4be7ebb650538ffb4b204baec0be99.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[¿Porqué no hay más apps ZK hoy?]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/porqu-no-hay-m-s-apps-zk-hoy</link>
            <guid>TPlJgLQvkpYOJBmbTk8q</guid>
            <pubDate>Fri, 12 Jul 2024 15:10:07 GMT</pubDate>
            <description><![CDATA[Hace unos meses un buen amigo me hizo esta pregunta pero ese momento no tenía una respuesta tan clara. Ahora sí tengo una buena respuesta gracias a bastante estudio, experimentación y mucha ayuda que me han dado los expertos. Al terminar este artículo, te podrás hacer una espectativa más acertada sobre lo que se viene, sobre lo que ya se puede construir y lo que hace falta. Quizás escuchaste que ZK es fundamental para Ethereum, ¡y sí es verdad! Esta tecnología trae dos propiedades muy importa...]]></description>
            <content:encoded><![CDATA[<p>Hace unos meses un buen amigo me hizo esta pregunta pero ese momento no tenía una respuesta tan clara. Ahora sí tengo una buena respuesta gracias a bastante estudio, experimentación y mucha ayuda que me han dado los expertos. Al terminar este artículo, te podrás hacer una espectativa más acertada sobre lo que se viene, sobre lo que ya se puede construir y lo que hace falta.</p><p>Quizás escuchaste que ZK es fundamental para Ethereum, ¡y sí es verdad! Esta tecnología trae dos propiedades muy importantes: la escalabilidad y la privacidad. Ya hemos visto la rápida implementación de ZK en escalabilidad a través de los rollups. Desde que zkSync lanzó su canal de pagos, hasta hoy que tenemos Rollups zkEVM que ofrecen la misma experiencia que Ethereum pero a una fracción de su costo.</p><p>Entonces, ¿porqué no ha ocurrido lo mismo con la privacidad? ¿Porqué no hay aplicaciones en Ethereum que hagan uso de la privacidad de ZK?</p><h2 id="h-es-tan-dificil-zk" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Es tán difícil ZK?</h2><p>En realidad, no tanto.</p><p>Al inicio pensé que era un problema de falta de investigación. O falta de las herramientas necesarias para crear aplicaciones de esta naturaleza. Pero este claramente no es el caso pues seguramente hacer una zkEVM es mucho más complicado que, por ejemplo, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/smart-contracts-privados-con-solidity-y-circom-3a8h">votos anónimos on-chain</a>.</p><p>Con esto no quiero decir que hacer aplicaciones con privacidad es sencillo, se necesita unir una serie de tecnologías: contratos, circuitos, probadores WASM en el navegador, una red de relayers incentivados. Pero a pesar que sea complejo no deja de ser accesible. Por cierto, si te llama la atención <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/huracan-el-proyecto-educativo-para-ingenieros-aprendiendo-zk-2dl4">tengo una guía paso a paso sobre cómo hacerlo</a>.</p><p>Habiendo descartado esta posibilidad, a continuación comparto las 3 razones por las que no hay aplicaciones de privacidad con adopción masiva en Ethereum.</p><h2 id="h-problema-1-incertidumbre-regulatoria" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Problema #1: Incertidumbre regulatoria</h2><p>Saquemos primero el elefante en la habitación. El proyecto de privacidad con mayor cantidad de usuarios que ha tenido crypto ha sido Tornado Cash. Un mixer capaz de mantener nuestras finanzas privadas, protegiendo así nuestra soberanía y seguridad como individuos. El problema es que también se le da el poder a los hackers, estafadores y otros actores maliciosos de borrar su rastro.</p><p>Hoy Tornado Cash está prohibido para los ciudadanos estadounidenses, los repositorios de github archivados y un desarrollador en la cárcel (nota: se presume que no está en la carcel por desarollar en sí). Esto ha generado un clima de incertidumbre en los desarrolladores, inversionistas y usuarios.</p><p>La solución a este problema existe dentro la misma tecnología. Para entenderla primero debemos hablar ver cómo funciona un mixer. En resumidas cuentas, un mixer en el fondo usa algo que llamamos <em>Prueba de Inclusión</em>, donde demostramos que depositamos en un smart contract específico sin revelar cuál depositante somos. De esta manera podemos retirar fondos a una nueva address limpia.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c9d8dcb4258eb85e9b79d958583d0f1ae49b68039b12f077be0c23caeb656910.png" alt="Los usuarios que depositan en un mixer son almacenados en una lista pública, en un árbol estilo Merkle" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Los usuarios que depositan en un mixer son almacenados en una lista pública, en un árbol estilo Merkle</figcaption></figure><p>La solución es aplicar el proceso inverso, una <em>Prueba de Exclusión</em>, para demostrar que no soy uno de los address excluídos o blacklisteados. Combinando ambas pruebas, la de inclusión con la de exclusión, puedo demostrar que soy un depositante honesto y mantener mi identidad privada.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b64625c1128585ce8b93481d96f4979303a5a87e9ddc19b1f87970187c80bc2a.png" alt="Los usuarios pueden retirar fondos anónimamente con una prueba de inclusión y otra de exlusión para demostrar que son buenos actores" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Los usuarios pueden retirar fondos anónimamente con una prueba de inclusión y otra de exlusión para demostrar que son buenos actores</figcaption></figure><p>El debate moral sobre <em>bajo qué criterios se excluye un participante</em> persiste. Pero ZK es una tecnología flexible y expresiva que puede adaptarse a diferentes regulaciones o requerimientos.</p><h2 id="h-problema-2-mala-ux" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Problema #2: Mala UX</h2><p>Esto va más allá que el problema de <em>guardar las 12 palabras en un papel para crear una wallet</em>. Sí, este es un problema que tenemos en web3 y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/l1sload-el-nuevo-opcode-para-keystores-seguras-y-escalables-50of">seguimos trabajando</a> para resolver. Pero ZK le agrega un nuevo inconveniente: largos tiempos de prueba en el cliente.</p><p>Resulta que el equipo de Ethereum, en etapas iniciales de desarrollo no sabía que iba a ser tán problemático implementar Keccak256 como algoritmo de hasheo para crear las cuentas. Pedersen o Poseidon son opciones con tiempos de para producir pruebas ZK mucho menores.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a2e5b1ab7cb465ce2b87d6599db99544433698fbea81e615824a854f2c93bdb7.png" alt="Si un proyecto usa Keccak256 los tiempos de espera son de varios minutos, si decide usar Pedersen o Poseidon deja de ser compatible con Metamask, Rabby, etc..." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Si un proyecto usa Keccak256 los tiempos de espera son de varios minutos, si decide usar Pedersen o Poseidon deja de ser compatible con Metamask, Rabby, etc...</figcaption></figure><p>Si un desarrollador decide tomar el camino de Keccak, los usuarios pueden usar por ejemplo Metamask o Rabby. Pero el tiempo de generar una prueba es de varios minutos en una PC. Este problema se hace más grave en un celular porque adicionalmente se debe de tomar el sistema operativo no cierre el proceso si el usuario lo pone el teléfono en modo reposo.</p><p>Por otro lado, si se decide tomar el camino de Pedersen o Poseidon, se necesita crear un sistema de cuentas que no es compatible con las wallets de Ethereum como Metamask. ¿Quizás la solución es crear un sistema de cuentas con abstracción de cuentas combinado con una wallet nueva que los usuarios tienen que instalar? Suena como un esfuerzo bastante alto para onboardear usuarios.</p><p>Como nota positiva, hay bastante expectiva en métodos para reducir los costos y tiempos de espera usando Keccak256. Existen varios estudios y papers que en el futuro próximo serán aplicados.</p><h2 id="h-problema-3-nulificadores-ecdsa" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Problema #3: Nulificadores ECDSA</h2><p>Este problema es bastante técnico así que les invito a tener más paciencia.</p><p>Anteriormente mencionamos que usamos las <em>Pruebas de Inclusión</em> para demostrar que somos parte de un grupo sin demostrar cuál somos. Entonces ¿cómo prevenimos a alguien retirar dos veces los mismos fondos de un mixer? La respuesta es por medio de algo que llamamos <em>nulificadores</em>. Los nulificadores son una técnica creada para resolver el problema de, por ejemplo, el doble gasto (double spend) en DeFi, o de doble voto en un sistema de votación.</p><p>En Ethereum, podemos implementar nulificadores de la siguiente manera:</p><ol><li><p>Los usuarios son colocados en una lista (o merkle tree), puede ser por ejemplo la lista de depositantes en un mixer, la lista de votantes o la lista de usuarios en una red social anónima.</p></li><li><p>Los usuarios firman un mensaje, este se usa para generar una prueba de manera local (en el navegador del usuario). La prueba contiene un hash de, en parte, la firma de un mensaje. De esta manera se puede verificar que es una firma válida sin revelar el orígen. A este hash le llamamos el nulificador.</p></li><li><p>Al pasar la prueba a un contrato de Ethereum, almacenamos el nulificador en el contrato (usualmente en un <code>mapping(bytes32 nullifier =&gt; bool exists)</code>). Únicamente se aceptan pruebas con nulificadores nuevos, de esta manera cada prueba o acción puede ser aplicada solo una vez.</p></li></ol><p>El problema que tenemos es que el sistema de firmas actual no es nulificable. Es decir, las firmas implementadas en las wallets como Metamask, Rabby, Coinbase no tienen un mecanismo para generar hashs únicos. Y tampoco, con justa razón, mecanismos para extraer las llaves privadas.</p><p>Necesitamos implementar un nuevo sistema de firmas en las wallets. Pero este sistema debería ser adoptado por todas las wallets por igual, debería de existir un consenso. El mejor candidato que tenmos hoy es <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/plume-sig/zk-nullifier-sig?tab=readme-ov-file">Plume</a>. Y ya <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/RabbyHub/Rabby/pull/2047">existen PRs</a>, las <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/MetaMask/metamask-extension/pull/17482">wallets principales</a> listos para <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/tahowallet/extension/pull/3638">ser mergeados</a>. Pero las wallets se resisten a aceptarlo pues quieren estudiar primero la seguridad e implicaciones.</p><p>La alternativa también es implementar un sistema de firmas aparte con abstracción de cuentas (AA) que sea nulificable. Pero la comunidad de Ethereum no se ha decidido en un estandar aún.</p><p>Si eres un desarrollador nuevo en ZK, es importante no dejarte frenar por estas dificultades. Al contrario, busca alternativas creativas o soluciones a estas limitantes. Este es el espíritu que ha tenido blockchain y web3 desde su inicio. Estoy seguro que ZK seguirá avanzando y es por eso sigo estudiando de cerca esta tecnología.</p><p>¡Gracias por leer! Sígueme en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/c/Filosof%C3%ADaC%C3%B3digo">Youtube</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FilosofiaCodigo">Twitter</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn">dev.to</a> para todo lo relacionado a ZK y Ethereum.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
        </item>
        <item>
            <title><![CDATA[Retro: Notas sobre correr un concurso para escritores de artículos técnicos]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/retro-notas-sobre-correr-un-concurso-para-escritores-de-art-culos-t-cnicos</link>
            <guid>ZQXxpXAW9ndINy90t4hA</guid>
            <pubDate>Tue, 09 Jul 2024 19:25:49 GMT</pubDate>
            <description><![CDATA[Con el objetivo de conectar a devs de habla hispana en web3 y de visibilizar su contenido, lancé el 10 de abril Reto Web3. Este evento se llevó a cabo durante un mes y consistió en un concurso donde invité a hackers a escribir guías y artículos sobre temas de actualidad relacionados a Ethereum. Los temas incluían ZK, layer 2, la intersección con IA y DA (disponibilidad de datos).El origen de este concursoEn mi canal de youtube y blog me dedico a difundir las tecnologías en web3 de actualidad ...]]></description>
            <content:encoded><![CDATA[<p>Con el objetivo de conectar a devs de habla hispana en web3 y de visibilizar su contenido, lancé el 10 de abril Reto Web3. Este evento se llevó a cabo durante un mes y consistió en un concurso donde invité a hackers a escribir guías y artículos sobre temas de actualidad relacionados a Ethereum. Los temas incluían ZK, layer 2, la intersección con IA y DA (disponibilidad de datos).</p><h2 id="h-el-origen-de-este-concurso" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">El origen de este concurso</h2><p>En mi canal de youtube y blog me dedico a difundir las tecnologías en web3 de actualidad y que me parecen más importantes. Fue por eso que, al recibir fondos de las rondas de financiamento de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://qf.ethlatam.org/">ETH Latam</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://grants.ethereumtgu.com/">Ethereum TGU</a> decidí lanzar un concurso para premiar a hackers que estudien tecnologías nuevas y escriban artículos. Lancé este programa través del artíclo que comparto a continuación donde explico los detalles sobre las reglas y mecanánicas:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/filosofiacodigo.eth/f4ONOeNr6jKpif9L661juEUXUD7TtEaE0mV2Aeiyzbc">https://mirror.xyz/filosofiacodigo.eth/f4ONOeNr6jKpif9L661juEUXUD7TtEaE0mV2Aeiyzbc</a></p><h2 id="h-resultados" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Resultados</h2><p>Hubieron 2 ganadores del concurso que recibieron 300 DAI como premio.</p><ul><li><p>Lidia Canales<br>Tema: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xe527275DA855C658de60EcA230800458f668194B/zaNEPzGH-EQ909NYmL-KwvzByVDE0PTWQJU-4FKddRk">Cómo interactuar desde una webapp con un Smart Contract con privacidad</a><br>Síganla en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/@Luna-codecat">Youtube</a></p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0xe527275DA855C658de60EcA230800458f668194B/zaNEPzGH-EQ909NYmL-KwvzByVDE0PTWQJU-4FKddRk">https://mirror.xyz/0xe527275DA855C658de60EcA230800458f668194B/zaNEPzGH-EQ909NYmL-KwvzByVDE0PTWQJU-4FKddRk</a></p><ul><li><p>Gilberts Ahumada<br>Tema: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gilbertsahumada.hashnode.dev/aztec-network-configuracion-sandbox-y-despliegue-de-un-token">Tokens con privacidad en Aztec Sandbox</a><br>Síganlo en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/@gilbertsahumada">Youtube</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/gilbertsahumada">Twitter</a> e <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://instagram.com/gilbertsahumada">Instagram</a></p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gilbertsahumada.hashnode.dev/aztec-network-configuracion-sandbox-y-despliegue-de-un-token">https://gilbertsahumada.hashnode.dev/aztec-network-configuracion-sandbox-y-despliegue-de-un-token</a></p><ul><li><p>Como un extra, Gilberts y yo lanzamos un video usando el artículo que escribió</p></li></ul><div data-type="youtube" videoId="YXTOLQHWau0">
      <div class="youtube-player" data-id="YXTOLQHWau0" style="background-image: url('https://i.ytimg.com/vi/YXTOLQHWau0/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=YXTOLQHWau0">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h2 id="h-cosas-a-repetir-y-cosas-a-mejorar" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Cosas a repetir y cosas a mejorar</h2><p>La calidad y el formato del contenido creado superó grandemente mi espectativa. Me gustaría hacer más concursos donde se promueva la producción de contenido técnico relevante y de actualidad. Ambos, Gilberts y Lidia, no solo explicaron paso a paso la tecnología sino que también expresaron su opinión sobre porqué esta tecnología les parece imporante.</p><p>Habiendo dicho esto, me parece que la dificultad de los retos fue demasiado elevada. Varios otros participantes me comentaron que intentaron cumplir un reto pero no lo lograron por su complejidad. Me gustaría que para una futura entrega debería acortar la distancia entre la dificultad del reto y sus participantes. Idealmente, creando más y mejor contenido educativo para preparar a los participantes de antemano. Además la creación de este contenido más introductorio podría ser a través una futura entrega de este programa.</p><p>Al inicio, tenía dudas sobre en qué momento lanzar el concurso. Sentía habían muchos hackathones y eventos durante las mismas fechas. Pero viendo hacia atrás me parece bien haberlo lanzado porque la actividad en web3 nunca para, así que solo es algo para tomar en cuenta pero el momento del lanzamiento siempre vá a colisionar con otros eventos.</p><p>En cuanto a los canales de distribución únicamente usé los mios personales. Y cuentas de twitter de individuos y organizaciones amigas me ayudaron a amplificar. Ahora que ya estoy más seguro sobre cómo debería funcionar un programa de este estilo me gustaría hacer una estrategia más planificada donde también se incluyan a los protocolos sobre los que se estará generando contenido.</p><p>Finalmente, ¡debo buscar alguna manera de prevenir que los bots farmeros inunden mi formulario!</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ad542aae0a8f3956b9dcdf6cf477761871fe8a52d64bb021eed4be79eccc8124.png" alt="¡Los bots farmeros inundaron mi formulario!" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">¡Los bots farmeros inundaron mi formulario!</figcaption></figure><h2 id="h-que-sucedera-con-el-resto-de-los-premios" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Qué sucederá con el resto de los premios?</h2><p>Estoy considerando hacer una segundo concurso y usar los fondos provinientes de la CRL restantes para eso. Pero si estás leyendo esto y te llama la atención hacer uno de los retos restantes comunícate conmigo y lo hablamos.</p><p>Al momento de escribir este artículo, los premios faltantes son:</p><ul><li><p>Firmas con plume: Verificar firmas nulificables de ECDSA en Aztec o Circom</p></li><li><p>OP Stack + Eigen DA: Guardar los datos del OP Stack</p></li><li><p>ZKML con Giza: Demo sobre verificación on-chain de un output de un modelo de IA</p></li><li><p>Zokrates + Nova: Demo sobre folding usando Zokrates</p></li></ul><p>En <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/orgs/FilosofiaCodigo/projects/3/views/2?filterQuery=-status%3A%F0%9F%92%A1Ideas%2C%22%F0%9F%93%9C+Article+Published%22%2C%22%F0%9F%94%B4+Video+Published%22%2C%22%F0%9F%93%9C+Art%C3%ADculo+Publicado%22%2C%22%F0%9F%94%B4+Video+Publicado%22">este link</a> puedes ver la lista actual y completa.</p><p>Graciás por leer este artículo y para mantanerte al tanto de avances suscríbete en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/channel/UCNRB4tgwp09z4391JRjEsRA">youtube</a> y sigue a @FilosofiaCodigo en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/FilosofiaCodigo">twitter</a> y farcaster.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
        </item>
        <item>
            <title><![CDATA[10 años después de mi Juego Crypto: Retrospectiva]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/10-a-os-despu-s-de-mi-juego-crypto-retrospectiva</link>
            <guid>1WlDy6xVDv9H5P7qRTAO</guid>
            <pubDate>Sun, 07 Jul 2024 18:00:24 GMT</pubDate>
            <description><![CDATA[Hace 10 años lancé un MMO RPG crypto. Durante este tiempo, la tecnología ha cambiado bastante, si lo hiciera hoy ¿cómo lo haría?¿Cómo funciona un Crypto MMO?Un MMORPG (juego de rol masivo online) es un videojuego donde cada usuario controla un personaje y junto con otros jugadores emprenden en aventuras subiendo de nivel y coleccionando items.Hacer un MMO es difícil, es por eso que forkié The Mana World, un juego open sourceCrear un juego de estas características es bastante trabajoso, requie...]]></description>
            <content:encoded><![CDATA[<p>Hace 10 años lancé un MMO RPG crypto. Durante este tiempo, la tecnología ha cambiado bastante, si lo hiciera hoy ¿cómo lo haría?</p><h2 id="h-como-funciona-un-crypto-mmo" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Cómo funciona un Crypto MMO?</h2><p>Un MMORPG (juego de rol masivo online) es un videojuego donde cada usuario controla un personaje y junto con otros jugadores emprenden en aventuras subiendo de nivel y coleccionando items.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b2b8b328f1cdeeb3eea39097e99cb36f66513fe66ae3b05b1cd77bf9bdefaf23.png" alt="Hacer un MMO es difícil, es por eso que forkié The Mana World, un juego open source" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Hacer un MMO es difícil, es por eso que forkié The Mana World, un juego open source</figcaption></figure><p>Crear un juego de estas características es bastante trabajoso, requiere de:</p><ul><li><p>Un backend que permita muchos usuarios simultáneamente</p></li><li><p>Un cliente capaz de manejar actualizaciones</p></li><li><p>Herramientas para definir la lógica de las misiones, diseño de mapas y animaciones</p></li><li><p>Gráficos, audio, música consistente</p></li><li><p>Historia y progresión cohesiva</p></li></ul><p>Es por eso que para lanzar mi propio juego forkié un proyecto llamado <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.themanaworld.org/">The Mana World</a>. Este proyecto es open source y cuenta con todo lo necesario para crear un juego de esta naturaleza. Actualmente, The Mana World en sigue en funcionamiento.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f745043711eed5de41adb3a998f811a54442b42171a17b661ddcbbcefc37278b.png" alt="Cada personaje contolaba una wallet única capaz de hacer transacciones on-chain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Cada personaje contolaba una wallet única capaz de hacer transacciones on-chain</figcaption></figure><p>La diferencia de mi servidor con el resto era el hecho que cada personaje en el juego controlaba su propia wallet. Este fue el punto de entrada para más funcionalidades que implementé poco a poco.</p><h2 id="h-funcionalidades-crypto-que-implemente" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Funcionalidades crypto que implementé</h2><p>El primer paso fue implementar un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa/blob/master/src/doge/utility.cpp">wrapper de bitcoin en c++</a> dentro del backend. El wrapper es capáz de comunicarse con un nodo full RPC de dogecoin (o bitcoin, que es lo mismo) corriendo localmente en el mismo ambiente que el servidor. De esta manera, la primera versión del juego permitía a los jugadores tanto depositar y retirar fondos como hacer transacciones internas sin pagar comisión. Esto a través de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa/blob/master/src/map/atcommand.cpp#L406">comandos en la ventana de chat</a> dentro del juego.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c2823584127204534a907dd0d679e1ec659462ad2b026b87c55b532cedb432d2.png" alt="La primera versión permitía tanto depositar y retirar como hacer transacciones sin pagar comisión a través de comandos de chat (foto: tmw)" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">La primera versión permitía tanto depositar y retirar como hacer transacciones sin pagar comisión a través de comandos de chat (foto: tmw)</figcaption></figure><p>El siguiente paso fue <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa/blob/master/src/map/script-fun.cpp#L445">habilitar transacciones de Dogecoin a nivel del scripting propio del juego</a>, este fue el reto más grande.</p><p>Los videojuegos con naturaleza compleja como este usualmente están programados en lenguajes de uso general y con librerías orientadas para labores de ingeniería. Esto no es la exepción en TMW, más aún, el motor utilizado va un paso más allá pues está implementado usando C++ y usando únicamente librerías multimedia. Es decir, un ambiente muy seguro y escalable pero súmamente complicado para diseñar niveles, historia, misiones.</p><p>Es por eso que la mayoría de este estilo de juegos crean un nuevo lenguaje de scripting para labores de diseño, aisladas de las minuciosidades de lo que concierne a la arquitectura e ingeniería. Al implementar la interacción con el RPC de bitcoin a nivel de scripting, se abre la posibilidad de enfocarse en la experiencia crypto. Estas fueron las que implementé donde linkeo los scripts respectivos:</p><ol><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa-server-data/blob/master/world/map/npc/doge-1/dogefaucet.txt">La fuente de los deseos</a>: Un faucet que te regalaba 5 doges al día</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa-server-data/blob/master/world/map/npc/doge-1/dogeatm.txt">Doge ATM</a>: Un ATM dentro del juego capaz de hacer transacciones on-chain</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/TheShibeWorld/tmwa-server-data/blob/master/world/map/npc/doge-2/brahdomir.txt">La cueva del PvP</a>: Battle royal donde pagas para participar, el último jugador en pie se lo queda todo</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/677fd16eb5139372ff48a319ab39d8f8ba6479fb6481009233232468e57f2ac4.png" alt="A través del scripting es posible enfocarse en crear NPCs y mapas con lógica crypto" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">A través del scripting es posible enfocarse en crear NPCs y mapas con lógica crypto</figcaption></figure><h2 id="h-recepcion-de-la-comunidad" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Recepción de la comunidad</h2><p>El factor novedad definitivamente fue un factor para atraer usuarios. Pero recuerda que dogecoin pre-elon era muy diferente. No estoy seguro si ya existía crypto twitter en aquellos días pero discord ni había lanzado. Dogecoin tenía una comunidad pequeña mayormente en IRC, luego también en Reddit y algunos foros.</p><p>Encontré <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.reddit.com/r/dogecoin/comments/2opqcm/the_shibe_world_mmo_rpg_that_handles_dogecoins/">este post en reddit</a> y también este video si te llama la atención conocer cómo era la comunidad en aquel entonces. <em>(Nota: qué increíble cringe sentí al volver este video)</em></p><div data-type="youtube" videoId="byqHGQSjRRc">
      <div class="youtube-player" data-id="byqHGQSjRRc" style="background-image: url('https://i.ytimg.com/vi/byqHGQSjRRc/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=byqHGQSjRRc">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><p>Me ponía muy feliz encontrarme ocasionalmente con jugadores probando las funcionalidades de dogecoin que implementé. Aunque debo admitir que me ponía un poco nervioso que, a pesar de mis mensajes de advertencia que el juego estaba en beta y era custodial, los usuarios depositaban considerables sumas de doges.</p><p>Y pues el desenlance de esta historia no es feliz, olvidé pagar el servidor donde estaba hosteado el juego y borraron toda la data, incluído el dinero de los usuarios.</p><p>No tenía backup de la llave privada.</p><p>Expliqué todo lo sucedido en la comunidad y mas bien recibí mucho apoyo y aliento. Pero sin lugar a dudas este incidente fue un factor detractor que me desmotivó de seguir con el proyecto.</p><h2 id="h-si-lo-hiciera-de-nuevo-hoy-como-lo-haria" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Si lo hiciera de nuevo hoy, ¿cómo lo haría?</h2><p>En 10 años mucho ha cambiado, incluída mi vida profesional. Durante este tiempo el desarrollo de juegos para mí pasó de ser un hobby a convertirse en mi carrera donde participé en varios equipos de desarrollo, desde <em>bandas de una sola persona</em> hasta <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=XZxHIo2C5aA">studios AAA</a>. Lo mismo sucedió con web3, que hoy estoy involucarado 100% a nivel profesional como devrel en Scroll la L2, creador de contenido en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/c/Filosof%C3%ADaC%C3%B3digo">mi canal de youtube</a> y desarrollo de shitcoins en las que no me voy a doxxear.</p><p>En este contexto fué que leí este tweet que me motivó a escribir este artículo.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/pablowasserman/status/1804311956867711092">https://x.com/pablowasserman/status/1804311956867711092</a></p><p>La tecnología ha cambiado, yo he cambiado. Si lo hiciera todo de vuelta, ¿cómo lo haría hoy?</p><p><strong>Usar las nuevas funcionalidades de Ethereum</strong></p><p>Ethereum y las L2s son mis favoritas, pero puede ser cualquier blockchain con smart contracts. El punto es que con la tecnología nueva se pueden hacer sistemas con buena experiencia de usuario y self custodial. De esta manera ya no se corre riesgo de que todos pierdan su dinero por no pagar un servidor.</p><p>En web3 hoy podemos apalancarnos de lo siguiente para ofrecer una experiencia novedosa:</p><ul><li><p><em>Account Abstraction</em> puede introducir a los jugadores de una manera sencilla</p></li><li><p><em>La economía de relayers</em> combina AA con intents para generar oprtunidades de generar ingresos y ofrecer a los usuarios la experiencia de interactuar con crypto sin que se den cuenta</p></li><li><p><em>ZK</em> abre la posibilidad de que los usuarios participen en mecánicas de juego divertidas sin sacrificar su soberanía ante un backend web2. Dark forest ha demostrado lo que ya es posible.</p></li><li><p><em>El ecosistema DeFi</em> ya existente puede servir como base y también puede empujar la economía del juego.</p></li></ul><p><strong>De nuevo, forkearía un proyecto open source</strong></p><p>Blockchain todavía es una tecnología muy nueva. En vez de hacer un motor desde cero, volvería a usar un proyecto en funcionamiento para no perder tiempo reinventando la rueda. Así, me enfocaría en las partes que necesitan mayor exploración: la economía, las interacciones on-chain y las facetas sociales y comunitarias.</p><p>El ambiente open source me parece el ídeal para llevar a cabo un proyecto pues comparte muchos valores fundamentales con crypto.</p><p><strong>Estado actual de la cultura web3</strong></p><p>Pienso que blockchain trae inevitablemente cambios sustanciales en la cultura a nivel global. Así que, al momento de construir cualquier proyecto web3 es necesario conectarlo y negociar <em>”qué tan web2 o web3”</em> será.</p><p>Hoy tenemos comunidades crypto, interés a nivel mundial, financiamiento, desarrolladores y proyectos con quienes trabajar en conjunto. Además, el péndulo de <em>“los videojuegos NFT son una estafa”</em> está terminando su cíclo.</p><p>Me parece un buen momento para re-explorar la idea de un MMO crypto.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7a718d4993a8bb8ea49682d404c27833b5a775afa65a17e0ce50546f4f863ebc.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[🐞Emojity Bug Hunt: Win 1ETH! 🕵️‍♂️💰]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/emojity-bug-hunt-win-1eth</link>
            <guid>nz4SDVqwRB7GH7BpynUI</guid>
            <pubDate>Mon, 22 Apr 2024 17:35:10 GMT</pubDate>
            <description><![CDATA[Emojity is an emoji programming language that compiles directly to EVM bytecode. It&apos;s an open-source project under active development managed by Filosofia Codigo and is currently in beta version. Version 0️⃣🤗0️⃣ was recently released, and to celebrate it, 1ETH was made available as a reward to anyone who, through a vulnerability, breaks the contract and manages to obtain the funds stored in a staking contract written in Emojity.What is an Emoji language?Emojity is a programming language...]]></description>
            <content:encoded><![CDATA[<p>Emojity is an emoji programming language that compiles directly to EVM bytecode. It&apos;s an open-source project under active development managed by Filosofia Codigo and is currently in beta version. Version 0️⃣🤗0️⃣ was recently released, and to celebrate it, 1ETH was made available as a reward to anyone who, through a vulnerability, breaks the contract and manages to obtain the funds stored in a staking contract written in Emojity.</p><h1 id="h-what-is-an-emoji-language" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">What is an Emoji language?</h1><p>Emojity is a programming language for writing smart contracts on Ethereum. You can think of Emojity as an alternative to Solidity and Vyper, with the difference being that you write all the logic using only emojis.</p><p><em>Why use Emojity?</em> Emojity is not only a more creative and fun way to write smart contracts but also aims to help <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://defillama.com/languages">diversify Ethereum at language level</a> to make it more resilient.</p><h1 id="h-how-to-win-1-eth" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">How to win 1 ETH?</h1><p>The bug bounty is about breaking a simple staking contract written in Emojity. In that contract I staked 0.5 ETH and only I should be able to withdraw it. However, if you manage to break the contract and obtain the funds through an error (whether at the contract or compiler level), those funds are yours. Furthermore, if you write and publish a post-mortem article explaining in detail how you performed the exploit and how to replicate it, including the code or method used, you&apos;ll earn a prize of 0.5 ETH.</p><p>Currently, I don’t have a development incentive or bug bounty program at the compiler level, but I have open PRs and issues <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Turupawn/emojity">on github</a>, and I will be reviewing all contributions.</p><h1 id="h-everything-you-need-to-get-started" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Everything you need to get started</h1><p>Key links:</p><ul><li><p>Contract address deployed in Scroll Mainnet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x4eb6ffa53ff43eacdcacb8813686f19ac1a97bca">0x4Eb6FFa53Ff43EaCdCAcb8813686F19AC1a97bca</a> (Might change each Solidity version)</p></li><li><p>Emojity <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://emojity.emoji.finance/">Official documentation</a></p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://remojix.emoji.finance/">Remojix</a>, the web compiler</p></li><li><p>Compiler <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Turupawn/emojity">github repo</a> (pull requests and issues welcome!)</p></li></ul><h3 id="h-apendix-a-emojity-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apendix A: Emojity Contract</h3><ul><li><p>🍇 is a state variable. A hashmap that stores each user’s stake balance.</p></li><li><p>🍇🔼 is a function that allows any <code>caller</code> (or sender) 👤 stake ETH by sending it as <code>value</code> 💰.</p></li><li><p>🍇🔽 es a function that returns the caller’s 👤 stake</p></li><li><p>🍇❓ is a view function. Returns the stake of the address sent as parameter 🍓</p></li></ul><pre data-type="codeBlock" text="0️⃣🤗0️⃣

🗺️🍇

🍇🔼📢↩️🔢
🏁
  🍇👤📥🍇👤➕💰
  ↩️1️⃣
🔚

🍇🔽📢↩️🔢
🏁
  🔢🍓
  🍓📥🍇👤
  🍇👤📥0️⃣
  📡👤📍0️⃣💸🍓⛽0️⃣
  ↩️1️⃣
🔚

🍇❓👀#️⃣🍓↩️🔢
🏁
  ↩️🍇🍓
🔚
"><code>0️⃣🤗0️⃣

🗺️🍇

🍇🔼📢↩️🔢
🏁
  🍇👤📥🍇👤➕💰
  ↩️1️⃣
🔚

🍇🔽📢↩️🔢
🏁
  🔢🍓
  🍓📥🍇👤
  🍇👤📥0️⃣
  📡👤📍0️⃣💸🍓⛽0️⃣
  ↩️1️⃣
🔚

🍇❓👀<span class="hljs-comment">#️⃣🍓↩️🔢</span>
🏁
  ↩️🍇🍓
🔚
</code></pre><h3 id="h-apendix-b-equivalent-contract-in-solidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apendix B: Equivalent contract in Solidity</h3><p>Even though the following contract is not equivalent at the bytecode level, it follows the same logic as the contract in the bug bounty. You can use it as a guide to understand the logic.</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract StakingContract {
    mapping(address account =&gt; uint balance) stakeBalance;

    function stake() public payable returns(bool success) {
        stakeBalance[msg.sender] += msg.value;
        return true;
    }

    function unstake() public returns(bool success) {
        uint senderStake = stakeBalance[msg.sender];
        stakeBalance[msg.sender] = 0;
        (bool sent, bytes memory data) = msg.sender.call{value: senderStake}(&quot;&quot;);
        data;
        return sent;
    }

    function getStake(address account) public view returns(uint balance) {
        return stakeBalance[account];
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.19;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">StakingContract</span> </span>{
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> account <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">uint</span> balance) stakeBalance;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">stake</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bool</span> success</span>) </span>{
        stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span>;
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unstake</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bool</span> success</span>) </span>{
        <span class="hljs-keyword">uint</span> senderStake <span class="hljs-operator">=</span> stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>];
        stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        (<span class="hljs-keyword">bool</span> sent, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> data) <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>.<span class="hljs-built_in">call</span>{<span class="hljs-built_in">value</span>: senderStake}(<span class="hljs-string">""</span>);
        data;
        <span class="hljs-keyword">return</span> sent;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStake</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> account</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> balance</span>) </span>{
        <span class="hljs-keyword">return</span> stakeBalance[account];
    }
}
</code></pre><h3 id="h-apendix-c-contracts-compiled-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apendix C: Contract’s compiled contract</h3><pre data-type="codeBlock" text="60FE600D60003960FE6000F3FE6100076100D3565B631DE04896811461002D5763E678FF3781146100585763DBDBA63481146100B957600080FD5B3433600052600060145260346000205401336034526000604852603460342055600160685260206068F35B33602052600060345260346020205460005260003360545260006068526034605420557F00000000000000000000000000000000000000000000000000000000000000006088526000600060046000600051336000F16001608C526020608CF35B600435600052600060145260346000205460345260206034F35B60007C010000000000000000000000000000000000000000000000000000000060003504905090565BFD
"><code></code></pre><h3 id="h-apendix-d-json-abi" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apendix D: JSON ABI</h3><pre data-type="codeBlock" text="[
   {
      &quot;inputs&quot;:[
         
      ],
      &quot;name&quot;:&quot;grapesUpwardsButton&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;nonpayable&quot;,
      &quot;type&quot;:&quot;function&quot;
   },
   {
      &quot;inputs&quot;:[
         
      ],
      &quot;name&quot;:&quot;grapesDownwardsButton&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;nonpayable&quot;,
      &quot;type&quot;:&quot;function&quot;
   },
   {
      &quot;inputs&quot;:[
         {
            &quot;name&quot;:&quot;strawberry&quot;,
            &quot;type&quot;:&quot;address&quot;
         }
      ],
      &quot;name&quot;:&quot;grapesQuestionMark&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;view&quot;,
      &quot;type&quot;:&quot;function&quot;
   }
]
"><code><span class="hljs-selector-attr">[   {      <span class="hljs-string">"inputs"</span>:[               ]</span>,
      "name":<span class="hljs-string">"grapesUpwardsButton"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"nonpayable"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   },
   {
      "inputs":[
         
      ],
      <span class="hljs-string">"name"</span>:<span class="hljs-string">"grapesDownwardsButton"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"nonpayable"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   },
   {
      "inputs":[
         {
            "name":<span class="hljs-string">"strawberry"</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"address"</span>
         }
      ],
      "name":<span class="hljs-string">"grapesQuestionMark"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"view"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   }
]
</code></pre><h3 id="h-apendix-e-solidity-interface" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apendix E: Solidity interface</h3><p>You can use <code>IEmojiContract</code> to interact from Remix, Foundry, Hardhat or from another contract.</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IEmojiContract {
    function grapesUpwardsButton() external returns (uint256);
    function grapesDownwardsButton() external returns (uint256);
    function grapesQuestionMark(address strawberry) external view returns (uint256);
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.20;</span>

<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IEmojiContract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesUpwardsButton</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesDownwardsButton</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesQuestionMark</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> strawberry</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
}
</code></pre><h1 id="h-now-lets-hack" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Now lets hack!</h1>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
        </item>
        <item>
            <title><![CDATA[🐞Caza de Errores Emojity: ¡Gana 1ETH! 🕵️‍♂️💰]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/caza-de-errores-emojity-gana-1eth</link>
            <guid>uDZzS1tiYBV5jnF2xWm5</guid>
            <pubDate>Mon, 22 Apr 2024 17:29:35 GMT</pubDate>
            <description><![CDATA[Emojity es un lenguaje emoji que compila directamente a bytecode de la EVM. Es un proyecto open source en desarrollo activo gestionado por Filosofía Código y se encuentra actualmente en versión beta. La versión 0️⃣🤗0️⃣ fue lanzada recientemente y para celebrarlo se puso a disposición 1 ETH como recompensa a quién, por medio de una vulnerabilidad, rompa el contrato y logre obtener los fondos que están almacenados en un contrato escrito en Emojity.¿Qué es un lenguaje Emoji?Emojity es un lengua...]]></description>
            <content:encoded><![CDATA[<p>Emojity es un lenguaje emoji que compila directamente a bytecode de la EVM. Es un <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Turupawn/emojity">proyecto open source</a> en desarrollo activo gestionado por Filosofía Código y se encuentra actualmente en versión beta. La versión 0️⃣🤗0️⃣ fue lanzada recientemente y para celebrarlo se puso a disposición 1 ETH como recompensa a quién, por medio de una vulnerabilidad, rompa el contrato y logre obtener los fondos que están almacenados en un contrato escrito en Emojity.</p><h1 id="h-que-es-un-lenguaje-emoji" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Qué es un lenguaje Emoji?</h1><p>Emojity es un lenguaje de programación para escribir smart contracts en Ethereum. Puedes pensar en Emojity como una alternativa a Solidity y Vyper, con la diferencia que escribes toda la lógica usando únicamente emojis.</p><p><em>¿Porqué usar Emojity?</em> Emojity no solo es una manera más creativa y divertida de escribir smart contracts, sino que también tiene como misión ayudar a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://defillama.com/languages">diversificar a nivel de lenguaje</a> para que Ethereum sea más resiliente.</p><h1 id="h-como-ganar-1-eth" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Cómo ganar 1 ETH?</h1><p>El contrato en cuestión es un staking simple, donde yo stakíe 0.5 ETH y solo yo debería ser capáz de sacarlo. Ahora bién, si por medio de un error (ya sea a nivel de contrato o de compilador) logras romper el contrato y obtener los fondos, esos fondos son tuyos. Y además, si escribes y publicas un artículo post mortem explicando a detalle y de manera replicable cómo realizaste el exploit, que incluya el código o método utilizado, te ganarás un premio de 0.5 ETH.</p><p>Actualmente no cuento con un programa de incentivos por desarrollo o de bug bounties general a nivel compilador pero tengo los PR e issues abiertos <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Turupawn/emojity">en github</a> y estaré revisando las contribuciones.</p><h1 id="h-todo-lo-que-ocupas-para-empezar" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Todo lo que ocupas para empezar</h1><p>Links clave:</p><ul><li><p>Address del contrato lanzado en Scroll Mainnet: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://scrollscan.com/address/0x4eb6ffa53ff43eacdcacb8813686f19ac1a97bca">0x4Eb6FFa53Ff43EaCdCAcb8813686F19AC1a97bca</a>(Sujeto a cambio cada versión nueva de Emojity)</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://emojity.emoji.finance/">Documentación oficial</a> de Emojity</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://remojix.emoji.finance/">Remojix</a>, el compilador web</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Turupawn/emojity">Repositorio en Github</a> del compilador (¡pull requests e issues bienvenidos!)</p></li></ul><h3 id="h-apendice-a-contrato-en-emojity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apéndice A: Contrato en Emojity</h3><ul><li><p>🍇 es una variable de estado. Un hashmap que almacena el staking de cada usuario.</p></li><li><p>🍇🔼 es una función que permite a cualquier <code>caller</code> (o sender) 👤 stakear ETH enviándolo como <code>value</code> 💰.</p></li><li><p>🍇🔽 es una función que devuelve el staking que el caller 👤</p></li><li><p>🍇❓ es una función tipo view. Devuelve el staking del address enviado como párametro 🍓</p></li></ul><pre data-type="codeBlock" text="0️⃣🤗0️⃣

🗺️🍇

🍇🔼📢↩️🔢
🏁
  🍇👤📥🍇👤➕💰
  ↩️1️⃣
🔚

🍇🔽📢↩️🔢
🏁
  🔢🍓
  🍓📥🍇👤
  🍇👤📥0️⃣
  📡👤📍0️⃣💸🍓⛽0️⃣
  ↩️1️⃣
🔚

🍇❓👀#️⃣🍓↩️🔢
🏁
  ↩️🍇🍓
🔚
"><code>0️⃣🤗0️⃣

🗺️🍇

🍇🔼📢↩️🔢
🏁
  🍇👤📥🍇👤➕💰
  ↩️1️⃣
🔚

🍇🔽📢↩️🔢
🏁
  🔢🍓
  🍓📥🍇👤
  🍇👤📥0️⃣
  📡👤📍0️⃣💸🍓⛽0️⃣
  ↩️1️⃣
🔚

🍇❓👀<span class="hljs-comment">#️⃣🍓↩️🔢</span>
🏁
  ↩️🍇🍓
🔚
</code></pre><h3 id="h-apendice-b-contrato-equivalente-en-solidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apéndice B: Contrato equivalente en Solidity</h3><p>A pesar que el siguiente contrato no es equivalente a nivel de bytecode, sigue la misma lógica que el contrato en del bug bounty. Puedes usarlo para guiarte y entender la lógica.</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract StakingContract {
    mapping(address account =&gt; uint balance) stakeBalance;

    function stake() public payable returns(bool success) {
        stakeBalance[msg.sender] += msg.value;
        return true;
    }

    function unstake() public returns(bool success) {
        uint senderStake = stakeBalance[msg.sender];
        stakeBalance[msg.sender] = 0;
        (bool sent, bytes memory data) = msg.sender.call{value: senderStake}(&quot;&quot;);
        data;
        return sent;
    }

    function getStake(address account) public view returns(uint balance) {
        return stakeBalance[account];
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.19;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">StakingContract</span> </span>{
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> account <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">uint</span> balance) stakeBalance;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">stake</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bool</span> success</span>) </span>{
        stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span>;
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unstake</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bool</span> success</span>) </span>{
        <span class="hljs-keyword">uint</span> senderStake <span class="hljs-operator">=</span> stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>];
        stakeBalance[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        (<span class="hljs-keyword">bool</span> sent, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> data) <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>.<span class="hljs-built_in">call</span>{<span class="hljs-built_in">value</span>: senderStake}(<span class="hljs-string">""</span>);
        data;
        <span class="hljs-keyword">return</span> sent;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStake</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> account</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> balance</span>) </span>{
        <span class="hljs-keyword">return</span> stakeBalance[account];
    }
}
</code></pre><h3 id="h-apendice-c-contrato-compilado-en-bytecode" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apéndice C: Contrato compilado en Bytecode</h3><pre data-type="codeBlock" text="60FE600D60003960FE6000F3FE6100076100D3565B631DE04896811461002D5763E678FF3781146100585763DBDBA63481146100B957600080FD5B3433600052600060145260346000205401336034526000604852603460342055600160685260206068F35B33602052600060345260346020205460005260003360545260006068526034605420557F00000000000000000000000000000000000000000000000000000000000000006088526000600060046000600051336000F16001608C526020608CF35B600435600052600060145260346000205460345260206034F35B60007C010000000000000000000000000000000000000000000000000000000060003504905090565BFD
"><code></code></pre><h3 id="h-apendice-d-json-abi" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apéndice D: JSON ABI</h3><pre data-type="codeBlock" text="[
   {
      &quot;inputs&quot;:[
         
      ],
      &quot;name&quot;:&quot;grapesUpwardsButton&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;nonpayable&quot;,
      &quot;type&quot;:&quot;function&quot;
   },
   {
      &quot;inputs&quot;:[
         
      ],
      &quot;name&quot;:&quot;grapesDownwardsButton&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;nonpayable&quot;,
      &quot;type&quot;:&quot;function&quot;
   },
   {
      &quot;inputs&quot;:[
         {
            &quot;name&quot;:&quot;strawberry&quot;,
            &quot;type&quot;:&quot;address&quot;
         }
      ],
      &quot;name&quot;:&quot;grapesQuestionMark&quot;,
      &quot;outputs&quot;:[
         {
            &quot;internalType&quot;:&quot;uint256&quot;,
            &quot;name&quot;:&quot;&quot;,
            &quot;type&quot;:&quot;uint256&quot;
         }
      ],
      &quot;stateMutability&quot;:&quot;view&quot;,
      &quot;type&quot;:&quot;function&quot;
   }
]
"><code><span class="hljs-selector-attr">[   {      <span class="hljs-string">"inputs"</span>:[               ]</span>,
      "name":<span class="hljs-string">"grapesUpwardsButton"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"nonpayable"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   },
   {
      "inputs":[
         
      ],
      <span class="hljs-string">"name"</span>:<span class="hljs-string">"grapesDownwardsButton"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"nonpayable"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   },
   {
      "inputs":[
         {
            "name":<span class="hljs-string">"strawberry"</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"address"</span>
         }
      ],
      "name":<span class="hljs-string">"grapesQuestionMark"</span>,
      <span class="hljs-string">"outputs"</span>:[
         {
            "internalType":<span class="hljs-string">"uint256"</span>,
            <span class="hljs-string">"name"</span>:<span class="hljs-string">""</span>,
            <span class="hljs-string">"type"</span>:<span class="hljs-string">"uint256"</span>
         }
      ],
      "stateMutability":<span class="hljs-string">"view"</span>,
      <span class="hljs-string">"type"</span>:<span class="hljs-string">"function"</span>
   }
]
</code></pre><h3 id="h-apendice-e-interfaz-en-solidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Apéndice E: Interfaz en Solidity</h3><p>Puedes usar <code>IEmojiContract</code> para interactuar desde Remix, Foundry, Hardhat u otro contrato.</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IEmojiContract {
    function grapesUpwardsButton() external returns (uint256);
    function grapesDownwardsButton() external returns (uint256);
    function grapesQuestionMark(address strawberry) external view returns (uint256);
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.20;</span>

<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IEmojiContract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesUpwardsButton</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesDownwardsButton</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">grapesQuestionMark</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> strawberry</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
}
</code></pre><h1 id="h-animo-y-a-hackear" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¡Ánimo, y a hackear!</h1>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
        </item>
        <item>
            <title><![CDATA[Reto Web3: Escribe artículos y gana bounties]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/reto-web3-escribe-art-culos-y-gana-bounties</link>
            <guid>Yb6ldPStArRSCBmYg9Qd</guid>
            <pubDate>Wed, 10 Apr 2024 16:27:29 GMT</pubDate>
            <description><![CDATA[ℹ️ El 7 de Mayo es la entrega de artículos, puedes hacerlo en este form. Esta competencia se lleva a cabo por parte de Filosofía Código, creador de contenido para desarrolladores en web a través de videos en youtube y artículos. Donde se ponen a disposición 1500$ en stablecoins repartidos en bounties específicos para desarrolladores que quieran compartir sus conocimientos con el resto de la comunidad web3. Esto es posible gracias a la confianza que se ha prestado en Filosofía Código a través ...]]></description>
            <content:encoded><![CDATA[<p><em>ℹ️ El 7 de Mayo es la entrega de artículos, puedes hacerlo en </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLSc4_RCOqjZZbspeb8bDThaAIsCk_gBA_ml7-awme8utPFz8xA/viewform"><em>este form</em></a><em>.</em></p><p>Esta competencia se lleva a cabo por parte de Filosofía Código, creador de contenido para desarrolladores en web a través de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/@FilosofiaCodigo/">videos en youtube</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn">artículos</a>. Donde se ponen a disposición 1500$ en stablecoins repartidos en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/orgs/FilosofiaCodigo/projects/3/views/2?filterQuery=-status%3A%F0%9F%92%A1Ideas%2C%22%F0%9F%93%9C+Article+Published%22%2C%22%F0%9F%94%B4+Video+Published%22%2C%22%F0%9F%93%9C+Art%C3%ADculo+Publicado%22%2C%22%F0%9F%94%B4+Video+Publicado%22">bounties específicos</a> para desarrolladores que quieran compartir sus conocimientos con el resto de la comunidad web3. Esto es posible gracias a la confianza que se ha prestado en Filosofía Código a través de las rondas de financiamiento cuadrático de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://qf.ethlatam.org/#/">ETH Latam</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://grants.ethereumtgu.com/#/projects">Ethereum Honduras</a>.</p><h1 id="h-hacia-quien-va-dirigida-esta-iniciativa" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Hacia quién va dirigida esta iniciativa?</h1><p>Desarrolladores con conocimientos previos en web3. Con deseos de aprender y compartir sobre tecnologías con mucho potencial en etapas iniciales. Específicamente en temas de data availability, zero knowledge, inteligencia artificial, criptografía aplicada y stacks de L2s.</p><h1 id="h-mecanicas-de-la-competencia" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Mecánicas de la competencia</h1><p><strong><em>1.</em></strong> Elige un tema marcado como “🙏 Ayuda bienvenida” en mi <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/orgs/FilosofiaCodigo/projects/3">Pipeline de Github</a>. Dentro de cada tarjeta se encuentran los detalles sobre lo que se espera de cada artículo.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/47387e79cae2f21a45be8de40e6f73188bafb88b1545a5dac975f78da5554cd7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>2.</em></strong> (Opcional) Avisa el tema en el que estás trabajando en <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/V48cZUDVvH">el discord de Filosofia Código</a> en el canal de <code>#🎯reto-web3</code> para recibir soporte, ayuda, feedback de manera abierta.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f816985d1a4c994867f3d6dd41b760b4c1090035ff6dfb24866e17eff4f9a04e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong><em>3.</em></strong> Entrega el artículo antes del 7 de mayo en <code>mirror.xyz</code> a través de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLSc4_RCOqjZZbspeb8bDThaAIsCk_gBA_ml7-awme8utPFz8xA/viewform">este form</a>. Los ganadores se anunciarán por mi twitter (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/FilosofiaCodigo">@FilosofiaCodigo</a>) el 14 de mayo.</p><p><strong><em>4.</em></strong> Una vez concluida la competencia se repartirán los bounties y usaré los mejores artículos para realizar videos en el canal de Youtube. Si el escritor desea participar en el video ¡también será bienvenido! También me reservo el derecho a no otorgar un premio si no hubo un artículo que no siguió las reglas o que considere que no cumpla con un estándar de calidad mínima.</p><p><strong><em>5.</em></strong> El artículo debe estar en Español, estilo tutorial y siguiendo el formato que explico a continuación.</p><h1 id="h-formato-del-articulo" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Formato del artículo</h1><p>El artículo deberá seguir el siguiente formato:</p><pre data-type="codeBlock" text="Uno o dos párrafos que den contexto de la tecnología
  * Qué es
  * Porqué es importante
  * Quizás un poco de historia, quiénes la usan, o números que le den validez
  * Link a repo completo en github en caso que exista

# Establece el entorno de desarrollo

Todo lo que se ocupa instalar para llevar a cabo el tutorial

# 1. Desarrollo del tutorial

...

# 2. Paso a paso

...

# 3. Punto por punto

...

# ¿Qué sigue?

Una área para concluir y motivar a al lector a seguir experimentando y aprendiendo. Puedes agregar cualquiera de los puntos a continuación.

* Links a documentación oficial
* Un ejemplo más avanzado
* Tu opinión personal sobre la tecnología
* El futuro que ves sobre la tecnología
"><code>Uno o dos párrafos que den contexto de la tecnología
  <span class="hljs-operator">*</span> Qué es
  <span class="hljs-operator">*</span> Porqué es importante
  <span class="hljs-operator">*</span> Quizás un poco de historia, quiénes la usan, o números que le den validez
  <span class="hljs-operator">*</span> Link a repo completo en github en caso que exista

# Establece el entorno de desarrollo

Todo lo que se ocupa instalar para llevar a cabo el tutorial

# <span class="hljs-number">1.</span> Desarrollo del tutorial

...

# <span class="hljs-number">2.</span> Paso a paso

...

# <span class="hljs-number">3.</span> Punto por punto

...

# ¿Qué sigue?

Una área para concluir y motivar a al lector a seguir experimentando y aprendiendo. Puedes agregar cualquiera de los puntos a continuación.

* Links a documentación oficial
<span class="hljs-operator">*</span> Un ejemplo más avanzado
<span class="hljs-operator">*</span> Tu opinión personal sobre la tecnología
<span class="hljs-operator">*</span> El futuro que ves sobre la tecnología
</code></pre><p>Puedes observar <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/eigenda-empieza-a-desarrollar-en-blobs-hoy-gdl">este artículo</a> como referencia. Y siéntete libre de experimentar y cambiar el formato si te hace sentido.</p><h1 id="h-repasos-y-conocimientos-previos" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Repasos y conocimientos previos</h1><p>Las temáticas del pipeline contienen Zero Knowledge, OP Stack y Data Aavailability. Te recomiendo reforzar tus conocimientos con mi lista de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://shade-octave-2bc.notion.site/db58b87fd91e436094fd0b01419c55e3?v=7d48e73c89194b19945dd102a6cf52be&amp;pvs=4">recursos recomendados</a>, o con contenido en el que yo he participado a continuación.</p><h3 id="h-workshops-sobre-el-op-stack" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Workshops sobre el OP Stack</h3><div data-type="youtube" videoId="VL79L8bGtbI">
      <div class="youtube-player" data-id="VL79L8bGtbI" style="background-image: url('https://i.ytimg.com/vi/VL79L8bGtbI/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=VL79L8bGtbI">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h3 id="h-workshops-sobre-zk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Workshops sobre ZK</h3><div data-type="youtube" videoId="dSlhXtvgbI8">
      <div class="youtube-player" data-id="dSlhXtvgbI8" style="background-image: url('https://i.ytimg.com/vi/dSlhXtvgbI8/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=dSlhXtvgbI8">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h3 id="h-blogpost-sobre-eigen-layer-da" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Blogpost sobre Eigen Layer DA</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dev.to/turupawn/eigenda-empieza-a-desarrollar-en-blobs-hoy-gdl">https://dev.to/turupawn/eigenda-empieza-a-desarrollar-en-blobs-hoy-gdl</a></p><h3 id="h-eres-principiante-en-web3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">¿Eres principiante en Web3?</h3><p>Inicia con este bootcamp en español.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chain.link/es/bootcamp">https://chain.link/es/bootcamp</a></p><p>O con este video que resume Solidity.</p><div data-type="youtube" videoId="SAQ5Cvt_ePg">
      <div class="youtube-player" data-id="SAQ5Cvt_ePg" style="background-image: url('https://i.ytimg.com/vi/SAQ5Cvt_ePg/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=SAQ5Cvt_ePg">
          <img src="{{DOMAIN}}/editor/youtube/play.png" class="play"/>
        </a>
      </div></div><h1 id="h-animo-y-a-hackear" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¡Ánimo y a hackear!</h1>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
        </item>
        <item>
            <title><![CDATA[Los NFTs y la Democratización del Arte]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/los-nfts-y-la-democratizaci-n-del-arte</link>
            <guid>xiOSD9UEF6Z63DECJk3W</guid>
            <pubDate>Sun, 06 Aug 2023 23:08:31 GMT</pubDate>
            <description><![CDATA[Las épocas de grandes cambios culturales conllevan transformaciones significativas en el significado y la accesibilidad del arte. En este artículo, nos enfocamos en el blockchain como una nueva revolución cultural y exploramos cómo esta tecnología aporta nuevas cualidades al arte, brindando una oportunidad sin precedentes para democratizarlo.El arte en la era industrialAntes de adentrarnos en web3 y Ethereum como plataformas para el arte, me gustaría estudiar el arte en la era industrial. Lue...]]></description>
            <content:encoded><![CDATA[<p>Las épocas de grandes cambios culturales conllevan transformaciones significativas en el significado y la accesibilidad del arte. En este artículo, nos enfocamos en el blockchain como una nueva revolución cultural y exploramos cómo esta tecnología aporta nuevas cualidades al arte, brindando una oportunidad sin precedentes para democratizarlo.</p><h1 id="h-el-arte-en-la-era-industrial" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">El arte en la era industrial</h1><p>Antes de adentrarnos en web3 y Ethereum como plataformas para el arte, me gustaría estudiar el arte en la era industrial. Luego, compararemos estas experiencias con las nuevas oportunidades que ofrece web3.</p><p>Examinemos esfuerzos concretos que democratizaron el arte gracias a los avances de la época industrial, destacando ejemplos en la arquitectura, el diseño de interiores y el mobiliario.</p><h3 id="h-en-arquitectura" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">En arquitectura</h3><p>El Art Decó en la arquitectura logró combinar las cualidades expresionistas del Art Nouveau con los avances tecnológicos de la industrialización. Este estilo ha dado la oportunidad a numerosas personas de habitar y trabajar en edificios que expresan el optimismo y progreso de la época moderna. Los arquitectos del Art Decó se esfuerzan por crear fachadas e interiores agradables y llenos de significado, todo ello ahora es posible con un menor presupuesto gracias a las innovaciones de las máquinas de la época industrial.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8ba36764ac88030a4b2c78dfb23355a878fa217bdf5ee7b580a7559e059f47cf.jpg" alt="Edificios estilo Art Decó en NYC cumpliendo diferentes propósitos" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Edificios estilo Art Decó en NYC cumpliendo diferentes propósitos</figcaption></figure><h3 id="h-en-diseno-de-interiores" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">En diseño de interiores</h3><p>Admiro mucho a Charlotte Perriand, una destacada diseñadora de interiores cuyo enfoque era hacer que una vida hogareña digna fuera accesible para todos y optimizar los espacios reducidos. Su creatividad se reflejaba en diseños de hogares pequeños que permitían a los niños correr y jugar cómodamente dentro de sus casas. Además, sus diseños facilitaban la conexión entre aquellos que estaban cocinando o realizando sus quehaceres con sus familias o huéspedes, fomentando un ambiente acogedor y funcional.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5eba58e503f36175ba900addd764918844a41f0e230bec2810ad632c39a65d7b.png" alt="Sketch de Interior de apartamento, Charlotte Perriand 1929" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Sketch de Interior de apartamento, Charlotte Perriand 1929</figcaption></figure><h3 id="h-en-mobiliario" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">En mobiliario</h3><p>Herman Miller es un claro ejemplo del impacto de la revolución industrial en el mobiliario. Desde su fundación en los años 20, se ha destacado por ofrecer muebles y sillas ergonómicas con diseños expresivos, siempre dentro del ámbito de lo producible en masa. Entre sus creaciones, destaca la icónica silla Aeron, que aún hoy es exhibida en numerosos museos y exposiciones de arte moderno. Herman Miller es una empresa que aún continúa funcionando y es un ejemplo de cómo la combinación de funcionalidad y estética pudo llegar a más personas con la llegada de la producción en masa.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3def64441a5063564e05dc1560cba23cb05f2e5b39ad3572be8cf50fc12fbfe3.jpg" alt="Aeron, Silla de Herman Miller en una exposición de diseño" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Aeron, Silla de Herman Miller en una exposición de diseño</figcaption></figure><h1 id="h-las-cualidades-nuevas-de-los-nfts" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Las cualidades nuevas de los NFTs</h1><p>Tanto la época industrial como web3 comparten la similitud de introducir una nueva tecnología capaz de democratizar el arte. ¿Qué nuevas características brinda Ethereum al arte?</p><h3 id="h-mayor-accesibilidad" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Mayor Accesibilidad</h3><p>El arte como medio de expresión ya no está limitado a un espacio físico, ahora se encuentra ampliamente disponible en internet. A través de NFTs de arte digital, música, blogs, POAPs, etc., podemos expresar nuestra individualidad de manera abierta y accesible.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ee34909efbe0ec131e8d57bbf4d4ea9becc9bfdd50a3f2ca871a283caf7a3269.jpg" alt="Mis POAPs disponibles 24/7 on-chain" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Mis POAPs disponibles 24/7 on-chain</figcaption></figure><h3 id="h-cuidado-con-el-medio-ambiente" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Cuidado con el medio ambiente</h3><p>Durante la era industrial, se produjo una acelerada destrucción del medio ambiente, y las consecuencias seguirán afectándonos por mucho tiempo. Ethereum ha tomado en cuenta esto y ha implementado cambios en su protocolo para reducir el consumo energético a través de la transición a PoS (prueba de participación). A diferencia de PoW (prueba de trabajo), PoS no implica una competencia, solo consume la energía necesaria para garantizar la seguridad de la red. Esto significa que ahora podemos escalar nuestro arte y llegar a más personas sin preocuparnos por causar daños adicionales al medio ambiente.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0af0eb18ea463ecc4a2eee2788163553b4f7a2d59527a91c16e8d665907c4705.webp" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-utilidad-arte" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Utilidad + Arte</h3><p>Así como la industrialización llevó el arte a la vida cotidiana a través de la arquitectura, los interiores y el mobiliario, los NFTs también traen utilidades en el ámbito digital. Estas utilidades pueden extenderse a nivel de criptomonedas (DeFi), gobernanza, propiedad (ENS, Decentraland) y más. Un ejemplo es el uso de NFTs como representación de las pools de liquidez concentradas en Uniswap V3 utilizando el estándar ERC721.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/965e7aa0be7f3ffe5668b7936d77cbdd20f59f5c7be75042090f334f6a708244.png" alt="NFTs de las pools de liquidez concentrada de Uniswap V3" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">NFTs de las pools de liquidez concentrada de Uniswap V3</figcaption></figure><p>En el futuro, podríamos ver la aplicación de NFTs en otras utilidades, como la identidad (cédula, pasaporte), la propiedad privada (casas, carros), boletos de transporte (bus, avión) o conciertos, entre otros.</p><p>La idea de añadir componentes artísticos a estos NFTs de utilidad surge como una forma creativa de enriquecer y personalizar estas utilidades digitales. Agregar elementos artísticos a estos NFTs puede dotarlos de un valor estético y emocional adicional, haciéndolos más atractivos y memorables para sus propietarios y usuarios. Además, esta fusión entre utilidad y arte podría abrir nuevas posibilidades para la expresión creativa y difusión de ideas.</p><h1 id="h-cual-es-el-futuro-del-arte-en-web3" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Cuál es el futuro del arte en Web3?</h1><p>La época industrial y el surgimiento de web3 comparten similitudes notables al introducir nuevas tecnologías que hacen posible cambios sociales significativos. Podemos utilizar esta relación como un caso de estudio para anticiparnos a las oportunidades que web3 nos puede ofrecer.</p><p>Es esencial tener en cuenta que Ethereum es una tecnología que da lugar a muchos experimentos novedosos. Por lo tanto, debemos permanecer vigilantes ante los posibles fracasos y buscar constantemente formas de corregir y mejorar. Un ejemplo moderno es la invención del cubículo, también creado por Herman Miller, que originalmente buscaba proporcionar a los empleados mayor libertad en su trabajo, pero con el tiempo, tuvo un efecto contrario.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0f0366001f7f2e5d04488099f85effe524bf7c7fe262054fe13244ff4a6f6735.png" alt="Izquierda: Cubículos estilo Action Office (1960&apos;s) Derecha: Cubículos de Amazon hoy" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Izquierda: Cubículos estilo Action Office (1960&apos;s) Derecha: Cubículos de Amazon hoy</figcaption></figure><p>Los NFTs como tecnología han llegado para quedarse. Han tenido una amplia adopción y han servido como plataforma para introducir el arte en el blockchain. A pesar de eso, considero que aún estamos en etapas tempranas y nos queda mucho por descubrir.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dbdac690a17cf797b7867079faa7cf77214f3ab226f26d5b8ef5f58aebf333b9.png" alt="Los NFTs representan una cantidad bastante significativa de las transacciones en Ethereum" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Los NFTs representan una cantidad bastante significativa de las transacciones en Ethereum</figcaption></figure><p>El arte es un pilar fundamental en cualquier cambio cultural, y el blockchain no es una excepción. Se encuentra en un nivel de importancia equiparable a la tecnología, filosofía y economía, ya que es la herramienta que nos permite expresarnos y explorar todo lo nuevo que está por venir. A través del arte, podemos comunicar lo que la ciencia no puede capturar, lo que lo convierte en una fuerza vital en el ecosistema de Ethereum.</p><p>Les invito a mirar hacia el pasado, a la época industrial y más atrás, para tener una mejor perspectiva del futuro del arte en el blockchain. Potenciar sus oportunidades y no cometer los mismos errores.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0031a0961f50573a21031dd44fdc18ab32992828e1dff13a00d14c48c23e9eeb.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[En Defensa de las Shitcoins]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/en-defensa-de-las-shitcoins</link>
            <guid>bcgasSeNoHNYvA8erBYw</guid>
            <pubDate>Sun, 28 May 2023 21:13:04 GMT</pubDate>
            <description><![CDATA[A menudo escuchamos la narrativa de que las shitcoins son simplemente estafas, y que debemos mantenernos alejados de ellas, ya que solo traen consecuencias negativas tanto para sus usuarios como para el ecosistema de Ethereum. Sin embargo, creo que hay más aspectos a considerar en esta historia. En este artículo, me gustaría compartir por qué es importante arrojar luz sobre lo que realmente representan las shitcoins, ya que esto nos permitirá fortalecer la cultura de Ethereum. Espero poder br...]]></description>
            <content:encoded><![CDATA[<p>A menudo escuchamos la narrativa de que las shitcoins son simplemente estafas, y que debemos mantenernos alejados de ellas, ya que solo traen consecuencias negativas tanto para sus usuarios como para el ecosistema de Ethereum. Sin embargo, creo que hay más aspectos a considerar en esta historia.</p><p>En este artículo, me gustaría compartir por qué es importante arrojar luz sobre lo que realmente representan las shitcoins, ya que esto nos permitirá fortalecer la cultura de Ethereum. Espero poder brindarles una perspectiva equilibrada, ya que he tenido experiencias muy diversas en el mundo web3. He recibido apoyo de organizaciones reconocidas, como la Ethereum Foundation y los RetroPFG de Optimism. Actualmente, también trabajo en Scroll, otro proyecto destacado. Sin embargo, también he participado desarrollando y contribuyendo en los ecosistemas más shit y degenerados que se puedan imaginar.</p><h1 id="h-que-hace-shit-a-una-shitcoin" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">¿Qué hace “shit” a una Shitcoin?</h1><p>Muchos dirán que las shitcoins atraen a los degens nihilistas, adictos a la dopamina y a las apuestas. Y honestamente, estoy de acuerdo con eso. Al entrar en cualquier grupo de telegram de algún token degenerado podemos observar el comportamiento usual de muchos de los holders.</p><p>Además, es común escuchar críticas sobre la falta de sostenibilidad de mecanismos como el Liquidity Farming. Se argumenta que estas economías, o más bien &quot;ponzynomics&quot;, solo benefician a los primeros compradores y promueven una mentalidad individualista e hiper-capitalista. Personalmente, también estoy de acuerdo con estas preocupaciones.</p><p>También es válido señalar que las &quot;shitcoins&quot; a menudo desvían la atención y la liquidez de los avances significativos en áreas importantes, como ZK, Public Goods, Sharding, entre otros.</p><p>Considero que es importante seguir resaltando estos aspectos negativos de las shitcoins. Esto nos permitirá proteger a los nuevos usuarios de caer en estafas y nos brinda la oportunidad de participar en estos proyectos con pleno conocimiento de los riesgos y las implicaciones negativas que conllevan.</p><h1 id="h-entonces-es-malo-el-liquidity-farming" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Entonces, ¿es malo el Liquidity Farming?</h1><p>No en su totalidad.</p><p>A pesar de los riesgos conocidos, atraen a muchos usuarios. Esto puede ser debido a que son protocolos altamente interactivos, brindan un sentido de comunidad y permiten a los usuarios controlar sus activos de manera transparente a través del código en los contratos inteligentes.</p><p>Además, las shitcoins representan una forma fresca de expresar la incomodidad con los sistemas económicos actuales. Son una crítica y una sátira. Al comprar y vender estas monedas, estamos expresando nuestro descontento con el sistema monetario tradicional y mostrando nuestro interés en experimentar con modelos alternativos.</p><p>El aspecto positivo de las shitcoins que encuentro más interesante es su contribución a la innovación. Esto se debe a que el ambiente libre de expectativas y de rigidez que proveen las shitcoins es ideal para la innovación. Es difícil tomar en serio proyectos como &quot;Floki Inu&quot;, &quot;HarryPotterObamaSonicInu (ticker: BITCOIN)&quot; o colecciones de NFT como “Just Bricks”, esto brinda la oportunidad a los creadores de experimentar con las ideas más locas. Esto es importante porque la innovación que surge en estos entornos puede servir como base para proyectos que realmente ofrecen utilidad a largo plazo. Un ejemplo de esto es Lido, un proyecto revolucionario que actualmente brinda una gran utilidad y que utiliza tecnologías de rebase que se probaron en proyectos extremadamente degenerados como Safemoon.</p><h1 id="h-en-conclusion" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">En conclusión</h1><p>Es importante ver las shitcoins desde diferentes ángulos y reconocer que no son inherentemente buenas ni malas, sino una combinación de ambas. Esta perspectiva nos permite encontrar un equilibrio en el futuro del ecosistema y en los proyectos en los que decidamos participar.</p><p>Es importante aplicar esta mentalidad no solo a las shitcoins, sino también a otros temas complejos dentro de web3, como el MEV (extracción de valor en las transacciones), PoS (prueba de participación) vs PoW (prueba de trabajo), L2 (capa 2) vs Appchains (cadenas de aplicaciones), entre otros.</p><p>Al abordar estos temas con una mirada equilibrada, podemos comprender mejor las diversas perspectivas y considerar los beneficios y los desafíos que cada enfoque conlleva. Esto nos permite tomar decisiones más informadas y trabajar hacia soluciones que promuevan un ecosistema web3 más sólido y sostenible en el futuro.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bd315a609ef0634c2c5bc89c87d16cc82a1e33c77e3e19630c34879651d60074.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[3 Principios para Escribir Guías que Inspiran]]></title>
            <link>https://paragraph.com/@filosofiacodigo-2/3-principios-para-escribir-gu-as-que-inspiran</link>
            <guid>n2uundKyUUvIgPiN4Ook</guid>
            <pubDate>Sat, 13 May 2023 18:12:23 GMT</pubDate>
            <description><![CDATA[Web3 avanza a gran velocidad, mucho más rápido de lo que podemos crear contenido educativo para incorporar a nuevos desarrolladores. En los últimos años, me he dedicado a producir videos, blogs, lives y spaces en mi canal de YouTube, colaborando con actores como Scroll, Aztec, Layer2es y Kipu. Crear contenido técnico para desarrolladores en nuevas tecnologías no es una tarea sencilla, pero poco a poco he descubierto algunos principios que logran despertar interés y curiosidad en los desarroll...]]></description>
            <content:encoded><![CDATA[<p>Web3 avanza a gran velocidad, mucho más rápido de lo que podemos crear contenido educativo para incorporar a nuevos desarrolladores. En los últimos años, me he dedicado a producir videos, blogs, lives y spaces en mi canal de <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/@FilosofiaCodigo/videos">YouTube</a>, colaborando con actores como <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://guide.scroll.io/developers/verifying-smart-contracts">Scroll</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/noir-lang/noir-starter/tree/main/foundry-voting">Aztec</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Layer2es/status/1594774397004681216">Layer2es</a> y <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/EthKipu/status/1657107827876417547">Kipu</a>. Crear contenido técnico para desarrolladores en nuevas tecnologías no es una tarea sencilla, pero poco a poco he descubierto algunos principios que logran despertar interés y curiosidad en los desarrolladores. A continuación, comparto cómo crear contenido que inspire a creadores:</p><h1 id="h-1-autenticidad" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. Autenticidad</h1><p>La regla número uno para crear contenido que inspire a los demás es sentirnos nosotros mismos inspirados por el tema. Ya sea a través de videos, textos u otros formatos, el receptor se verá influenciado por nuestro propio entusiasmo. No podemos evitar esto de manera sostenible a largo plazo.</p><p>Este aspecto no debe tomarse a la ligera, porque implica encontrar un equilibrio entre nuestra pasión personal, la búsqueda de una audiencia y un modelo económico sustentable en caso que se busque hacerlo de manera profesional. En América Latina, este desafío es más notable debido a las limitadas oportunidades económicas. En la mayoría de las ocasiones, debemos aceptar que tendremos que trabajar más en condiciones menos favorables que en los países del primer mundo. Lo importante es indagar profundo en cuáles son nuestros intereses y entender porqué conectamos más con ellos. Una vez hecho esto, buscar cuales combinan mejor con posibles audiencias e intentarlo varias veces y no desanimarse en el proceso.</p><h1 id="h-2-consideraciones-culturales" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. Consideraciones culturales</h1><p>Detrás de cada proyecto y comunidad existe una cultura única. Si has enviado pull requests en Github, habrás notado que cada repositorio tiene sus propias reglas, ya sean implícitas o explícitas. Estas reglas abarcan diferentes aspectos, como protocolos de revisión, automatización, expectativas de orden, estructura y optimización del código. Lo mismo ocurre al escribir contenido, donde el tema y la audiencia afectan el formato, densidad y lenguaje utilizados. Por ejemplo, la presentación de un nuevo protocolo de criptografía podría requerir un lenguaje académico y adaptarse mejor a un formato de blog. Por otro lado, un taller introductorio de Solidity podría ser más adecuado para un livestream, permitiendo a los participantes ver el proceso de manera gráfica y realizar preguntas en el momento si surgen problemas.</p><p>Considero que es importante mostrar un nivel de respeto hacia las culturas preexistentes. Si viajo al este de Asia, debería utilizar el saludo asiático, al igual que esperaría que los asiáticos me saluden dándome la mano o con un abrazo al visitar América Latina. Sin embargo, esto no significa que el formato sea totalmente rígido. Está muy bien plasmar nuestra personalidad y experimentar con nuevas formas de presentar contenido, siempre y cuando valoremos la identidad de nuestra audiencia.</p><h1 id="h-3-guias-parcialmente-completas" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. Guías “Parcialmente Completas”</h1><p>El tipo de contenido que se me dá más es la creación de guías estilo tutorial. En este tipo de contenido prefiero presentar casos de uso que sean lo suficientemente grandes para que la audiencia se sienta motivada a dedicarle tiempo en aprender. Por ejemplo, &quot;Cómo lanzar un Token ERC20 paso a paso&quot; o &quot;Replicando Tornado Cash desde cero&quot;. Este tipo de contenido conecta bien con aquellos que han utilizado previamente este tipo de proyectos o que tienen conocimientos sobre su funcionamiento. Es importante ofrecerles una forma rápida y sencilla de reproducir y ejecutar el código, para que puedan tener una experiencia inicial sin demasiados inconvenientes. A menudo, esto implica eliminar la mayoría de las funcionalidades para enfocarse en demostrar la parte más importante de los proyectos.</p><p>No solo se debe ofrecer un demo que la audiencia pueda probar, sino que también estimule la imaginación. Esto se puede lograr de dos maneras. Primero, haciendo guías sobre tecnología que se integre con otras tecnologías o con conocimientos previos de la audiencia. El blockchain al ser un protocolo abierto es muy propicio para esto. Segundo, dejando intencionalmente ciertos puntos incompletos o deficientes, para que la audiencia sienta el deseo de completarlos utilizando sus habilidades e imaginación. Por ejemplo, puede tratarse de una dApp con un frontend con una experiencia de usuario deficiente, o tal vez un smart contract que no esté optimizado. Es importante hacerlo de manera evidente, para que los nuevos desarrolladores no consideren todo el contenido como un estándar de calidad.</p><p>Gracias por leer este post. Puedes encontrar más sobre mi trabajo en mi <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linktr.ee/filosofiacodigo">linktree</a>.</p>]]></content:encoded>
            <author>filosofiacodigo-2@newsletter.paragraph.com (Filosofía Código)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d335587c0e4c409cf079654e4f972b7e81599667c85e2646c197aac434a7529c.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>