Skip to content

Latest commit

 

History

History
257 lines (140 loc) · 18.5 KB

File metadata and controls

257 lines (140 loc) · 18.5 KB

Guia MIN-MESSAGING BRIDGE

Este proyecto utiliza Protostar como marco de desarrollo. Para comenzar con Protostar, siga las guías contenidas en los documentos oficiales.

Una vez instalado y clonado este repositorio no hará falta iniciar el proyecto con protostar, nos dirijimos directamente al archivo protostar.toml para revisar su información. Como ven estan añadidos todos los contratos y la configuración de testnet2 para el deploy, así que nos han dejado el trabajo para hacer los MINIMOS esfuerzos Min-Starknet, así que intentaré seguir en esa línea para esta guía.


Ajustes Account

En esta nueva version de protostar 0.9.1 tendremos que crear un perfil que añadirermos en protostar.toml en el que defineremos el usuario de cuenta que pagará el fee. Usaremos los ajustes PARA TESTNET aunque también estan preparados para TESTNET2. La cuenta de ArgentX para la guía será 0x03F878C94De81906ba1A016aB0E228D361753536681a776ddA29674FfeBB3CB0 (EN SU CASO AÑADIR LA VUESTRA) para el deploy del token_bridge.cairo y el ERC20.cairo. Tendremos que exportar nuestra PRIVATE KEY de esa cuenta de ArgentX. En la versión 0.9.0 protostar teniamos que pasarlo a hexa usando Stark-utils.

Recordar que tenemos OPCIONES A - B para TESTNET o TESNET2 y no usar ni compartir ninguna PRIVATE KEY NUNCA, todo ello es provisional hasta la versión de CAIRO 1.0. Al reiniciar el pc o terminal tendrá que volver a exportar la clave.

OPCIÓN A - EXPORT PRIVATE KEY

En la versión 0.9.0 protostar teniamos que pasarlo a hexa usando Stark-utils. En la 0.9.1 pasaremos nuestra private key directamente para exportarla, usando el siguiente comando. (SUSITITUIR 0x1234 por vuestro hexa).

export PROTOSTAR_ACCOUNT_PRIVATE_KEY=0x1234

OPCIÓN B - .ENV PRIVATE KEY

Otra opción es este método, añadimos en un archivo .env nuestra private key. También tendremos que ajustar el protostar.toml para indicar la ruta de nuestra Private Key, aunque prefiero esta opción. Nunca mostrar tu clave privada. Nunca subir a Git tu archivo .env.

Graph

BONUS: Deploy en Testnet2

Si queremos realizar el deploy de nuestro contrato en la testnet 2, debemos seguir los mismos pasos que en la testnet. La única diferencia es que necesitaremos utilizar una wallet que esté en la testnet 2 y agregar un perfil específico al archivo de configuración de Protostar. Además, cuando ejecutemos los comandos de Protostar, debemos utilizar el parámetro -p testnet2 en lugar de -p testnet para que la configuración se aplique a la testnet 2. Con estos pasos, podremos realizar el deploy de nuestro contrato en la testnet 2 de manera efectiva.

Graph


Funcionamiento Mensajes entre L2 - L1

Primero hablaremos de los pasos a seguir para poder hacer el desarrollo de los mensajes entre capas de L1 y L2. Deberemos disponer de 4 contratos que deployaremos. Para implementar una solución de puente ERC20 entre Ethereum (L1) y StarkNet (L2), necesitarás seguir los siguientes pasos:

  1. Diseña y desarrolla tus contratos de ERC20 en Ethereum (L1) en nuestra guía lo llameremos WNAI L1 y StarkNet (L2) lo llamaremos WNAI L2.

  2. Diseña y desarrolla tus contratos de puente para Ethereum (L1) en nuestra guía lo llamaremos Token Bridge L1 y StarkNet (L2) lo llamaremos Token Bridge L2.

  3. Primero despliega el contrato de ERC20 en StarkNet (L2) WNAI L2. Asegúrate de hacer un seguimiento de la dirección de este contrato y de guardarla en un lugar seguro.

  4. Despliega el contrato de puente en StarkNet (L2) Token Bridge L2 y proporciona la dirección del contrato de ERC20 en StarkNet (L2) WNAI L2 y la dirección del administrador del contrato de puente como parámetros, en este caso la cuenta de ArgentX que usaremos para el Deploy. Asegúrate de hacer un seguimiento de la dirección de este contrato y de guardarla en un lugar seguro.

  5. Despliega el contrato de puente en Ethereum (L1) Token Bridge L1 y proporciona la dirección del contrato de StarkNet Core en Ethereum (L1) 0xde29d060D45901Fb19ED6C6e959EB22d8626708e, la dirección del contrato de puente en StarkNet (L2) Token Bridge L2 que hemos deployado antes y la dirección del administrador del contrato de puente como parámetros. Asegúrate de hacer un seguimiento de la dirección de este contrato y de guardarla en un lugar seguro.

  6. Configura los contratos de puente para que se comuniquen entre sí y para que se sincronicen adecuadamente con los contratos de ERC20 correspondientes en cada red. En este paso añadiremos la dirección de token de l1 en el contrato de Token Bridge L1 y también aprobaremos el WNAI L2 y WNAI L1 para que se puedan transferir entre los puentes.

  7. Despliega el contrato de ERC20 en Ethereum (L1) WNAI L1 y proporciona la dirección del contrato de puente en Ethereum (L1) Token Bridge L1 que hemos deployado antes como parámetro. Asegúrate de hacer un seguimiento de la dirección de este contrato y de guardarla en un lugar seguro.


Compile y Declare Token_Bridge L2 y ERC20 (WNAI L2)

Primero haremos los deploy del token WNAI L2 y luego Token Bridge L2 como habiamos configurado en el orden, para ello primeros haremos la compilación de nuestros contratos y conseguimos los Class Hash con el siguiente comando.

protostar build

Graph

Ahora nos quedaremos con el class hash del Bridge_ERC20 y del Bridge para hacer el deploy. En el caso del declare la mayoría ya los tenían realizados creados por otros usuarios, igualmente los declare para esta guía. También comprobaremos que todo este bien, así que pasaremos los comandos.

protostar -p testnet declare ./build/bridge_erc20.json --max-fee auto

Graph

Y ahora el del Token Bridge L2

protostar -p testnet declare ./build/bridge.json --max-fee auto

Graph


Deploy WNAI L2 y Token Bridge L2

Para esta nueva guía podriamos haber usado el antiguo NAI o cualquier ERC20. Pero queremos hacerla desde 0 usando nuevos nombres pasados a felt con Stark-utils. En este caso tendremos que pasar 6 argumentos al constructor Nombre, Simbolo, Decimales, Totalsupply en unit 256 (ejemplo 100 = 100, 0 puede usar Stark-utils, y el recipient, en nuestro caso os dejo la conversión usada.

  • Nadai Token = 94756135172363843420251502
  • WNAI = 1464746313
  • Decimales = 18
  • Total Supply = 100, 0
  • Recipient = 1795950254530259382270168937734171348535331377400385313842303804539016002736

Podriamos usar el contrato Universal para los deploy UDC pero usaremos Protostar en este caso pasando el Class Hash del WNAI L2.

protostar -p testnet deploy 0x04dae654c7b6707667a178729b512d61494fe590ab4accc46923d6409b97e617 --max-fee auto -i 94756135172363843420251502 1464746313 18 100 0 1795950254530259382270168937734171348535331377400385313842303804539016002736

Graph

Y también haremos lo mismo con el deploy del Token Bridge L2, en el que nos hará falta pasar 2 argumentos. La función tiene dos parámetros de entrada l2_address y admin_address. La L2_address representa la dirección de un contrato ERC-20 en la capa 2, en este caso el WNAI L2 que la pasaremos a felt y la admin_address representa la dirección del administrador del contrato, en este caso la usada como cuenta en ArgentX.

protostar -p testnet deploy 0x059b508475ce0c231fdb9c35e1a3bf7da28ef32dec28cf4c76395c23ea369aac --max-fee auto -i 1773784304041683024628802811964043081912746145383244941766373307155679399244 1795950254530259382270168937734171348535331377400385313842303804539016002736

Graph


Deploy WNAI L1 y Token Bridge L1

Dentro de Remix la usaremos para deployar el WNAI L1 y Token Bridge L1. Necesitaremos 4 contratos en Remix para todos los ajustes (IStarknetCore,Token Bridge L1, ERC20 WNAI L1 y tambien crear una carpeta con nombre de token y añadir el contrato IERC20, la raiz debe de quedar así.

Graph

Ahora le deberian dejar poder compilar tanto Token Bridge L1 como ERC20 WNAI L1, para ello deberemos revisar la version de pragma solidity utilizada, hacer el compile del Token Bridge L1 y ahora el deploy, pero antes iremos a la terminal para obtener el StarknetCore que tendremos que indicar, luego la dirección de Contract Address Token Bridge L2 y la wallet del admin de L1 que usaremos para el Deploy 0x3AC83946966B5E2cf4BB24d807a0Dd8232fea4ea. Así que pasaremos en la terminal para conseguir el StarknetCore.

python3.9 -m venv ~/cairo_venv
source ~/cairo_venv/bin/activate
starknet get_contract_addresses --network alpha-goerli

Graph

Ahora ya tenemos último starknetcore oficial (0xde29d060D45901Fb19ED6C6e959EB22d8626708e) que nos hara falta como argumento y procederemos a conectar nuestro Metamask en Goerli y conectarlo a Remix, para ello vamos a Deploy Run Transactions en Environment y cambiamos a Injected Provider Metamask como mostramos en la siguiente imagen.

Graph


Verify con Remix

Para hacer read o write desde la tesnet deberemos verificarlo. En plugin de Remix buscaremos ETHERSCAN - CONTRACT VERIFICATION, y la instaleremos.

Ahora necesitamos una API Key de Etherscan, entramos nos registramos y añadimos una nueva que copiaremos para añadirla en remix. Dentro de Remix necesitamos añadir varios valores, revise Hash Deploy Token Bridge L1, o el Deploy del Smart que han realizado, para copiar los Argumentos del Constructor desde donde empiezan muchos 0 fíjese en la foto.

Graph

Graph

Graph

Una vez dado a verify ya debería poder escribir en él, recordar este paso ya que lo volveremos a realizar para verificar el Contract Address WNAI L1, las fotos aportadas son de los 2 contratos


Puede revisar guía completa de VERIFICACIÓN en REMIX aquí


Ahora ya podremos pasar a deployar nuestro ERC20 WNAI L1 en Remix, pasaremos como argumentos la dirección del Contract Token Bridge L1 que acabmos de crear.

Graph


Ajustes de Contratos

Ahora iremos ajustar en Contract Address Token Bridge L2 nuestro Contract Token Bridge L1. Solo deberemos añadir la dirección del contrato.

Graph


Ahora ye tenemos creados nuestros token en ambas redes y nuestro puentes comunicados, falta añadir al Contract Token Bridge L1 el Contract Address WNAI L1

Graph


Luego aprobaremos a Contract Address WNAI L2 que el Contract Address Token Bridge L2 pueda gastar los WNAI L2, en la guía pusimos 100.

Graph Graph


Withdraw de L2 a L1

Ahora ya tenemos todos los contratos ajustados y haremos el withdraw hacia L1, desde Contract Token Bridge L2 con la función withdraw_to_l1. Haremos dos puebas con envios de 10 a la dirección de la wallet que estamos usando de ETH en MM.

Graph Graph

Aquí podemos comprobar como nuestro balance ha disminuido a 80 pero debemos de esperar a que se confirmen los mensajes en L1, para poder consumirlos desde Contract Token Bridge L1 con deposit_to_l1 indicando la cantidad de 10 en cada transacción, asì podremos consumir el mensaje y hacer que se mint en L1.

Graph

Graph

Graph

Graph

Ahora podemos revisar en Contract Address WNAI L1 el TotalSupply como pasó de 0 a 20 WNAI L1

Graph


Verificación Starkscan

Como tarea extra podemos dejar verificado nuestro contrato en Starkscan, para ello debemos de tener instalada y guardado el contrato que acabamos de hacer el Deploy. Ejecutamos el siguiente comando, escogemos el token_bridge.cairo y luego el ERC20.cairo y vamos siguiendo los pasos. (EN CASO ERROR EN LA RUTA SOLO HAY QUE AÑADIR LA PALABRA lib)

starkscan

Graph