Desplega tu Contrato
Ahora que hemos generado el binario Wasm desde nuestro código fuente y nos hemos conectado a un nodo local, queremos desplegar este contrato en nuestro Substrate blockchain.
El despliegue de los smart contracts en Substrate es un poco diferente que los blockchain smart contracts tradicionales.
Mientras que en otras plataformas cada vez que se carga un contrato se despliega un nuevo blob del código fuente de los smart contracts,
Substrate opta por optimizar este comportamiento. Por ejemplo, el token estándar ERC20 se ha desplegado en Ethereum miles de veces,
algunas veces solo con cambios en la configuración inicial (mediante la función de Solidity constructor
). Cada una de estas instancias
ocupan espacio en la blockchain equivalente al tamaño del código fuente del contrato, aunque en realidad no se modificó ningún código.
En Substrate, el proceso de despliegue del contrato se divide en dos pasos:
- Poner el código del contrato en la blockchain.
- Crear una instancia de tu contrato.
Con este patrón, código de un contrato como el estándar ERC20 puede ponerse en la blockchain una sola vez, pero instanciarse muchas veces. No es necesario cargar el mismo código fuente continuamente y desperdiciar espacio en la blockchain.
TODO: Using the Contracts UI
1. Cargar el código del Contrato
Aquí cargaremos el código del contrato e instanciaremos una copia del contrato en la blockchain (que suele ser la razón por la que cargamos el código del contrato en primer lugar):
- Haga clic en el botón Add New Contract de la barra lateral.
- Haga clic en el botón Upload New Contract Code en la página de
Add New Contract
. - Elige una Instantiation account (e.g. ALICE).
- Dale una descripción al contrato Name (e.g. Flipper Contract).
- Arrastra el fichero
flipper.contract
que contiene el paquete Wasm blob y la metadata en el area dedrag & drop
. Verás la UI analizar los metadatos y habilitar el botón que te permitira avanzar al siguiente paso. - aga clic en el botón Next.
2. Instanciar un Contrato en la Blockchain
Los Smarts contracts existen como una extensión del account system de la blockchain. Por lo tanto,
crear una instancia de este contrato creará un nuevo AccountId
que almacenará cualquier balance gestionado por el
smart contract y nos permite interactuar con el contrato.
Ahora una pantalla nos mostrara la información que representa nuestro smart contract. Vamos a instanciar una copia del smart contract:
- Aceptar las opciones por defecto del contrato Deployment Constructor.
- Aceptar la opción por defecto Max Gas Allowed de
200000
. - Haga click en
Next
La transacción ahora está en cola, revisa tus datos y haga clic en Upload and Instantiate o vuelve para modificar tus inputs.
Cuando hagas clic en Upload and Instantiate deberías ver que el extrinsic instantiateWithCode
se está procesando, y aparece una ráfaga de eventos, incluyendo la creación de una nueva cuenta (system.NewAccount
)
y la instanciación del contrato (contracts.Instantiated
).
Seras redirigido a una nueva página, donde podrás interactuar con la nueva instancia creada del contrato.
Uso de cargo-contract
Los contratos también pueden ser desplegados desde la línea de comandos .
Usando cargo-contract
simplemente hace falta ejecutar la siguiente secuencia:
cargo contract build
cargo contract upload --suri //Alice
cargo contract instantiate --suri //Alice --args true