👀 Anatomía de una DAO: Construyendo el Club Argentino de Tecnología

👀 Anatomía de una DAO: Construyendo el Club Argentino de Tecnología

"Si querés entender cómo funciona algo, construilo." Esta es la historia de cómo diseñamos la DAO del CAT.

Nada mejor que un Domingo por la mañana, para entrar programar contratos inteligentes y crear una nueva Organización Autónoma Descentralizada al éter. Así que cargá el mate y acompañame a entrar en la Matrix y explorar el mundo de la web3.

Con algunos años de experiencia siguiendo las criptomonedas y la tecnología blockchain, aprendiendo de manera autodidacta y experimentando con contratos inteligentes en Solidity, me propuse un nuevo desafío: desarrollar la base mínima viable de una DAO para el CAT.

💡
Curso de programación de Smart Contracts bueno y gratuito: Cryptozombies

🤔 ¿Pero, qué es realmente una DAO?

Una DAO (Organización Autónoma Descentralizada) es una organización digital donde los miembros toman decisiones de forma transparente y democrática a través de votos, y todas las reglas están programadas y son visibles para todos.

Antes de sumergirnos en el código y las decisiones técnicas, es importante entender qué hace que una DAO sea verdaderamente una DAO.

Imagina que estás armando un país en miniatura. Necesitarías tres elementos fundamentales:

  • Una constitución (o manifiesto) que establezca las reglas básicas
  • Una moneda para intercambiar valor
  • Un sistema de votación para tomar decisiones
  • Smart Contracts: El Corazón de la DAO

    Los smart contracts (contratos inteligentes) son como las leyes fundamentales de nuestra organización, pero con una diferencia crucial: en lugar de estar escritas en papel, están programadas en código. Y aquí viene lo interesante: una vez que los deployás (es decir, los subís a la blockchain), estas reglas quedan grabadas de forma permanente. Es como tallar las reglas en piedra: inmutables y transparentes para todos.

    Para el CAT, necesitamos al menos dos contratos fundamentales: El del token de gobernanza y el de cómo se gobierna.

    🚨 Alerta, estas a punto de ver código de programación, esto es para que se vea como es un smart contract y es literalmente el que subimos a la blockchain.

    Contrato para el Token CAT (ERC20)

    // contracts/CATToken.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    
    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol";
    import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol";
    
    contract CATToken is ERC20, ERC20Permit, ERC20Votes {
        constructor() 
            ERC20("Club Argentino de Tecnologia", "CAT") 
            ERC20Permit("Club Argentino de Tecnologia") 
        {
            // Mint inicial: 1M tokens
            _mint(msg.sender, 1000000 * 10**decimals());
        }
    
        // The following functions are overrides required by Solidity
        function _update(address from, address to, uint256 value)
            internal
            override(ERC20, ERC20Votes)
        {
            super._update(from, to, value);
        }
    
        function nonces(address owner)
            public
            view
            override(ERC20Permit, Nonces)
            returns (uint256)
        {
            return super.nonces(owner);
        }
    }

    Este contrato va más allá de ser una simple moneda digital: es el sistema que define las reglas de votación y participación en nuestra DAO. Elegimos el estándar ERC20 con extensiones de votación porque, al igual que el LEGO, nos permite construir con piezas probadas y seguras. En el espíritu del código libre que caracteriza a la web3, nos inspiramos en contratos existentes y los adaptamos a nuestras necesidades, tal como los constituyentes argentinos se inspiraron en otras constituciones para crear la nuestra.

    El Contrato de Gobernanza

    // contracts/CATGovernor.sol
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.20;
    
    import "@openzeppelin/contracts/governance/Governor.sol";
    import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";
    import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";
    
    contract CATGovernor is Governor, GovernorCountingSimple, GovernorVotes {
        uint256 public constant VOTING_DELAY = 1;
        uint256 public constant VOTING_PERIOD = 50400;
        uint256 public constant PROPOSAL_THRESHOLD = 0;
        uint256 public constant QUORUM_PERCENTAGE = 20;
    
        constructor(IVotes _token)
            Governor("CAT Governor")
            GovernorVotes(_token)
        {}
    
        function votingDelay() public pure override returns (uint256) {
            return VOTING_DELAY;
        }
    
        function votingPeriod() public pure override returns (uint256) {
            return VOTING_PERIOD;
        }
    
        function proposalThreshold() public pure override returns (uint256) {
            return PROPOSAL_THRESHOLD;
        }
    
        function quorum(uint256 blockNumber) 
            public 
            pure 
            override 
            returns (uint256) 
        {
            return QUORUM_PERCENTAGE;
        }
    }
    

    Este es el cerebro de la operación. Define cómo se proponen, votan y ejecutan las decisiones. Es como el reglamento del club, pero automatizado y transparente.

    Mas allá del código,

    Una DAO necesita un lugar donde registrar sus decisiones y transacciones de manera transparente e inmutable. Ahí es donde entra la blockchain: una base de datos pública y descentralizada donde nuestras reglas, propuestas y votaciones quedan registradas a la vista de todos.

    La Primera Decisión: La Infraestructura

    ¿Deberíamos crear nuestra propia blockchain? Esta pregunta surgió naturalmente en el Discord del CAT.

    Después de analizar las opciones, quedó claro que montar una blockchain propia sería como construir una autopista para probar un auto. Polygon ofrecía todo lo que necesitábamos: bajos costos de transacción, compatibilidad con Ethereum y una red estable. La soberanía tecnológica no significa reinventar la rueda, sino entender y controlar las tecnologías que usamos.

    El Dilema de los Tokens

    La siguiente pregunta fue más compleja: ¿cuántos tokens crear y cómo distribuirlos? Este es el tipo de decisión que te mantiene despierto por la noche. Después de varios borradores y discusiones, llegamos a 1M de tokens por dos razones:

  • Es un número que facilita los cálculos (nadie quiere hacer matemáticas con 1.732.851 tokens)
  • Da suficiente granularidad para una distribución justa sin ser excesivo
  • La distribución inicial es un punto importante, el cual vamos a definir en función de la participación y aporte de los miembros del CAT.

    La Gobernanza: Un Experimento en Democracia Digital

    El sistema de votación fue donde más iteraciones hicimos. El primer intento fue un desastre: necesitábamos 51% de participación para cada votación. Suena democrático, ¿no? El problema es que ni siquiera las democracias tradicionales logran esa participación consistentemente.

    Después de varios intentos, llegamos a un sistema más pragmático:

  • Quorum del 20%: suficientemente alto para ser significativo, suficientemente bajo para ser alcanzable
  • Una semana de votación: el tiempo justo para que la gente se informe y vote, sin que las decisiones se eternicen
  • Sin threshold para propuestas: porque las buenas ideas pueden venir de cualquier lado
  • Algunos Desafíos

    Los verdaderos desafíos aparecieron en los detalles. Cada error me enseñó algo valioso:

  • El primer intento de delegación de votos falló por enviar datos a una dirección equivocada
  • La interfaz de Tally mostraba 0 votos a pesar de tener 1M tokens (olvidamos llamar a la función delegate)
  • Las transacciones fallaban silenciosamente por un gasLimit inadecuado
  • El aprendizaje más memorable fue descubrir que necesitábamos verificar el contrato en Polygonscan para que Tally lo reconociera. Es el tipo de detalle que no aparece en ningún tutorial.

    Lo Que Funcionó (Y Lo Que No)

    Los aciertos:

  • Polygon nos permitió iterar rápido y con bajos costos
  • Los contratos simples nos salvaron de bugs complejos
  • El sistema de delegación resolvió el problema de la participación pasiva
  • Las lecciones:

  • El onboarding es crítico: necesitamos una mejor experiencia inicial
  • La UI importa: la mejor DAO del mundo es inútil si nadie puede usarla
  • La distribución inicial debería ser más gradual: el poder concentrado es peligroso, incluso temporalmente
  • La Prueba final

    El verdadero momento de revelación llegó con la primera propuesta votada exitosamente. Ver los tokens delegados, los votos registrados y el quorum alcanzado fue como ver un motor arrancar por primera vez. Ahí cerro el primer circuito de pruebas. Esta es la esencia de construir una DAO: no se trata solo de escribir contratos inteligentes, sino de diseñar sistemas que permitan a las personas colaborar de nuevas maneras. Cada decisión técnica es, en realidad, una decisión sobre cómo queremos que funcione nuestra comunidad.

    Conclusión

    Crear una DAO es como fundar una mini-república digital. Los contratos son importantes, pero son solo herramientas. Lo que realmente importa es la comunidad que las usa y cómo las usa.

    El código está en GitHub, las propuestas están esperando votos, y el futuro del CAT está en manos de sus miembros. ¿Qué vamos a construir juntos?

    🙌 Gracias por leer,

    @andycufari


    Notas Técnicas:

  • Smart Contract: Programa que vive en la blockchain y ejecuta reglas automáticamente
  • ERC20: Estándar para tokens en Ethereum (y redes compatibles como Polygon)
  • Quorum: Cantidad mínima de participación necesaria para que una votación sea válida
  • Delegación: Capacidad de asignar tu poder de voto a otro miembro