Compound Protocol es una infraestructura financiera abierta y gratuita que se ejecuta en la cadena de bloques Ethereum. Cualquiera con una visión de futuro del protocolo puede proponer una mejora escribiendo código.
No todos los cambios de protocolo requieren necesariamente código, pero los más involucrados sí. En esta breve guía, explicaremos cómo cambiar el código fuente y proponer un cambio formal con Compound Governance.
Aquí hay una descripción general de los pasos que daremos, con el objetivo final de proponer un nuevo mercado de cToken para el protocolo:
- Elimine las comprobaciones de verificación heredadas del código fuente para los nuevos cTokens que se agregarán en el futuro.
- Elimine las pruebas para las comprobaciones de verificación heredadas, de modo que todas las pruebas tengan éxito. Tenga en cuenta que al agregar código nuevo, el desarrollador debe escribir pruebas unitarias adicionales para garantizar una cobertura de código óptima.
- Cree una solicitud de extracción en el repositorio de GitHub del protocolo Compound, para que la comunidad pueda revisar los cambios de código y, finalmente, sincronizarlos (si se aprueba a través de la gobernanza).
- Implemente un nuevo contrato cToken para un activo ERC-20.
- Verifique el código de contrato en Etherscan .
- Cree una propuesta de gobernanza compuesta para agregar el nuevo activo al protocolo.
Prerrequisitos
¿Nuevo en el desarrollo de Ethereum? Intente comenzar un poco más pequeño con una guía más básica: Configuración de un entorno de desarrollo Ethereum .
Los cambios del Protocolo Compound se diseñan y debaten públicamente en el Foro de la comunidad compuesta . Antes de continuar, lea el manual completo en el foro para Contribuir al Protocolo Compound.
Necesitaremos crear una cuenta de GitHub e instalar git . Usaremos estas herramientas para fusionar públicamente código nuevo en el repositorio de código abierto.
Eche un vistazo al archivo Léame del repositorio para familiarizarse con las herramientas disponibles y el proceso de desarrollo.
Aprenda qué es la gobernanza compuesta leyendo las publicaciones de blog relacionadas en el blog Compound. El proceso de gobernanza es necesario para incorporar nuevos cambios de código en el protocolo en cadena.
Cambiar el código fuente del protocolo
Primero, bifurcaremos el código fuente del Protocolo Compound a nuestra cuenta de GitHub. Haremos cambios en el repositorio bifurcado y crearemos una solicitud de extracción en el repositorio original.
Código
Para empezar, iremos al repositorio de GitHub y haremos clic en el botón de bifurcación a la derecha. Esto hace una copia personal del repositorio.
A continuación, iremos a la página del repositorio bifurcado en los repositorios de nuestra cuenta. Haremos clic en el botón de código verde, luego en la pestaña SSH y finalmente en el botón ‘copiar al portapapeles’ a la derecha.
A continuación, copiaremos el repositorio en nuestra máquina local. Abriremos la terminal y navegaremos hasta nuestra carpeta de proyectos de programación. Escriba «git clone» seguido de la dirección ssh del repositorio bifurcado.
clon de git git@github.com: ajb413 / Compound-protocol.git
A continuación, navegaremos hasta el repositorio e instalaremos las dependencias. Ahora es un buen momento para instalar Node.js (LTS) y Yarn .
cd Compound-protocol / instalación de hilo
Una vez instalado todo, podemos abrir el código fuente con un editor de texto y comenzar a realizar cambios. El único archivo de contrato que modificaremos es /contracts/CToken.sol
. Eliminaremos las siguientes líneas.https://medium.com/media/d2f31524de01367add4b7e2f372e3325
Podemos ver en las definiciones /contracts/Comptroller.sol
que estos métodos no realizan cambios ni revierten condicionalmente. Los trataremos como un código muerto que debe eliminarse. Los contratos de cToken existentes los llaman, por lo que no los eliminaremos del Contralor hoy.
Pruebas
Después de guardar el archivo de contrato modificado, cambiaremos el código de prueba para que tenga éxito con los cambios más recientes. Si estuviéramos agregando un nuevo código de contrato, agregaríamos más pruebas para garantizar una cobertura completa del código.
Para ejecutar todas las pruebas de proyectos, use este comando en la línea de comando:
prueba de hilo
Para ejecutar un archivo de prueba individual, intente algo como:
pruebas de prueba de hilo / Tokens / proudAndRepayTest.js
Al ejecutar todas las pruebas, veremos que fallan 6 pruebas como resultado de los cambios en nuestro código de contrato. Esas pruebas en particular se pueden comentar o eliminar. Una vez que el comando de prueba arroja 0 pruebas fallidas, podemos continuar con nuestro cambio de protocolo.
Solicitud de extracción
Una vez que pasan las pruebas, podemos crear una solicitud de extracción. Cuando una solicitud de extracción está abierta, la comunidad puede analizar públicamente los cambios del código para garantizar la integridad y que se implementen las mejores prácticas. Si la comunidad aprueba los cambios a través de la gobernanza con una propuesta aprobada, la solicitud de extracción se fusionará con la rama principal.
A continuación, confirmaremos el contrato y los cambios en el código de prueba en el repositorio bifurcado usando Git en la línea de comandos.
git agregar contratos / pruebas /
git commit -m "cambios de ctoken"
git push origin master
Regresaremos a la página del repositorio bifurcado en GitHub y la actualizaremos. Ahora debería haber un botón de solicitud de extracción encima del explorador de archivos a la derecha. Haremos clic en él para ver la página de comparación de combinaciones.
A continuación, haremos clic en el botón verde «Crear solicitud de extracción» para abrir la solicitud de extracción pública.
Implementación de nuevos contratos inteligentes de Ethereum
Algunos cambios de protocolo, pero no todos, requieren la implementación de nuevos contratos inteligentes. Al agregar un nuevo activo al protocolo, se requiere implementar un nuevo contrato de cToken.
La implementación de un contrato cToken se puede realizar mediante Saddle. El equipo de Compound Labs creó una herramienta de línea de comandos llamada Saddle para el desarrollo de Ethereum. Ya está incluido en las dependencias del repositorio de protocolos.
Implementación de contrato de entorno local
Antes de implementar en una red pública de Ethereum, primero intentaremos implementar el contrato en una bifurcación de host local. Necesitaremos una URL de proveedor JSON RPC para esto. Se puede adquirir uno gratis de Infura o un servicio similar.
Regresaremos a nuestro editor de texto y abriremos saddle.config.js en la carpeta raíz del proyecto. Duplicaremos el objeto de desarrollo dentro del objeto de redes . El duplicado debería llamarse algo así como local_fork .
En la matriz de proveedores de local_fork , eliminaremos el segundo objeto que comienza con ganache . En su lugar, reemplazaremos el segundo objeto completo con una URL JSON RPC localhost. La matriz de proveedores de local_fork ahora debería verse así:
proveedores: [
{env: "PROVIDER"},
{http: "http://127.0.0.1:8545"}
],
Ahora es un buen momento para instalar Ganache CLI globalmente (más sobre esta herramienta en la guía principal ).
En una ventana de terminal separada, usaremos el siguiente comando para hacer una bifurcación local de la cadena de bloques de la red Kovan. El mnemónico genera cuentas que se han utilizado en guías para desarrolladores anteriores. Tenga en cuenta que hay una variable de entorno ( infuraProjectId
) que contiene el ID del proyecto Infura.
ganache-cli \
-f https://kovan.infura.io/v3/$infuraProjectId \
-m "embrague capitán zapato sal despierto configuración de cosecha preso primario feo entre convertido"
A continuación, implementaremos el contrato usando Saddle. El nuevo cToken será Kyber Network Crystal. La dirección del token subyacente se puede encontrar en la documentación de Kyber .
En una ventana de terminal que se navega al directorio del proyecto, usaremos el siguiente comando para implementar el cToken en la bifurcación local.
npx silla -n ganache_fork guión token: Implementar '{
"subyacente": "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2",
"contralor": "$ Contraloría",
"interestRateModel": "$ Base200bps_Slope3000bps",
"initialExchangeRateMantissa": "2.0e18",
"name": "Compound Kyber Network Crystal",
"símbolo": "cKNC",
"decimales": "8",
"admin": "$ Timelock"
} '
Si tiene éxito, Saddle registrará la dirección del nuevo contrato de cToken.
Implementación de contrato y verificación de código Etherscan
Ahora que sabemos que la implementación funciona en el entorno de prueba local, podemos probarla en la red pública.
Antes de hacer eso, obtendremos una clave API de Etherscan para que podamos verificar públicamente el código fuente. Nos registraremos para obtener una cuenta gratuita en etherscan.io . Una vez que tengamos una cuenta, crearemos una clave API haciendo clic en el menú desplegable del perfil, Claves API y el botón «Agregar» en la parte superior de la página.
Ahora que tenemos una clave API, podemos agregarla a nuestras variables de entorno de línea de comando. En una Mac, esto está en ~/.bash_profile
o ~/.zshrc
. Agregaremos la clave en una nueva línea con export ETHERSCAN_API_KEY="JI4D..."
y reiniciaremos la ventana de terminal.
A continuación, agregaremos una clave privada para la red de prueba de Kovan, para que Saddle sepa quién está implementando el nuevo contrato. Crearemos un nuevo directorio usando mkdir ~/.ethereum/
y luego un nuevo archivo para contener la clave privada touch ~/.ethereum/kovan
.
Pegaremos una clave privada Kovan en este archivo sin el «0x» al comienzo de la cadena hexadecimal.
A continuación, ejecutaremos el mismo comando de implementación que ejecutamos anteriormente, excepto que esta vez reemplazaremos local_fork con kovan . Este cambio desplegará el contrato con Kovan, de verdad. Ejecutaremos el comando. Asegúrese de guardar la dirección del contrato que está registrada.
Visite kovan.etherscan.io y busque la dirección de contrato recién creada. En la pestaña de contrato, veremos que actualmente no hay ningún código fuente verificado.
A continuación, volveremos a la línea de comandos y ejecutaremos un comando para verificar el código fuente con Etherscan. Lo reemplazaremos 0x9aF1962Dadf179e2aAa66F994ef09c65360b958e
con nuestra dirección de contrato recién creada.
token de secuencia de comandos npx saddle -n kovan: verificar 0x9aF1962Dadf179e2aAa66F994ef09c65360b958eNETWORK: MAINNET (ETH) '{ "subyacente": "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2", "contralor": "$ Contraloría", "interestRateModel": "$ Base200bps_Slope3000bps", "initialExchangeRateMantissa": "2.0e18", "name": "Compound Kyber Network Crystal", " símbolo ":" cKNC ", " decimales ":" 8 ", " admin ":" $ Timelock " } '
Una vez que se complete la verificación, veremos que el código del contrato ahora se puede explorar en la página del contrato Etherscan.
Este mismo proceso se puede seguir para implementar un contrato en Ethereum Mainnet.
Inicialización de una propuesta de gobernanza compuesta
El último paso importante para cambiar el Protocolo Compound es crear una propuesta de gobernanza que la comunidad acuerde aprobar colectivamente.
Tenga en cuenta que el nuevo cToken de esta guía ya es compatible con Open Price Feed en cadena . Si estuviéramos proponiendo un nuevo activo que aún no se informa en Open Price Feed, también necesitaríamos crear cambios para ese componente.
Propuesta o propuesta autónoma
Hay varias opciones para crear una propuesta de gobernanza compuesta. Los revisaremos aquí. Si no tienen sentido, tómese un tiempo para leer sobre Gobernanza en el blog Compound y en el foro comp.xyz .
- Adquiera al menos 100.000 COMP o el peso de voto delegado equivalente y cree una propuesta utilizando app.compound.finance/propose .
- Discuta ideas para el cambio con la comunidad de Compound en el foro o en el canal #governance de Compound Discord . Encuentre un usuario que esté de acuerdo con el cambio, tenga la capacidad y pídales que creen la propuesta.
- Adquirir al menos 100 COMP y crear una propuesta autónoma compuesta .
Analicemos el uso de la interfaz de la aplicación para resaltar los «calldatas» necesarios para una nueva propuesta de cToken. Nuevamente, esto es solo para usuarios que controlan al menos 100,000 votos.
Visite app.compound.finance/propose . Complete las secciones Título de la propuesta y Descripción general. Sea lo más completo posible. Se admite Markdown. Asegúrese de incluir un enlace a la solicitud de extracción de GitHub creada anteriormente. Revise una propuesta anterior similar y utilícela como guía para redactar la descripción general. Agregue las siguientes acciones en el orden especificado.
- Contrato de contralor, función _supportMarket , nueva dirección de contrato de cToken.
- Contrato de contralor, función _addCompMarkets , nueva dirección de contrato de cToken.
- Contrato de contralor, función _setCollateralFactor , nueva dirección de contrato de cToken y 600000000000000000 para un factor de garantía del 60%.
- Otro contrato (nueva dirección de contrato cToken y ABI de la página de Etherscan, pestaña de código, hacia la parte inferior), _setReserveFactor , 200000000000000000 para un factor de reserva del 20%.
Esta propuesta agrega el nuevo cToken a la Contraloría oficial, lo habilita como un mercado que participa en COMP Distribución , fija el factor colateral al 60% y fija el factor de reserva al 20%. Una vez que haya completado las acciones, haga clic en el botón Enviar propuesta y envíe la transacción utilizando MetaMask.
Para obtener un tutorial más detallado sobre cómo crear una propuesta, consulte la guía de gobernanza compuesta: cómo proponer .
Terminando
Compound es un protocolo vivo en cadena, no solo un repositorio de código que se puede extraer y ejecutar. Proponer cambios es una empresa seria que requiere la atención y el escrutinio de toda la comunidad. No todas las propuestas pasan. Para obtener más ideas sobre cómo enviar propuestas exitosas, consulte el manual Contribución al protocolo Compound.
La parte más importante del desarrollo de las mejoras del Protocolo Compound es participar en un discurso abierto. Únase a la discusión en el Foro de la comunidad compuesta y en el canal #governance de la Discordia compuesta .
Gracias por leer y asegúrese de suscribirse al boletín Compound. No dude en comentar esta publicación o ponerse en contacto con el equipo en el Twitter Compound.