Ethereum en práctica, parte 2/3: Cómo construir una democracia mejor bajo 100 líneas de código
El siguiente artículo es una traducción al español de este, publicado en el blog de Ethereum por Alex Van de Sande el 4 de diciembre del año 2015.
![](https://steemitimages.com/640x0/http://allcryptocoins.net/wp-content/uploads/2016/03/ethereum.png)
Este es el segundo post de una serie sobre cómo usar las herramientas actuales de Ethereum para construir contratos inteligentes sin necesitar experiencia en progamación. Descarga la última versión del monedero Ethereum, lee la primera parte y diviértete.
Crear una moneda es divertido, pero ¿cuál es el valor de una moneda que no hace nada nuevo? Ahora vamos a crear un nuevo contrato que use el token que hemos creado. El contrato será una organización democrática que vive en la blockchain y cualquiera que tenga la moneda podrá votar en propuestas.
Así que vamos atrás a "Contracts", luego "Deploy Contract" y pega el código fuente de DAO en el campo "Solidity Source". Elige el contrato "Democracy" en el seleccionador y establece los siguientes parámetros:
En el campo "amount" puedes añadir cualquier cantidad de ether con la que quieres que empiece tu DAO (aplicación descentralizada). Hasta entonces puedes enviar ether en cualquier momento. Si es la primera vez que estás haciendo esto, mantiene la cantidad a 0 y envía el dinero más tarde.
En el campo "shareAdress" pega la dirección de la moneda que acabas de crear. Pon atención al icono y al pequeño círculo que aparecen al lado de la dirección. Si no coincide exactamente con el contrato que has creado previamente, habrá un error.
En "minimunSharesForVoting" elige cual es la cuota mínima de accionistas que necesita votar en un problema para que sea solucionado. Aquí debes poner un número entero del mínimo token posible, así que si has creado una moneda con dos decimales, poner aquí 500 significará que, en orden de que una propuesta sea ejecutada, entonces el número de votos debe ser más del 5% del total de acciones de la compañía.
"minutesForDebating": esto es el tiempo mínimo en el que una propuesta debe ser discutida y votada antes de que los resultados sean contados. Pon un número pequeño como 10 minutos si sólo quieres crear algo para testear, pero pon algo como 20000 si quieres almacenar grandes cantidades de ether, así todas las propuestas deben estar ahí durante, al menos, dos semanas.
Tu contrato debería lucir algo así:
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Ethereum-Wallet-Screenshot-2015-12-03-at-3.50.36-PM-16.png)
Después de unos segundos serás redireccionado a un panel donde verás como se va creando tu nuevo contrato.
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Ethereum-Wallet-Screenshot-2015-12-03-at-3.50.36-PM-13.png)
También puedes ver el link de tu nuevo contrato en la pestaña "Contracts". Si no está ahí (por ejemplo, si estás añadiendo un contrato que no has creado tú) entonces tendrás que añadirlo manualmente. Para añadirlo necesitarás la dirección del contrato y su interfaz JSON, una cadena de texto que explica al monedero como interactuar con el código. Puedes elegir el nombre que quieras y presionar "OK".
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-03-at-9.57.34-AM.png)
Haz click en la caja del nuevo contrato y verás la página del contrato. Si todavía no tienes depositado algo de ether en ese contrato, haz click en "Deposit" y pon una pequeña cantidad de ether para que puedas testear cómo funciona esta particular democracia. Si el contrato ya tiene algunos fondos, haz click en el botón "Show contract info".
En "readfromcontract" puedes ver todas las funciones que puedes ejecutar libremente en el contrato tan sólo leyendo información de la blockchain. Aquí puedes ver, por ejemplo que "sharesTokenAdress" es, en efecto la dirección correcta o que ahora mismo hay 0 propuestas en el contrato. Vamos a cambiar eso...
En "Write to contract" tienes una lista de todas las funciones que harán un intento de computar para guardar información en la blockchain, que costarán ether. Selecciona "new Proposal" y mostrará todas las operaciones para esa función.
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-01-at-6.10.32-PM.png)
Para "beneficiary" añade la dirección de alguien a quien quieras enviar ether, entonces pon cuanto ether en "etherAmount" (debe ser un número entero) y finalmente un texto describiendo la razón de por qué haces esto. Haz click en ejecutar y escribe tu contraseña. Después de algunos segundos el "numProposals" incrementará a 1 y la primera propuesta, número 0, aparecerá en la columna de la izquierda. En cuanto añadas más propuestas, podrás ver cualquiera de ellas simplemente poniendo el número de propuesta en el campo "proposals" y leer todo sobre ella.
Votar en una propuesta es también muy simple. Elige "vote" en el selector de funciones. Escribe el número de propuesta en la primera caja y selecciona la cajita "Yes" si estás conforme con la propuesta (o dejarla en blanco para votar en contra). Haz click en "execute" para enviar tu voto.
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-01-at-6.18.22-PM.png)
Cuando ha pasado el tiempo mínimo de votación, puedes seleccionar "executeProposal". Si la propuesta fue sólo enviando ether, entonces también puedes dejar el campo "TransactionBytecode" en blanco. Después de presionar "execute" pero antes de escribir tu contraseña, pon atención a la pantalla que aparece. Si hay una advertencia en el campo "estimated fee consumption", esto significa que por alguna razón la función llamada no se ejecutará y será finalizada abruptamente. Esto puede significar muchas cosas, pero en el contexto de este contrato esta advertencia se mostrará siempre que intentes ejecutar un contrato antes de que su plazo haya pasado, o si el usuario está intentando enviar datos de código de bytes diferentes al propósito que tienen originalmente. Por razones de seguridad, si alguna de esas cosas pasa, la ejecución del contrato termina abruptamente y el usuario que ha intentado la transacción ilegal pierde todo el ether que envió para pagar las comisiones de la transacción.
![](https://steemitimages.com/640x0/https://blog.ethereum.org/wp-content/uploads/2015/12/Screen-Shot-2015-12-01-at-6.21.30-PM.png)
Si todo ha ido bien deberías ser capaz de ver los resultados del voto en unos segundos. El parámetro "openToVote" en la primera caja se volverá a falso mientras el proposalPassed refleje aún en la propuesta si ha sido aceptada o no. También deberías ser capaz de ver que el balance de ether del contrato irá hacia abajo y el ether equivalente será enviado al beneficiario del ether que querías enviar.
Ahora tómate un momento para caer en ello: acabas de crear una organización que sólo existe en la blockchain, que obedece a votos basados en tokens completamente digitales, pero ellos pueden mover valor a su alrededor y crear un impacto real en el mundo. También nota que la organización no está bajo tu control nunca más: ejecutará sólo el código exacto que has usado para crearla, siempre. No puedes sobornarla ni destinarla para algo y las mismas reglas aplicadas a ti mueven 0.01 o 1 millón de ethers.
¿Puedes conseguir algo mejor que esto? Actualmente puedes. En nuestro próximo post exploraremos como puedes usar el "transactionBytecode" para permitir a la DAO ejecutar todo tipo de transacciones ethereum, incluso poseyendo o creando otros contratos. También modificaremos el código del token para permitir a la DAO controlar la cantidad de un token que existe en circulación y cómo enviarlo a reexpedir.
gracias por compartir esta información es valiosa
This post has been linked to from another place on Steem.
Learn more about and upvote to support linkback bot v0.5. Flag this comment if you don't want the bot to continue posting linkbacks for your posts.
Built by @ontofractal