¡Hola, mundo!

Esta guía muestra cómo comenzar a desarrollar en ICP rápidamente implementando su primer contrato inteligente "¡Hola, mundo!".

Elección de un entorno

Para implementar un contrato inteligente simple del tipo “¡Hola, mundo!”, puedes usar una variedad de entornos de desarrollo, como:

  • Instalación nativa de herramientas en sistemas Linux, Mac o Windows (usando WSL).

  • Entornos basados ​​en la nube como Gitpod o GitHub Codespaces.

Cada entorno de desarrollador utiliza dfx, una herramienta de línea de comandos que se utiliza para desarrollar e implementar contratos inteligentes en ICP.

¿Qué entorno deberías elegir?

La instalación nativa requiere la descarga e instalación dfxmanual de las dependencias. El uso de una instalación nativa dfxes más adecuado para proyectos grandes.

Gitpod y GitHub Codespaces son entornos de desarrollo basados ​​en la nube a los que se puede acceder a través de un navegador web. Los ejemplos de Gitpod y GitHub Codespace a los que se hace referencia en esta página incluyen las herramientas y dependencias necesarias preinstaladas. Estos entornos utilizan recursos limitados en la nube y es posible que no se adapten bien a la creación de proyectos grandes y complejos.

de contrato inteligente

La Hello, world!dapp predeterminada utiliza dfxla plantilla predeterminada de que contiene dos recipientes hello_backendy hello_frontend.

El hello_frontendcontenedor se utiliza para almacenar los recursos de interfaz de la aplicación descentralizada. Esto incluye archivos como HTML, CSS, JavaScript, React, imágenes y videos.

El hello_backendrecipiente se utiliza para almacenar las funciones y la lógica central de la dapp.

Es importante tener en cuenta que un contenedor puede almacenar tanto los activos del frontend como el código del backend. Sin embargo, dfxde forma predeterminada, se utiliza una plantilla de proyecto con un contenedor dedicado para el frontend, ya que esto permite utilizar cualquier lenguaje para el contenedor del backend sin necesidad de utilizar una biblioteca para la API de almacenamiento de activos.

Motoko

Motoko es un lenguaje basado en actores y representa el contrato inteligente como un actor con varios métodos que los usuarios y otros contratos inteligentes pueden llamar.

Este actor de Hola mundo tiene una única función llamada saludo. Está marcada como consulta porque no modifica el estado del actor. La función acepta un nombre como entrada y devuelve un texto de saludo.

fuente/hola_backend/main.mo

actor {
  public query func greet(name : Text) : async Text {
    return "Hello, " # name # "!";
  };
};

Óxido

Este contrato inteligente de Rust tiene una única función llamada saludo. Está marcada como consulta porque no modifica el estado del contenedor.

La función acepta un nombre como entrada y devuelve un texto de saludo.

fuente/hola_backend/fuente/lib.rs

#[ic_cdk::query]
fn greet(name: String) -> String {
    format!("Hello, {}!", name)
}

Mecanografiado Beta

Los contenedores TypeScript se pueden escribir utilizando el kit de desarrollo de contenedores Azle. Para los proyectos Azle, necesitará instalar la dfxextensión Azle:

npx azle install-dfx-extension

El código de contenedor predeterminado para los proyectos de Azle contiene el siguiente código:

src/hola_backend/src/index.ts

import { IDL, query, update } from 'azle';

export default class {
    message: string = 'Hello world!';

    @query([], IDL.Text)
    getMessage(): string {
        return this.message;
    }

    @update([IDL.Text])
    setMessage(message: string): void {
        this.message = message;
    }
}

Python

Cree el directorio del proyecto y la estructura de archivos:

src/hola_backend/src/main.py

from kybra import query

@query
def greet(name: str) -> str:
    return f"Hello, {name}!"

Implementar en el entorno

Implementar los contenedores del proyecto localmente:

dfx deploy

Este comando realiza varias funciones en segundo plano:

  • Establece un cycle-walletcontrato inteligente especial para almacenar ciclos . Todas las operaciones requieren pagos en ciclos. En su red de prueba local, esta billetera viene precargada con ciclos.

  • Construye los contratos inteligentes definidos en el dfx.jsonarchivo en binarios Wasm.

  • Crea contratos inteligentes en la red de prueba local y guarda sus direcciones en el archivo ./.dfx/local/canister_ids.json.

  • Instala los binarios de Wasm en los nuevos contratos inteligentes.

Llamar a los contratos inteligentes desde la CLI

Motoko

dfx canister call hello_backend greet world

Producción:

("Hello, world!")
  • Óxido

dfx canister call hello_backend greet world

Producción:

("Hello, world!")

Mecanografiado Bet

("Hello world!")

Producción:

dfx canister call hello_backend getMessage

Python

dfx canister call hello_backend greet world

Producción:

("Hello, world!")

Esta llamada realiza varias funciones en segundo plano:

  • Primero, busca la dirección del contrato inteligente (conocida como ID del recipiente) utilizando el nombre del contrato inteligente hello_backenden el archivo ./.dfx/local/canister_ids.json.

  • Luego, busca la interfaz del contrato inteligente en el archivo src/declarations/hello_backend/hello_backend.did.

  • Busca la firma de la función saludo en la interfaz.

  • Construye un mensaje para el greetpunto final del contrato inteligente con el nametexto dado como argumento.

  • Firma el mensaje con la clave privada de la cuenta de desarrollador .

  • Envía el mensaje a la red de prueba local ( réplica ).

  • Una vez ejecutado el mensaje, el resultado se decodificó mediante el archivo de interfaz y se imprimió en la ventana del terminal.

Alternativamente, puede interactuar con el contrato inteligente a través del navegador web si se ha implementado un contrato inteligente de interfaz. Obtenga más información sobre cómo usar el contrato inteligente de interfaz en el navegador web

Last updated