<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sergio Martinez Marin</title>
    <description>The latest articles on DEV Community by Sergio Martinez Marin (@sergiotechx).</description>
    <link>https://dev.to/sergiotechx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393232%2F957e9a5f-5f0b-49a9-9c5d-234a5d3cddad.jpg</url>
      <title>DEV Community: Sergio Martinez Marin</title>
      <link>https://dev.to/sergiotechx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sergiotechx"/>
    <language>en</language>
    <item>
      <title>get set Hola mundo en Soroban😀</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Tue, 11 Mar 2025 20:58:57 +0000</pubDate>
      <link>https://dev.to/sergiotechx/get-set-hola-mundo-en-soroban-16mm</link>
      <guid>https://dev.to/sergiotechx/get-set-hola-mundo-en-soroban-16mm</guid>
      <description>&lt;p&gt;Hola a todos, el mundo es una caja de chocolates, no sabemos que sorpresas nos vamos a llevar . Pensaba hacer un tutorial de un okashi ( un  editor online de contratos en Stellar), pero no funciona 🤷‍♂️, cuando vuelva a funcionar se hará un tutorial (marzo 7 de 2025 al momento de empezar este manual)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0qosqpd49a88b5odert.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0qosqpd49a88b5odert.png" alt="Image description" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota 18 de Marzo de 2025&lt;/strong&gt;&lt;br&gt;
okashi lo van a dar de baja. Ojalá haya un sucesor, porque son herramientas muy útiles.&lt;/p&gt;

&lt;p&gt;Dada esta  eventualidad, vamos a empezar directo en el editor de facto que es Visual studio code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plugins en el editor vscode&lt;/strong&gt;&lt;br&gt;
1) &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90fc1chiwmfzw975znv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F90fc1chiwmfzw975znv8.png" alt="Image description" width="800" height="152"&gt;&lt;/a&gt;&lt;br&gt;
2) &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgcb4j4s4ciwjksmfgwq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgcb4j4s4ciwjksmfgwq.png" alt="Image description" width="742" height="202"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;let´s Code 🤠&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Nos vamos a una  ruta donde queramos crear nuestro proyecto y ponemos el siguiente comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;stellar contract init get_set_helloworld --name get_set_message&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;obtenemos lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Falbl1xck1oaoceeax83u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Falbl1xck1oaoceeax83u.png" alt="Image description" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar el proyecto como tal se llama &lt;em&gt;get_set_helloworld&lt;/em&gt; y en la carpeta contracts se creó una carpeta llamada &lt;em&gt;get_set_message&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jkzew5h8z78zu9rj3xw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jkzew5h8z78zu9rj3xw.png" alt="Image description" width="553" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Análisis del código generado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6rgl71h2tgtyalhs0jc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6rgl71h2tgtyalhs0jc.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1 Declaración de No-Standard Library&lt;/p&gt;

&lt;p&gt;&lt;code&gt;#![no_std]&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Esta directiva le indica al compilador que el contrato se compilará sin la biblioteca estándar de Rust. Esto con el fin de hacer lo más liviano posible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2 Importación de Elementos del SDK&lt;/p&gt;

&lt;p&gt;&lt;em&gt;use soroban_sdk::{contract, contractimpl, vec, Env, String, Vec};&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;contract&lt;br&gt;
Es un macro atributo que se aplica a una estructura para marcarla como el contenedor del contrato. Esto permite que el entorno de Soroban reconozca el contrato y genere la metadata necesaria.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contractimpl&lt;br&gt;
Es otro macro atributo que se utiliza en el bloque impl para indicar que las funciones definidas en ese bloque serán exportadas y podrán ser invocadas desde el entorno de ejecución del contrato.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;vec&lt;br&gt;
Es un macro propio de Soroban que crea un vector (colección &lt;br&gt;
dinámica) adaptado al entorno de contratos. Permite inicializar vectores de forma similar a vec! de Rust, pero considerando las particularidades del entorno.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Env&lt;br&gt;
Es una estructura que representa el entorno en el que se ejecuta el contrato. A través de ella se accede a funciones esenciales como el almacenamiento, emisión de eventos, logs, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;String&lt;br&gt;
Es una implementación propia del tipo cadena optimizada para entornos sin estándar (no_std) y adaptada a las limitaciones de ejecución de los contratos inteligentes en Soroban.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vec&lt;br&gt;
Es el tipo vector (colección dinámica) proporcionado por Soroban, similar al Vec estándar de Rust pero diseñado para trabajar de forma segura y eficiente en contratos inteligentes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Definición del Contrato&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;#[contract]&lt;/em&gt;&lt;br&gt;
pub struct Contract;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementación de las Funciones del Contrato&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;#[contractimpl]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;impl Contract {&lt;br&gt;
    pub fn hello(env: Env, to: String) -&amp;gt; Vec&amp;lt;String&amp;gt; {&lt;br&gt;
        vec![&amp;amp;env, String::from_str(&amp;amp;env, "Hello"), to]&lt;br&gt;
    }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;La anotación #[contractimpl] &lt;br&gt;
sobre el bloque impl Contract indica que las funciones definidas serán expuestas para que puedan ser llamadas por el entorno de Soroban.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Función hello:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Firma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pub fn hello(env: Env, to: String) -&amp;gt; Vec&amp;lt;String&amp;gt;&lt;/code&gt;&lt;br&gt;
Recibe dos argumentos:&lt;br&gt;
&lt;em&gt;env: Env&lt;/em&gt;: El entorno de ejecución, que se usa para acceder a funcionalidades propias del runtime de Soroban.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;to: String&lt;/em&gt;: Una cadena que se pasa como parámetro.&lt;br&gt;
Retorna un Vec, es decir, un vector de cadenas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cuerpo de la función:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vec![&amp;amp;env, String::from_str(&amp;amp;env, "Hello"), to]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Se usa el macro vec! propio de Soroban para crear un vector.&lt;br&gt;
  &lt;strong&gt;Elementos del vector:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;&amp;amp;env:&lt;/em&gt; Se pasa el entorno para que el macro pueda asignar memoria o gestionar la colección en el contexto de Soroban.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;String::from_str(&amp;amp;env, "Hello"):&lt;/em&gt; Convierte el literal "Hello" en un objeto de tipo String propio de Soroban, usando el entorno env para la conversión.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;to:&lt;/em&gt; Se agrega la cadena que se recibió como argumento.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt; La función construye y retorna un vector que contiene&lt;br&gt;
 dos cadenas: la cadena literal "Hello" y la cadena proporcionada en el parámetro to.&lt;/p&gt;


&lt;h2&gt;
  
  
  Vamos modificar este código
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkhihzex9j21jzj8yu1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkhihzex9j21jzj8yu1y.png" alt="Image description" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consideraciones&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;¿Para que necesitamos una estructura vector?:&lt;/em&gt;  En lo ¡absoluto!, vamos a guardar un valor , con opciones de leer y escribir, no una disposición de varios valores.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;pub fn hello&lt;/em&gt;: hasta luego función.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;En conclusión borrón y cuenta nueva 🫠&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#![no_std]
use soroban_sdk::{contract, contractimpl, Env, Symbol, symbol_short, String};

const MESSAGE: Symbol = symbol_short!("Message");

#[contract]
pub struct MessageContract;

#[contractimpl]
impl MessageContract {

    pub fn set_message(env: Env, message: String) {
                env.storage().instance().set(&amp;amp;MESSAGE, &amp;amp;message)
    }

    pub fn get_message(env: Env) -&amp;gt; String {
        env.storage().instance().get(&amp;amp;MESSAGE)
            .unwrap_or(String::from_str(&amp;amp;env, "Default Message"))
    }

}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Análisis del código:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Importaciones del SDK de Soroban&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;use soroban_sdk::{contract, contractimpl, Env, Symbol, symbol_short, String};&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;Symbol y symbol_short&lt;/em&gt;:&lt;br&gt;
Se usan para trabajar con identificadores cortos y &lt;br&gt;
optimizados en el entorno de Soroban.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Symbol&lt;/em&gt; Es un string de 32 caracteres, viene  ocupa 64 
         bit (a-z A-Z 0-9) &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;symbol_short!&lt;/em&gt; Es un string de 9 caracteres (a-z A-Z 0- 
                9)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;em&gt;String&lt;/em&gt;:&lt;br&gt;&lt;br&gt;
Es una versión adaptada del tipo cadena de texto para el entorno sin estándar (no_std) y específicamente optimizada para contratos inteligentes en Soroban.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Definición de una Constante&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;const MESSAGE: Symbol = symbol_short!("Message");&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Función set_message&lt;/em&gt;&lt;br&gt;
&lt;code&gt;pub fn set_message(env: Env, message: String)&lt;/code&gt;&lt;br&gt;
   Recibe dos parámetros:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;em&gt;env: Env:&lt;/em&gt; Permite acceder a funcionalidades del 
         entorno, en especial al almacenamiento.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;message: String:&lt;/em&gt; La cadena que se desea almacenar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;env.storage().instance().set(&amp;amp;MESSAGE, &amp;amp;message)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;usamos la constante MESSAGE como identificador único y el contenido de la variable message que viene como parámetro de la función para guardar en la cadena de bloques ese valor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Función get_message&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pub fn get_message(env: Env) -&amp;gt; String&lt;/code&gt;&lt;br&gt;
Recibe el entorno (env) y retorna una cadena (String).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;env.storage().instance().get(&amp;amp;MESSAGE)&lt;br&gt;
    .unwrap_or(String::from_str(&amp;amp;env, "Default Message"))&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Se intenta obtener el valor almacenado bajo la clave MESSAGE.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Si la clave no existe (es decir, no se ha establecido ningún mensaje), se utiliza unwrap_or para retornar un valor por defecto: se crea un String con el contenido "Default Message" usando String::from_str.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Compilación del contrato&lt;/strong&gt;&lt;br&gt;
la compilación y creación del webassembly es con el siguiente comando:&lt;br&gt;
&lt;code&gt;stellar contract build&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12bif1lymw4gsv84m7z6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12bif1lymw4gsv84m7z6.png" alt="Image description" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cómo podemos ver dentro de la carpeta target, tenemos generado el archivo .wasm ( web assembly), listo para desplegar en la testnet 🙂&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpoz85jycigaegvezkx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpoz85jycigaegvezkx9.png" alt="Image description" width="532" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Despliegue en la testnet&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mac/Linux&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract deploy \
  --wasm target/wasm32-unknown-unknown/release/get_set_message.wasm \
  --source developer \
  --network testnet \
  --alias get_set_message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract deploy `
  --wasm target/wasm32-unknown-unknown/release/get_set_message.wasm `
  --source developer `
  --network testnet `
  --alias get_set_message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Obtenemos  lo siguiente:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n4k32t11m336kgmki4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4n4k32t11m336kgmki4d.png" alt="Image description" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si vemos con atención en lo generado tenemos la ruta de la transacción y del contrato desplegado &lt;/p&gt;

&lt;p&gt;Si pulsamos la techa mayuscula y click en la ruta del contrato desplegado se abre el explorador de bloques de stellar en nuestro contrato desplegado.&lt;/p&gt;

&lt;p&gt;En la parte inferior accedemos a interfaces para ver las funciones públicas del contrato&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo86epsd55jh27y8jbhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvo86epsd55jh27y8jbhz.png" alt="Image description" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Probando el contrato desplegado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Abrimos la consola y ejecutamos&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mac/Linux&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract invoke \
  --id CAO3OLO2MZJNNTL2DP5ARDDDMLORXYA3BP4QIMKK3TFASGGSNG36S7F4 \
  --source developer \
  --network testnet \
  -- \
  set_message \
  --message "Hey master developer 😉"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract invoke `
  --id CAO3OLO2MZJNNTL2DP5ARDDDMLORXYA3BP4QIMKK3TFASGGSNG36S7F4 `
  --source developer `
  --network testnet `
  -- `
  set_message `
  --message "Hey master developer 😉"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Obtenemos lo siguiente:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7rv6no0c9b9x9iw9azr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7rv6no0c9b9x9iw9azr.png" alt="Image description" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mac/Linux&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract invoke \
  --id CAO3OLO2MZJNNTL2DP5ARDDDMLORXYA3BP4QIMKK3TFASGGSNG36S7F4 \
  --source developer \
  --network testnet \
  -- \
  get_message \  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stellar contract invoke `
  --id CAO3OLO2MZJNNTL2DP5ARDDDMLORXYA3BP4QIMKK3TFASGGSNG36S7F4 `
  --source developer `
  --network testnet `
  -- `
  get_message ` 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Obtenemos lo siguiente:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5nfrygh5hrqd72kzocs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5nfrygh5hrqd72kzocs.png" alt="Image description" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como puedes ver, hasta con emojis los mensajes 😉.&lt;/p&gt;

&lt;p&gt;Más adelante empezaremos a analizar a fondo la soroban_sdk y hacer ejercicios con las estructuras y tipos de datos que ofrece.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Segundos pasos con el cliente de Stellar</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Thu, 27 Feb 2025 15:50:42 +0000</pubDate>
      <link>https://dev.to/sergiotechx/segundos-pasos-con-el-cliente-de-stellar-194b</link>
      <guid>https://dev.to/sergiotechx/segundos-pasos-con-el-cliente-de-stellar-194b</guid>
      <description>&lt;p&gt;Hola a todos 😀&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sergiotechx/primeros-pasos-con-el-cliente-de-stellar-l9o"&gt;En el pasado tutorial &lt;/a&gt; vimos lo básico del cliente de Stellar, ahora vamos a entrar un poco más en profundidad.&lt;br&gt;
Temario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creación de un contrato.&lt;/li&gt;
&lt;li&gt;Compilación del contrato.&lt;/li&gt;
&lt;li&gt;Despliegue.&lt;/li&gt;
&lt;li&gt;Ejecución del contrato.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🚨En este tutorial no vamos a entrar en los detalles del contrato como tal, únicamente en cómo se usa el cliente de Stellar.&lt;br&gt;
En posteriores tutoriales, si se entrará al detalle de los  contratos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creación de un contrato&lt;/strong&gt;&lt;br&gt;
Syntaxis:&lt;br&gt;
&lt;code&gt;stellar contract init "nombre_contrato"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;stellar contract init hola_mundo&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttbecg0w59ceais24i9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttbecg0w59ceais24i9k.png" alt="Image description" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Estructura y archivos creados&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lompl98tee71tu5es2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lompl98tee71tu5es2u.png" alt="Image description" width="483" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro de lib.rs está el contrato por defecto&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#![no_std]
use soroban_sdk::{contract, contractimpl, vec, Env, String, Vec};

#[contract]
pub struct Contract;

#[contractimpl]
impl Contract {
    pub fn hello(env: Env, to: String) -&amp;gt; Vec&amp;lt;String&amp;gt; {
        vec![&amp;amp;env, String::from_str(&amp;amp;env, "Hello"), to]
    }
}

mod test;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Compilación del contrato&lt;/strong&gt;&lt;br&gt;
Se ejecuta el siguiente comando:&lt;br&gt;
stellar contract build&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2041ssurcwsd28m1slz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs2041ssurcwsd28m1slz.png" alt="Image description" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtnl0646uoawnk90sw90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtnl0646uoawnk90sw90.png" alt="Image description" width="517" height="586"&gt;&lt;/a&gt;&lt;br&gt;
Podemos ver que se creo una carpeta llamada release, más internamente vemos que está creado el archivo hello_world.wasm&lt;/p&gt;

&lt;p&gt;💡el nombre del archivos en web assembly es el que automáticamente se pone dentro del archivo Cargo.toml&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Despliegue del contrato&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Mac/linux&lt;/strong&gt;&lt;br&gt;
stellar contract deploy \&lt;br&gt;
  --wasm target/wasm32-unknown-unknown/release/hello_world.wasm \&lt;br&gt;
  --source developer \&lt;br&gt;
  --network testnet \&lt;br&gt;
  --alias hello_world&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;br&gt;
stellar contract deploy &lt;code&gt;&lt;br&gt;
  --wasm target/wasm32-unknown-unknown/release/hello_world.wasm&lt;/code&gt;&lt;br&gt;
  --source developer &lt;code&gt;&lt;br&gt;
  --network testnet&lt;/code&gt;&lt;br&gt;
  --alias hello_world&lt;/p&gt;

&lt;p&gt;Felicidades, ya tienes el contratro deplegado en testnet 🥳&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4homj1vgkm0hy2e5rqm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe4homj1vgkm0hy2e5rqm.png" alt="Image description" width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stellar.expert/explorer/testnet/contract/CDCIWIAOWCDIORMZWV53VY5DVLOGB5PWG4ETSAEKKHX43RZVSPYUSLRS?filter=history" rel="noopener noreferrer"&gt;https://stellar.expert/explorer/testnet/contract/CDCIWIAOWCDIORMZWV53VY5DVLOGB5PWG4ETSAEKKHX43RZVSPYUSLRS?filter=history&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interactuando con los contratos&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Sintaxis&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;stellar contract invoke &lt;br&gt;
  --id "contrato"&lt;br&gt;
  --source "identidad"&lt;br&gt;
  --network testnet &lt;br&gt;
  -- &lt;br&gt;
  "función"&lt;br&gt;
  --"parametro" "dato del parámetro"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linux y MAC&lt;/strong&gt;&lt;br&gt;
stellar contract invoke \&lt;br&gt;
  --id CDCIWIAOWCDIORMZWV53VY5DVLOGB5PWG4ETSAEKKHX43RZVSPYUSLRS \&lt;br&gt;
  --source developer \&lt;br&gt;
  --network testnet \&lt;br&gt;
  -- \&lt;br&gt;
  hello \&lt;br&gt;
  --to Pascual&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;br&gt;
stellar contract invoke &lt;code&gt;&lt;br&gt;
  --id CDCIWIAOWCDIORMZWV53VY5DVLOGB5PWG4ETSAEKKHX43RZVSPYUSLRS&lt;/code&gt;&lt;br&gt;
  --source developer &lt;code&gt;&lt;br&gt;
  --network testnet&lt;/code&gt;&lt;br&gt;
  -- &lt;code&gt;&lt;br&gt;
  hello&lt;/code&gt;&lt;br&gt;
  --to Manolo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El resultado es:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m58uy31bdgd3buod3pv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7m58uy31bdgd3buod3pv.png" alt="Image description" width="800" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como has podido ver las interacciones básicas con el cliente de stellar son sumamente sencillas 🙂.&lt;/p&gt;

&lt;p&gt;Más adelante entraremos en terrenos más interesantes, como es la sintaxis, tipos de datos, estructuras y control de flujo en Soroban. Que por fortuna como se maneja, son un conjunto de liberias en Rust. Entonces el enfasis está en Rust como tal, más algunas consideraciones propias de la cadena.&lt;/p&gt;

&lt;p&gt;Hasta la próxima 🤓&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Primeros pasos con el cliente de Stellar</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Wed, 26 Feb 2025 22:18:36 +0000</pubDate>
      <link>https://dev.to/sergiotechx/primeros-pasos-con-el-cliente-de-stellar-l9o</link>
      <guid>https://dev.to/sergiotechx/primeros-pasos-con-el-cliente-de-stellar-l9o</guid>
      <description>&lt;p&gt;🚀 Tutorial: Stellar CLI&lt;br&gt;
¿Qué es Stellar CLI?&lt;br&gt;
El Stellar CLI (Command Line Interface) es una herramienta oficial de la Fundación Stellar para interactuar con la red Stellar y su ecosistema de contratos inteligentes (Soroban). Es una aplicación de línea de comandos que permite a desarrolladores y usuarios avanzados realizar operaciones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crear y gestionar cuentas.&lt;/li&gt;
&lt;li&gt;Enviar y recibir pagos.&lt;/li&gt;
&lt;li&gt;Desplegar e interactuar con contratos inteligentes.&lt;/li&gt;
&lt;li&gt;Simular y probar transacciones en un entorno local.&lt;/li&gt;
&lt;li&gt;Conectar con redes como Testnet y Mainnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://dev.to/sergiotechx/instalacion-entorno-desarrollo-stellar-29pp"&gt;Para instalarlo seguir los pasos aquí &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ver las redes disponibles&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;stellar network ls&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhgolra0d7tcer9p5r81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhgolra0d7tcer9p5r81.png" alt="Image description" width="507" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por defecto están las redes que necesitamos.&lt;br&gt;
Si necesita adicionar una red , hacer click &lt;a href="https://developers.stellar.org/docs/tools/developer-tools/cli/stellar-cli#stellar-network-add" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generación de una nueva identidad&lt;/strong&gt;&lt;br&gt;
La identidad es un alias , que nos sirve para manejar la cuenta generada de una forma mucho más sencilla.&lt;/p&gt;

&lt;p&gt;Para este caso por ejemplo vamos a generar una identidad llamada &lt;em&gt;developer&lt;/em&gt; , ya dejemos descanzar a Bob y Alice 😅&lt;/p&gt;

&lt;p&gt;stellar keys generate --global developer --network testnet&lt;/p&gt;

&lt;p&gt;Para este caso generamos una identidad global llamada developer en la red de testnet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwej8knz4df3u8nqjkr7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwej8knz4df3u8nqjkr7.png" alt="Image description" width="800" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al abrir el archivo generado vemos que es un contenedor de una frase semilla&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs74muxe51j51kejv0zqh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs74muxe51j51kejv0zqh.png" alt="Image description" width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.stellar.org/docs/tools/developer-tools/cli/stellar-cli#stellar-keys-generate" rel="noopener noreferrer"&gt;más info del comando&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLave publica de la identidad:&lt;/strong&gt;&lt;br&gt;
Para saber cual es la llave pública de una identidad corremos el siguiente comando:&lt;br&gt;
&lt;code&gt;stellar keys address developer&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zsbvm56zwpctxort9fa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zsbvm56zwpctxort9fa.png" alt="Image description" width="784" height="76"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saldo de la cuenta&lt;/strong&gt;&lt;br&gt;
hay 2 formas por web o por comandos&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El modo sencillo, explorador web&lt;/strong&gt;&lt;br&gt;
ingresamos la dirección en esta dirección &lt;a href="https://stellar.expert/explorer/testnet" rel="noopener noreferrer"&gt;https://stellar.expert/explorer/testnet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhx8t3t2b0ooy87qu6v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhx8t3t2b0ooy87qu6v6.png" alt="Image description" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acá vemos que la cuenta viene con 10.000 lumens, lo suficiente para seguir con los ejercicios&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para los amantes de la consola.&lt;/strong&gt; 😉&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Averiguamos en testnet cual es el id de XLM &lt;code&gt;stellar contract id asset --asset native --network testnet&lt;/code&gt;&lt;br&gt;
obtenemos esta respuesta: &lt;em&gt;CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Obtenemos la llave pública de la identidad developer&lt;br&gt;
&lt;code&gt;stellar keys address developer&lt;/code&gt;&lt;br&gt;
obtenemos:&lt;br&gt;
&lt;em&gt;GD45T2VRMYBSGRHLMVTS4QQZVXAM7WD6IYWKYRS7DFURRR2EKWCNGOAN&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ejecutamos los siguiente:&lt;br&gt;
Sintaxis:&lt;br&gt;
&lt;em&gt;&lt;code&gt;stellar contract invoke --id "dirección XLM" --network testnet --source-account developer  -- balance --id "llave pública developer"&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Escribimos lo siguiente:&lt;br&gt;
&lt;code&gt;stellar contract invoke --id CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC --network testnet --source-account developer  -- balance --id GD45T2VRMYBSGRHLMVTS4QQZVXAM7WD6IYWKYRS7DFURRR2EKWCNGOAN&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;La respuesta es:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmlzejw47drtu8go2xfo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvmlzejw47drtu8go2xfo.png" alt="Image description" width="800" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pasar fondos de una billetera a otra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vamos a pasar  100 XLM de la cuenta developer a developer1.&lt;/p&gt;

&lt;p&gt;Sintaxis:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;code&gt;stellar contract invoke --id &amp;lt;asset_contract_ID&amp;gt; --networdk testnet --source-account developer  -- transfer --to &amp;lt;developer1_ID&amp;gt; --from developer --amount 100&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Como es de observar no hemos creado la identidad developer1 por lo tanto ejecutamos: &lt;br&gt;
&lt;code&gt;stellar keys generate --global developer1 --network testnet&lt;/code&gt;&lt;br&gt;
&lt;code&gt;stellar keys address developer1&lt;/code&gt;&lt;br&gt;
obtenemos la siguiente llave pública :&lt;br&gt;
&lt;em&gt;GCETVOMJKZ5OPTBIWBADL2PT6DTL7VPZMS5P4MIAYSINZYH5IIZRE27U&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ahora que tenemos todos los datos ejecutamos:&lt;br&gt;
stellar contract invoke --id  CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC --network testnet --source-account developer  -- transfer --to GCETVOMJKZ5OPTBIWBADL2PT6DTL7VPZMS5P4MIAYSINZYH5IIZRE27U --from developer --amount 1000000000&lt;/p&gt;

&lt;p&gt;Obtenemos lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2b6ney35srkva2elaav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl2b6ney35srkva2elaav.png" alt="Image description" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En un próximo tutorial usaremos el cliente de Stellar para crear un contrato, desplegarlo y ejecutarlo, todo con el cliente de estellar, como podrán sospechar el famoso "hola mundo" 🤗.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Instalación entorno desarrollo Stellar 😎</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Wed, 26 Feb 2025 14:34:27 +0000</pubDate>
      <link>https://dev.to/sergiotechx/instalacion-entorno-desarrollo-stellar-29pp</link>
      <guid>https://dev.to/sergiotechx/instalacion-entorno-desarrollo-stellar-29pp</guid>
      <description>&lt;p&gt;&lt;a href="https://stellar.org/es" rel="noopener noreferrer"&gt;Stellar&lt;/a&gt;  es una veterana cadena de bloques que sigue evolucionando.&lt;/p&gt;

&lt;p&gt;Como siempre fiel a su filosofía, ahora viene con contratos inteligentes en el lenguaje Soroban 🤓.&lt;/p&gt;




&lt;p&gt;Para el desarrollo de contratos y dapps, debemos pensar en 2 partes.&lt;br&gt;
Primero la parte web (nodejs) y luego la parte de contratos ( lenguaje Rust 🦀)&lt;/p&gt;


&lt;h2&gt;
  
  
  Instalación de parte web (nodejs)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NVM&lt;/strong&gt; Node version manager:&lt;br&gt;
Para una instalación más cómoda, instalamos este programa que nos permite una instalación y desistaación de las versionas de nodejs de una manera simple&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Respositorio e instrucciones para Mac y Linux&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer"&gt;https://github.com/nvm-sh/nvm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repositorio e instrcciones para Windows&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/coreybutler/nvm-windows/" rel="noopener noreferrer"&gt;https://github.com/coreybutler/nvm-windows/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez instalado, abrimos la consola y ejecutamos el comando:&lt;br&gt;
&lt;code&gt;nvm&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti68jc7itubs55acvldc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti68jc7itubs55acvldc.png" alt="Image description" width="800" height="241"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Si vemos la lista de comandos de este programa, ya estamos listos para instalar nodejs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación de NodeJS&lt;/strong&gt;&lt;br&gt;
Se abre la terminal y ejecutamos:&lt;br&gt;
&lt;code&gt;nvm install 22.14.0&lt;/code&gt;&lt;br&gt;
Favir consultar la última versión LTS de NodeJS  &lt;a href="https://nodejs.org/es/download" rel="noopener noreferrer"&gt;acá&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jg53ajnqk5hsr0d8eka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9jg53ajnqk5hsr0d8eka.png" alt="Image description" width="800" height="291"&gt;&lt;/a&gt;&lt;br&gt;
Listo, ya tenemos la parte web con nodejs &lt;/p&gt;
&lt;h2&gt;
  
  
  Instalación soporte contratos (rust y estellar client)
&lt;/h2&gt;

&lt;p&gt;Para la instalación de rust, dirigirse a este enlace:&lt;br&gt;
&lt;a href="https://www.rust-lang.org/es/tools/install" rel="noopener noreferrer"&gt;https://www.rust-lang.org/es/tools/install&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sistemas linux:&lt;/strong&gt;&lt;br&gt;
Abrir la consola y seguir los siguientes pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;sudo apt update&lt;/code&gt; &lt;/li&gt;
&lt;li&gt; &lt;code&gt;curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Allí elegimos la opción 1 ( instalación estandar)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Para las compilaciones, tener todo instalado algunas librerias importantes adicionales. &lt;code&gt;sudo apt install build-essential&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Sistemas Windows&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Descargar el ejecutable, se 32 o 64 bits, según la necesidad requerida
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8tww3jvc0xrvo7m9rqt.png" alt="Image description" width="800" height="209"&gt;
&lt;/li&gt;
&lt;li&gt;Descargar los pre requisitos (Rust Visual C++ prerequisites), elegir la opción 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F295lw6uhx2bjqvur7u3f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F295lw6uhx2bjqvur7u3f.png" alt="Image description" width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4oucbov2fdetphfjx3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4oucbov2fdetphfjx3k.png" alt="Image description" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Elegir la opción 1&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayjk8v6kbnbrno337n1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayjk8v6kbnbrno337n1.png" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚨 Para todos los sistemas ejecutamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu
rustup target add wasm32-unknown-unknown 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmene en la consola ponemos &lt;code&gt;rustc -V&lt;/code&gt; para ver la versión que hemos instalado de Rust&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cliente de Stellar&lt;/strong&gt;&lt;br&gt;
Para mac y linux ( en la terminal):&lt;br&gt;
&lt;code&gt;brew install stellar-cli&lt;/code&gt;&lt;br&gt;
Para Windows ( en la terminal)&lt;br&gt;
winget install --id Stellar.StellarCLI --version 22.2.0 &lt;/p&gt;

&lt;p&gt;Una vez instalado en la terminal ejecutamos el comando stellar&lt;br&gt;
( en la terminal)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdzb98ed1b3juug7nu8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdzb98ed1b3juug7nu8t.png" alt="Image description" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Felicidades, ya tienes casi todo lo indispensable para empezar a desarrodar en Stellar 🤠&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Analizando el "Hola mundo" en NEAR Contrato y Frontend 🤠</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Mon, 01 Jul 2024 03:54:31 +0000</pubDate>
      <link>https://dev.to/sergiotechx/analizando-el-hola-mundo-en-near-contrato-y-frontend-1lpf</link>
      <guid>https://dev.to/sergiotechx/analizando-el-hola-mundo-en-near-contrato-y-frontend-1lpf</guid>
      <description>&lt;p&gt;&lt;strong&gt;Primeros pasos contratos inteligentes con NEAR&lt;/strong&gt;&lt;br&gt;
Hola a todos, anteriormente habíamos analizado los pasos básicos del cliente de NEAR basado en RUST. &lt;a href="https://dev.to/sergiotechx/primeros-pasos-con-cliente-de-near-escrito-en-rust-near-cli-rs-4amn"&gt;Cliente rust&lt;/a&gt;. El día de hoy vamos dar los primeros pasos en los contratos inteligentes en NEAR.&lt;/p&gt;

&lt;p&gt;Los contratos en NEAR tradicionalmente se han hecho en el lenguaje RUST, afortunadamente han tenido la buena idea de optar por usar librerías de RUST y no han creado ningún lenguaje único  y propietario de NEAR, por lo tanto las personas que manejan RUST escribir contratos inteligentes va a ser algo poco complejo. &lt;/p&gt;

&lt;p&gt;Lamentablemente RUST a pesar de ser el lenguaje más “amado 😍” su sintaxis no es en lo absoluto similar a lenguajes como C. C++, C#, JAVA, Javascript, Python, etc…lo cual requiere ponerle amor y dedicación a este lenguaje, ya que es un lenguaje que definitivamente es el presente y futuro en soluciones blockchain.&lt;/p&gt;

&lt;p&gt;Por fortuna al generar los contratos inteligentes en NEAR, se genera un WebAssembly, y es por ello que el equipo de NEAR también ha pensado en lenguajes más populares para generar este mismo WebAssembly como lo es JavaScript, el cual es  muy conocido, popular y ampliamente usado.  Este artículo mostrará como se basará en generación de contratos mediante JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpkfl8yqys4ic1zq2cp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frpkfl8yqys4ic1zq2cp7.png" alt="Image description" width="259" height="194"&gt;&lt;/a&gt;&lt;br&gt;
              &lt;em&gt;Su majestad Webassembly al rescate!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisitos:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxpp6t7pag5gwvw6shxb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxpp6t7pag5gwvw6shxb.png" alt="Image description" width="300" height="158"&gt;&lt;/a&gt;&lt;br&gt;
Para los usuarios de Windows , &lt;strong&gt;si o si&lt;/strong&gt;, por el momento hay que usar WSL, en el cliente NEAR y la instalación de NodeJS&lt;/p&gt;

&lt;p&gt;1)  Instalación del cliente de NEAR ( mejor el de RUST)&lt;br&gt;
2)  Instalación de NodeJS&lt;/p&gt;

&lt;p&gt;Para el paso 2, es más práctico usar NVM : Node Version Manager&lt;br&gt;
Para instalar el nvm vamos al link oficial de este proyecto&lt;br&gt;
&lt;a href="https://github.com/nvm-sh/nvm"&gt;https://github.com/nvm-sh/nvm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una ves instalado el NVM vamos a &lt;a href="https://nodejs.org/en"&gt;https://nodejs.org/en&lt;/a&gt; y vemos la última versión LTS ( al día de este artículo es la versión 20.14.0), procedemos a instalarla de la siguiente manera:&lt;br&gt;
&lt;code&gt;nvm install 20.14.0&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fernc79j333m6jlxc00p8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fernc79j333m6jlxc00p8.png" alt="Image description" width="800" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora vamos a empezar con el clásico Hola mundo &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxyelsllydfn9njltwmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxyelsllydfn9njltwmq.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la terminal escribimos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-near-app@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxt358u6yr3gzsjaluy8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxt358u6yr3gzsjaluy8b.png" alt="Image description" width="800" height="185"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Seleccionamos A Smart Contract&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbuanu79c1i68k9zme07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbuanu79c1i68k9zme07.png" alt="Image description" width="800" height="254"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos sobre que lenguaje deseamos trabajar, para este caso en JS/TS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfguvloiytbfqx9u4re1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxfguvloiytbfqx9u4re1.png" alt="Image description" width="800" height="295"&gt;&lt;/a&gt;&lt;br&gt;
Le damos un nombre al proyecto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggwcl45fbnes7ovsb67e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggwcl45fbnes7ovsb67e.png" alt="Image description" width="800" height="188"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos la opción “Y” para instalar el sdk de NEAR&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp44dx8e0fnnvcevoy0hk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp44dx8e0fnnvcevoy0hk.png" alt="Image description" width="800" height="209"&gt;&lt;/a&gt;&lt;br&gt;
Listo , ya tenemos creado el ambiente para crear contratos en NEAR 😊&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc72sng716dbx89u71u8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc72sng716dbx89u71u8g.png" alt="Image description" width="800" height="404"&gt;&lt;/a&gt;&lt;br&gt;
Ingresamos al directorio hola mundo con el comando :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; cd hola-mundo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y allí escribimos: &lt;code&gt;code .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Análisis del contrato hola mundo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnkn2yotk3aqjr7ecqla.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdnkn2yotk3aqjr7ecqla.png" alt="Image description" width="769" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;import { NearBindgen, near, call, view } from 'near-sdk-js';&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NearBindgen&lt;/strong&gt; Es el decorador de facto que se usa al empezar todos los contratos en NEAR.&lt;br&gt;
&lt;strong&gt;Near:&lt;/strong&gt; tiene las primitivas de envío de fondos, altura del bloque, y logs, entre otros&lt;br&gt;
&lt;strong&gt;call:&lt;/strong&gt; Llamado a métodos del contrato que cambian estados del contrato ( escritura) y poseen un coste asociado a la operación&lt;br&gt;
&lt;strong&gt;view:&lt;/strong&gt; Llamado a métodos del contrato de sólo lectura.&lt;/p&gt;

&lt;p&gt;greeting: string = 'Hello';&lt;/p&gt;

&lt;p&gt;Atributo de clase tipo string , lo clásico de un hola mundo con clases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@view({}) // This method is read-only and can be called for free
  get_greeting(): string {
    return this.greeting;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tenemos el decorador que es una función de sólo lectura y su implementación no tiene alguna particularidad diferente al estándar de typescript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@call({}) // This method changes the state, for which it cost gas
  set_greeting({ greeting }: { greeting: string }): void {
    near.log(`Saving greeting ${greeting}`);
    this.greeting = greeting;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tenemos el decorador que es una operación de escritura.&lt;br&gt;
Como particularidad en los parámetros, difiere un poco a como se usan los parámetros en una función normal donde sólo sería (greeting:string):void  y en la parte izquierda se ponen los parámetros y en la derecha se especifican su tipo.&lt;br&gt;
Algo muy interesante es que podemos guardar los logs en la blockchain, siempre y cuando sean muy relevantes, ya que tienen un costo asociado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compilación del contrato&lt;/strong&gt;&lt;br&gt;
Ejecutamos el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv6qiqp26wl45e7m0qmb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuv6qiqp26wl45e7m0qmb.png" alt="Image description" width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si somos observadores, vemos que se ha creado una carpeta llamada build con un código en WebAssembly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F496bnryrbyas5s7jr5fw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F496bnryrbyas5s7jr5fw.png" alt="Image description" width="269" height="192"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Creación de subcuentas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A diferencia de las EVM, donde un contrato es un ente autónomo donde una billetera (address) paga un fee por su despliegue y nada más, en NEAR los contratos se asocian a una dirección. &lt;br&gt;
Por ello lo más común es crear algo llamado subcuentas, una subcuenta aplica lo mismo que los domnios y subdominios de internet.&lt;br&gt;
&lt;strong&gt;EJ:&lt;/strong&gt; &lt;em&gt;neacolombiadev.testnet&lt;/em&gt; es  la cuenta principal ( dominio)&lt;br&gt;
Una subcuenta para este ejemplo seria &lt;em&gt;holamundo.nearcolombiadev.testnet&lt;/em&gt;&lt;br&gt;
No hay limite de subcuentas, entonces no tendríamos problema con el despliegue de contatos.&lt;br&gt;
Para crear una subcuenta entramos al cliete de near y ponemos la opción de account&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3wvsl1yyycq4w3pr2ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3wvsl1yyycq4w3pr2ea.png" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ponemos la opción de create-account&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F734tsl5yqoc1mns01okd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F734tsl5yqoc1mns01okd.png" alt="Image description" width="800" height="191"&gt;&lt;/a&gt;&lt;br&gt;
Opción fund-myself&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7x59flzsdt2gjc1f5kdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7x59flzsdt2gjc1f5kdh.png" alt="Image description" width="800" height="179"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos el nombre de la subcuenta: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbx1sfaeiwgdwexfaqpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbx1sfaeiwgdwexfaqpb.png" alt="Image description" width="800" height="142"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos la verificación que la subcuenta no exista&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv5b1l2k33utp0pwdzdx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwv5b1l2k33utp0pwdzdx.png" alt="Image description" width="800" height="240"&gt;&lt;/a&gt;&lt;br&gt;
Indicamos la cantidad de near con que deseamos darle fondos a la cuenta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiz3jxjdya68hb6054mt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiz3jxjdya68hb6054mt9.png" alt="Image description" width="800" height="247"&gt;&lt;/a&gt;&lt;br&gt;
Elegimos la opción de generar la llave automáticamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc6uaaizfzl12l29soefm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc6uaaizfzl12l29soefm.png" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos la opción de grabar en el sistema legacy&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8tgzle21j7rr7577efp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8tgzle21j7rr7577efp.png" alt="Image description" width="800" height="351"&gt;&lt;/a&gt;&lt;br&gt;
Elegimos opción de testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0njjewdl0ddtn81gxcba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0njjewdl0ddtn81gxcba.png" alt="Image description" width="800" height="348"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos sign-with-key-chain&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonrrwqee4pkewo7xfc9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fonrrwqee4pkewo7xfc9v.png" alt="Image description" width="800" height="193"&gt;&lt;/a&gt;&lt;br&gt;
Finalmente la opción de  de send&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8k3z4k15djutrza13trm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8k3z4k15djutrza13trm.png" alt="Image description" width="800" height="210"&gt;&lt;/a&gt;&lt;br&gt;
En el explorador de bloques vemos nuestra subcuenta creada exitosamente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzsga7i5tl0qgul751jg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwzsga7i5tl0qgul751jg.png" alt="Image description" width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
En la cuenta de nearcolombiadev.testnet teníamos 10 NEAR, menos el conste de la creación de la subcuenta y fondeo , podemos ver el nuevo saldo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifl6ud2w8nmbsbps9p7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifl6ud2w8nmbsbps9p7e.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;Despliegue del contrato&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Si por alguna razón nos quedamos sin fondos, podemos ir a la faucet de near:&lt;br&gt;
&lt;a href="https://near-faucet.io/"&gt;https://near-faucet.io/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Por la terminal ingresamos al cliente de near y seleccionamos la opción de contrato.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxb0awesuobw0p7hj8n9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxb0awesuobw0p7hj8n9.png" alt="Image description" width="800" height="161"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos deploy&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0kk820i5danl5d6f5sca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0kk820i5danl5d6f5sca.png" alt="Image description" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Elegimos la cuenta con la que queremos hacer el deploy, en este caso holamundo.colombiadev.testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fievcqdnt5kqdfh3511dk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fievcqdnt5kqdfh3511dk.png" alt="Image description" width="800" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ponemos la ruta del contrato compilado:   &lt;em&gt;./build/hello_near.wasm&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f41morbo1kr80jp7l4z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f41morbo1kr80jp7l4z.png" alt="Image description" width="275" height="164"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa13eq1ynsib0fmbcw41g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa13eq1ynsib0fmbcw41g.png" alt="Image description" width="800" height="105"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ponemos la opción without-init-call: el init call es el “constructor” de la clase y se pueden poner parámetros”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu5rymkxk20j0l5vfuja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu5rymkxk20j0l5vfuja.png" alt="Image description" width="800" height="176"&gt;&lt;/a&gt;&lt;br&gt;
Elegimos que va para testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjln3ze5izmpj2baxl8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjln3ze5izmpj2baxl8e.png" alt="Image description" width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Opción sign-with-keychain&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f1whlwxziul4n0e8ck2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f1whlwxziul4n0e8ck2.png" alt="Image description" width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente en send&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbubqetocs3mtlfqft1l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbubqetocs3mtlfqft1l.png" alt="Image description" width="800" height="78"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si todo sale exitoso: vamos al nuevo explorador de bloques&lt;/p&gt;

&lt;p&gt;&lt;a href="https://testnet.nearblocks.io/"&gt;https://testnet.nearblocks.io/&lt;/a&gt;&lt;br&gt;
Allí ponemos la subcuenta que creamos anteriormente: holamundo.nearcolombiadev.testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs3itiujb99ghlz1sw63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs3itiujb99ghlz1sw63.png" alt="Image description" width="800" height="212"&gt;&lt;/a&gt;&lt;br&gt;
En el explorador de bloques vemos la transacción de despliegue de contratos y podemos ver los métodos del contrato por la opción contract&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fr251au3smurlp24d8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9fr251au3smurlp24d8q.png" alt="Image description" width="800" height="179"&gt;&lt;/a&gt;&lt;br&gt;
Click en contract methods&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod631zpb9i45ar6m1xfm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod631zpb9i45ar6m1xfm.png" alt="Image description" width="800" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Cómo interactuar con el contrato&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Lo podemos hacer por el cliente de near o por la página &lt;a href="https://testnet.nearblocks.io/"&gt;https://testnet.nearblocks.io/&lt;/a&gt;&lt;br&gt;
Empecemos de la forma fácil y visual, por nearblocks! 😉&lt;br&gt;
Primero debemos ingresar por sign in&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5cn0vpeto52s9zz4e23n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5cn0vpeto52s9zz4e23n.png" alt="Image description" width="800" height="84"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos la billetera:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8jg4dizc3r1iw9ulk8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8jg4dizc3r1iw9ulk8y.png" alt="Image description" width="800" height="1007"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En nuestro caso particular tenemos la cuenta asociada con meteorWallet&lt;/p&gt;

&lt;p&gt;Super importante la pantalla  siguiente: sólo autorizamos a saber billeteras y saldos, pero no a realizar transacciones o firmar transacciones a nombre de nosotros!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqegwol4w8vb3w31pq68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqegwol4w8vb3w31pq68.png" alt="Image description" width="591" height="1017"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación vamos a poner la dirección donde tenemos el contrato:&lt;br&gt;
&lt;em&gt;holamundodev.testnet&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfb7e22j4g5a8hokp8gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgfb7e22j4g5a8hokp8gc.png" alt="Image description" width="800" height="152"&gt;&lt;/a&gt;&lt;br&gt;
Entramos por la parte de contrato:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2tdpv66s8ic786palip1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2tdpv66s8ic786palip1.png" alt="Image description" width="800" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos contract methods&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb1qw6jatkmbxrd9rkjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb1qw6jatkmbxrd9rkjh.png" alt="Image description" width="561" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt6d4ejtzd1a6hg90won.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgt6d4ejtzd1a6hg90won.png" alt="Image description" width="800" height="162"&gt;&lt;/a&gt;&lt;br&gt;
Verificamos que estemos conectados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Llamado de lectura&lt;/strong&gt; &lt;em&gt;get_greeting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Desplegamos get_greeting y click en query&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fempw81g2q3b297258zgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fempw81g2q3b297258zgv.png" alt="Image description" width="800" height="220"&gt;&lt;/a&gt;&lt;br&gt;
Acá observamos  el contenido de la variable greeting del contato&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Llamado de escritura:&lt;/strong&gt; &lt;em&gt;set_greeting&lt;/em&gt;&lt;br&gt;
Ampliamos &lt;em&gt;set_greeting&lt;/em&gt;, click en add  en arguments, el parámetro se llama greeting y es tipo string, Ponemos el valor deseado y click en write&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F798vu7wkxfvkeotlceyf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F798vu7wkxfvkeotlceyf.png" alt="Image description" width="800" height="279"&gt;&lt;/a&gt;&lt;br&gt;
Damos click en confirmar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fck8cq4yun5vakwixokn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fck8cq4yun5vakwixokn6.png" alt="Image description" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A continuación sale el fee que se va a gastar y le damos aprobar a la billetera&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhvqdzxhuzwksglpauxqn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhvqdzxhuzwksglpauxqn.png" alt="Image description" width="589" height="1000"&gt;&lt;/a&gt;&lt;br&gt;
Para confirmar el nuevo valor podemos  usar el método get_greeting&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79q2j9pdbj0ny4w4kom8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79q2j9pdbj0ny4w4kom8.png" alt="Image description" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora hagámoslo con el cliente de near , ( para los amantes de la consola 😎)&lt;br&gt;
&lt;strong&gt;Llamado de lectura&lt;/strong&gt; &lt;em&gt;get_greeting&lt;/em&gt;&lt;br&gt;
1)  Por terminal ponemos near&lt;br&gt;
2)  Seleccionamos contract&lt;br&gt;
3)  Call-function&lt;br&gt;
4)  As-read-only&lt;br&gt;
5)  Seleccionamos la cuenta holamundo.nearcolombiadev.testnet&lt;br&gt;
6)  Ponemos que la función es: get_greeting&lt;br&gt;
7)  Seleccionamos que los parámetros son json-args&lt;br&gt;
8)  Como no hay parámetros escribimos {}&lt;br&gt;
9)  Seleccionamos que está en testnet&lt;br&gt;
10) Finalmente ponemos que lo queremos realizar con la altura del bloque actual&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl43i83emq69ltgi9suze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl43i83emq69ltgi9suze.png" alt="Image description" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Llamado de escritura:&lt;/strong&gt; &lt;em&gt;set_greeting&lt;/em&gt;&lt;br&gt;
1)  Llamamos a termnial el programa de near&lt;br&gt;
2)  Opción contract&lt;br&gt;
3)  Opción Call-function&lt;br&gt;
4)  Opción as-transaction&lt;br&gt;
5)  Opción holamundo.nearcolombiadev.testnet&lt;br&gt;
6)  La función es : set_greeting&lt;br&gt;
7)  Opción json-args&lt;br&gt;
8)  Escriibimos el parámetro en formato json {"greeting":"Hola desde la consola 😍"}&lt;br&gt;
9)  Dejamos por defecto el valor sugerido de la aplicación del gas a pagar&lt;br&gt;
10) No hay desposito, entonces lo dejamos en 0NEAR&lt;br&gt;
11) Seleccionamos desde que cuenta lo queremos firmar, para este caso desde nearcolombiadev.testnet&lt;br&gt;
12) Opción testnet&lt;br&gt;
13) Opción sign-with-keychain&lt;br&gt;
14) Finalmente en send&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcajoijlspd0zz9308xs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcajoijlspd0zz9308xs.png" alt="Image description" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos repetir desde consola para ver el valor nuevo en la variable del contrato&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcod39auhmxytxarefpyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcod39auhmxytxarefpyg.png" alt="Image description" width="541" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Y donde dejamos a near.log del contato?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta opción se graba por cada transacción, en este caso al revisar la última transacción de escritura &lt;br&gt;
&lt;a href="https://testnet.nearblocks.io/en/txns/7HKTJGu5AVYoXL9ccWLx5SN8j6mNqXzrmzstCpm2Dxm7?tab=execution"&gt;https://testnet.nearblocks.io/en/txns/7HKTJGu5AVYoXL9ccWLx5SN8j6mNqXzrmzstCpm2Dxm7?tab=execution&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbum53rzupy7lg0xenz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkwbum53rzupy7lg0xenz.png" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;br&gt;
Podemos ver claramente donde se guardan los logs. Estos deben ser bien pensados, que sea algo relevante con fines de auditoria, seguimiento o información relevante.&lt;/p&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F624h1csbj3wq94kscxi7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F624h1csbj3wq94kscxi7.png" alt="Image description" width="546" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora vamos a realizar la parte web. Near de por si crea toda la app por defecto del “hola mundo”, esto implica contrato y conexión a la billetera, pero obviamente otro contrato y no el de nosotros, así también apenas tiene conexiones por defecto a HereWallet y MyNear Wallet. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primeros pasos:&lt;/strong&gt;&lt;br&gt;
En la terminal escribimos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-near-app@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3la8dh30lfijpog2dttx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3la8dh30lfijpog2dttx.png" alt="Image description" width="800" height="192"&gt;&lt;/a&gt;&lt;br&gt;
Elegimos que es una Web app&lt;br&gt;
Esta para Next-JS, por convenciones más actualizadas, seleccionamos ( App-Router)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspqoakpx6idluhygggvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fspqoakpx6idluhygggvu.png" alt="Image description" width="800" height="87"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos que no queremos componentes BOS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkvuurekaevy34xlm01m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frkvuurekaevy34xlm01m.png" alt="Image description" width="800" height="67"&gt;&lt;/a&gt;&lt;br&gt;
Para este ejemplo ponemos de nombre del proyecto: hello-near-web&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy76dk4fwznywidmlbi3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy76dk4fwznywidmlbi3.png" alt="Image description" width="800" height="28"&gt;&lt;/a&gt;&lt;br&gt;
Finalmente ponemos en Y que deseamos instalar los módulos necesarios para poder ejecutar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0rfojgc6mtl8thent1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0rfojgc6mtl8thent1x.png" alt="Image description" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puedes ejecutar el programa tal cual está, pero, hagámosle unas adaptaciones 👨‍🔧&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzz0ighx53uicmjw80u7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzz0ighx53uicmjw80u7a.png" alt="Image description" width="430" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos ubicamos en el directorio generado hello-near-web y abrimos el visual studio code o editor favorito.&lt;/p&gt;

&lt;p&gt;En &lt;em&gt;config.js&lt;/em&gt; vemos que tenemos las subcuentas donde  tenemos alojado el contrato.&lt;br&gt;
Cómo estamos ejecutando todo el tutorial en testnet, reemplazamos la subcuenta &lt;em&gt;holamundo.nearcolombiadev.testnet&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh5huitvxjioini5ptap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh5huitvxjioini5ptap.png" alt="Image description" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuldwag6chjifd4zaczlo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuldwag6chjifd4zaczlo.png" alt="Image description" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Abrimos la carpeta wallets y abrimos el archivo &lt;em&gt;near.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar sólo hay 2 billeteras instaladas, para que el usuario elija, estas son HereWallet y MyNearWallet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F478em4ejvma67dqr3hgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F478em4ejvma67dqr3hgw.png" alt="Image description" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para añadir más billeteras entramos al buscardor de paquetes &lt;a href="https://www.npmjs.com/"&gt;Para añadir más billeteras entramos al buscardor de paquetes https://www.npmjs.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Allí ponemos en la búsqueda lo siguiente: _ @near-wallet-selector_.&lt;/p&gt;

&lt;p&gt;Aparecen más billeteras, sólo es instalar las billeteras que deseamos incluir en la lista de billeteras que el usuario desee elegir.&lt;/p&gt;

&lt;p&gt;Para nuestro caso vamos a incluir la billetera meteor&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fof8o44f4ncp1lkznpe2o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fof8o44f4ncp1lkznpe2o.png" alt="Image description" width="800" height="439"&gt;&lt;/a&gt;&lt;br&gt;
Ingresamos a este link: &lt;a href="https://www.npmjs.com/package/@near-wallet-selector/meteor-wallet"&gt;https://www.npmjs.com/package/@near-wallet-selector/meteor-wallet&lt;/a&gt; Y seguimos las instrucciones para su instalación.&lt;br&gt;
&lt;code&gt;npm install @near-wallet-selector/meteor-wallet&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Luego incluimos el import del instructivo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { setupMeteorWallet } from "@near-wallet-selector/meteor-wallet";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente incluimos &lt;em&gt;setupMeteorWallet&lt;/em&gt; en la parte de modules&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2oyrpwtyhgdcwddwkzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2oyrpwtyhgdcwddwkzy.png" alt="Image description" width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ivf4zgundenqpm308if.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ivf4zgundenqpm308if.png" alt="Image description" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eywiyd0467iaggow1wj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eywiyd0467iaggow1wj.png" alt="Image description" width="663" height="186"&gt;&lt;/a&gt;&lt;br&gt;
Si no eres análitico y no deseas ir a fondo eso es todo, ya puede ejecutar el front 😆&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Y donde se invocan los métodos de lectura y escritura del contrato?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnda023skvbz8mrdyhw42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnda023skvbz8mrdyhw42.png" alt="Image description" width="315" height="296"&gt;&lt;/a&gt;&lt;br&gt;
Dentro de la carpeta &lt;em&gt;app/hello-near&lt;/em&gt; está el archivo &lt;em&gt;page.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr13jce3u5hanntw9lp5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr13jce3u5hanntw9lp5.png" alt="Image description" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Función de lectura:&lt;/strong&gt;&lt;br&gt;
Acá vemos que al empezar el user effect llamamos el llamado al método tipo de lectura “&lt;em&gt;ViewMethod&lt;/em&gt;” con parámetos del contrato y su respectivo método&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bejiithd97p3y867z12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bejiithd97p3y867z12.png" alt="Image description" width="800" height="137"&gt;&lt;/a&gt;&lt;br&gt;
Si sómos analíticos, vemos que el objeto wallet está dentro del &lt;em&gt;context.js&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27o67x40hfk8xkzlfy50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27o67x40hfk8xkzlfy50.png" alt="Image description" width="473" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El objeto wallet no pertenece a la el sdk de near, es algo generardo localmente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f4fv2b0zramqjkes3n9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9f4fv2b0zramqjkes3n9.png" alt="Image description" width="800" height="254"&gt;&lt;/a&gt;&lt;br&gt;
La clase Wallet  nos crea una capa de abstracción para usarlo más facilmente los llamados al SDK de near en operaciones de lectura y escritura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg06obeumvfymi94nzpz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbg06obeumvfymi94nzpz.png" alt="Image description" width="523" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el llamado vemos que si tenemos un RPC (proveedor de servicio), donde se va la cuenta , para este caso hola-mundo.nearcolombiadev.testnet, el método get_greeting y sin ningún parámeto {}&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcendexmfbh38c7rsx2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcendexmfbh38c7rsx2l.png" alt="Image description" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Función de escritura:&lt;/strong&gt;&lt;br&gt;
Volviendo  a &lt;em&gt;page.js&lt;/em&gt; dentro de la carpeta _hello-nea_r,se invoca la escritura y luego la parte de lectura para reflejar el cambio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuqaxdax2lt6rsqu6hwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffuqaxdax2lt6rsqu6hwi.png" alt="Image description" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En near.js dentro del directorio wallet, vemos que no se interactúa con un RPC, se interactúa con la billetera que hayamos  seleccionado al hacer login, y se hace la operación firmándola y enviando la transacción.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchapt2yfm2fc5dhj7fln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchapt2yfm2fc5dhj7fln.png" alt="Image description" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora si, vamos a correr esta aplicación:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le damos click en &lt;em&gt;near integration&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firvjvxch6o8mz5c3x47s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firvjvxch6o8mz5c3x47s.png" alt="Image description" width="800" height="484"&gt;&lt;/a&gt;&lt;br&gt;
Ya podemos ver el método de lectura de contrato&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxmv5b8qcmbae33mzh3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxmv5b8qcmbae33mzh3l.png" alt="Image description" width="731" height="223"&gt;&lt;/a&gt;&lt;br&gt;
Si damos click en  &lt;em&gt;login&lt;/em&gt; vemos que ya incorpora la billetera de Meteor&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmmlnamiix7nkyxpagiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftmmlnamiix7nkyxpagiq.png" alt="Image description" width="196" height="282"&gt;&lt;/a&gt;&lt;br&gt;
 Y ya estamos en la capacidad de grabar un nuevo saludo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua77qtdslp0yyl9s4c24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua77qtdslp0yyl9s4c24.png" alt="Image description" width="364" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf25fpsvv0wit92go03q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf25fpsvv0wit92go03q.png" alt="Image description" width="657" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bueno, esperamos que haya quedado un poco claro cómo funcionan estos contratos y su parte web.&lt;/p&gt;

&lt;p&gt;La base que deja NEAR con viewMethod y callMethod en near.js prácticamente los podemos usar para nuestros propios llamados a los métodos de cualquier contrato en la parte web.&lt;br&gt;
Hasta la próxima 🤗.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Código fuente:&lt;/strong&gt; &lt;a href="https://github.com/sergiotechx/near-Hello-World"&gt;github&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Primeros pasos con cliente de NEAR escrito en RUST NEAR-CLI-RS 😎</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Mon, 01 Jul 2024 00:25:28 +0000</pubDate>
      <link>https://dev.to/sergiotechx/primeros-pasos-con-cliente-de-near-escrito-en-rust-near-cli-rs-4amn</link>
      <guid>https://dev.to/sergiotechx/primeros-pasos-con-cliente-de-near-escrito-en-rust-near-cli-rs-4amn</guid>
      <description>&lt;p&gt;En el mundo de las programación es muy importante contar con una herramienta que nos facilite en extremo operaciones del día como son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creación de cuentas: Mainnet y Testnet.&lt;/li&gt;
&lt;li&gt;Creación de subcuentas; Mainnet y Testnet.&lt;/li&gt;
&lt;li&gt;Transferencia de tokens: Fungibles y no fungibles.&lt;/li&gt;
&lt;li&gt;Desplegar contratos: Mainnet y Testnet.&lt;/li&gt;
&lt;li&gt;Ejecución de los métodos de los contratos: Métodos de lectura y métodos de escritura.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En NEAR tradicionalmente esto se hacía con el near-cli basado en Nodejs, pero NEAR pensando en hacer la vida más fácil a los dev ha sacado esta herramienta basada en RUST, lo cual la convierte en una herramienta más potente y eficiente 🤗.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link de descarga:&lt;/strong&gt; &lt;a href="https://near.cli.rs/"&gt;https://near.cli.rs/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por ahora este link hace una redirección al respositorio de código de github: &lt;a href="https://github.com/near/near-cli-rs"&gt;https://github.com/near/near-cli-rs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Descarga e instalación:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9og7y7dnf8v77mkqjsy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9og7y7dnf8v77mkqjsy3.png" alt="Image description" width="357" height="717"&gt;&lt;/a&gt;&lt;br&gt;
A la fecha del artículo relativamente hace poco salió una actualización del cliente con  la versión 0.10.2, cuando lo vayan a bajar click en el último reléase para que bajen el cliente más actualizado.&lt;br&gt;
La forma más sencilla es bajando los binarios precompilados:&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Instalación en Linux y mac:&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Ejecutar el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl --proto '=https' --tlsv1.2 -LsSf https://github.com/near/near-cli-rs/releases/download/v0.10.2/near-cli-rs-installer.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Instalación en Windows:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Ejecutar el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irm https://github.com/near/near-cli-rs/releases/download/v0.10.2/near-cli-rs-installer.ps1 | iex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sub0zh1s78s6vhwi7qr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sub0zh1s78s6vhwi7qr.png" alt="Image description" width="800" height="125"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uti38s4hicaxglhs85m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3uti38s4hicaxglhs85m.png" alt="Image description" width="800" height="114"&gt;&lt;/a&gt;&lt;br&gt;
A diferencia del cliente tradicional de near escrito en nodejs que por la dependencia de módulos puede ser muy grande este sólo ocupa 20 megas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manejo básico de cliente&lt;/strong&gt;&lt;br&gt;
Se escribe en consola el comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;near
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweu3xq1lczf72owfx5le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fweu3xq1lczf72owfx5le.png" alt="Image description" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar a diferencia del cliente tradicional, este es mucho intuitivo y nos muestra que opciones tenemos, prácticamente es elegir que opción deseamos usar y seguir un paso a paso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creación de cuentas:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9elib6nmcp74tq6mcvh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9elib6nmcp74tq6mcvh3.png" alt="Image description" width="800" height="202"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos la opción account y enter&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4ho580vgd6z4p64mghc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4ho580vgd6z4p64mghc.png" alt="Image description" width="800" height="194"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos la opción create-account y enter&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgft5hjr7hmvrfu5e9cg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgft5hjr7hmvrfu5e9cg.png" alt="Image description" width="800" height="182"&gt;&lt;/a&gt;&lt;br&gt;
Se puede dar la opción de sponsor-by-faucert-service o fund-myself, esto con el fin de poder crear una cuenta con un nombre memotectnico como nearcolombia.testnet y no un código hexadecimal de muy difícil memorización.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forla81b38z8xb83uumeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Forla81b38z8xb83uumeu.png" alt="Image description" width="800" height="121"&gt;&lt;/a&gt;&lt;br&gt;
Para este caso elegimos que nos de fondos de la faucet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpod37uk2k2weu840fc7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpod37uk2k2weu840fc7.png" alt="Image description" width="800" height="112"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos el nombre de la cuenta que deseamos crear, en este caso nearcolombiadev.testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tvo6wya7eajtoo6gcan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tvo6wya7eajtoo6gcan.png" alt="Image description" width="800" height="115"&gt;&lt;/a&gt;&lt;br&gt;
Si no estamos seguros elegimos que nos verifique si esta cuenta no existe&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5drzbmn58ntnj4l07wlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5drzbmn58ntnj4l07wlj.png" alt="Image description" width="800" height="114"&gt;&lt;/a&gt;&lt;br&gt;
Ponemos que las llaves las genere automáticamente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr91459zkavc1zij419p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyr91459zkavc1zij419p.png" alt="Image description" width="800" height="122"&gt;&lt;/a&gt;&lt;br&gt;
Elegimos la primera opción a no ser que se quiera guardar una compatibilidad con el cliente de Nodejs  y se pone  la segunda opción.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p7e2ebl2x9zo8hv3m2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p7e2ebl2x9zo8hv3m2z.png" alt="Image description" width="800" height="141"&gt;&lt;/a&gt;&lt;br&gt;
En este caso elegimos testnet&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzail1ud32kp2aawb8qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzail1ud32kp2aawb8qw.png" alt="Image description" width="800" height="215"&gt;&lt;/a&gt;&lt;br&gt;
Aparece un resumen de lo que vamos a realizar y se procede con la opción créate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhoiluwx3ya4w9b2he955.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhoiluwx3ya4w9b2he955.png" alt="Image description" width="800" height="219"&gt;&lt;/a&gt;&lt;br&gt;
Finalmente se crea la cuenta, aparece el link de la transacción y como se puede crear  la cuenta con una instrucción completa y sin paso a paso.&lt;/p&gt;

&lt;p&gt;Al entrar al link de la transacción verificamos que todo está creado correctamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyhfobl1pijut3asdmnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyhfobl1pijut3asdmnc.png" alt="Image description" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cómo ver el saldo de una cuenta&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbf5p0j5p0rezzs9rnon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbf5p0j5p0rezzs9rnon.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entramos a near, opción de &lt;em&gt;cuentas-&amp;gt;view-account-summary-&amp;gt;&lt;/em&gt; ponemos la cuenta que queremos ver-&amp;gt;si de es de testnet o mainnet-&amp;gt;la altura del bloque o en el último bloque. &lt;/p&gt;

&lt;p&gt;En conclusión el nuevo cliente cumple a cabalidad las necesidades que se necesitan día a día como desarrollador y es sumamente intuitivo.&lt;/p&gt;

&lt;p&gt;Sólo es seguir las instrucciones paso a paso para hacer lo que necesitamos sin tener que memorizar ningún comando en especial.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Primeras aventuras en sway</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Mon, 03 Apr 2023 22:12:15 +0000</pubDate>
      <link>https://dev.to/sergiotechx/primeras-aventuras-en-sway-4oh5</link>
      <guid>https://dev.to/sergiotechx/primeras-aventuras-en-sway-4oh5</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexce8lggftbv5f1u24y6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexce8lggftbv5f1u24y6.png" alt="Image description" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hola a  todos:&lt;/p&gt;

&lt;p&gt;Después de pasar por mi primera hackathon en modalidad física, me llevo muchas alegrías de ver una plataforma que promete mucho. Esta plataforma se llama &lt;a href="https://www.fuel.network/"&gt;Fuel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Para no hechar una historia larga, se trata de una blockchain modular y está especializada en la capa de ejecución, esto quiere decir que esta capa de ejecución es una alternativa a todas las L2 que hay en sistemas etherum y puede estar en otras blockchain :)&lt;/p&gt;

&lt;p&gt;Fuel network maneja su propia maquina virtual y lenguaje, y esto es algo positivo ya que solidity no ha podido dar avances más agresivos en su evolución como lenguaje por cuidar la retrocompatibilidad.&lt;/p&gt;

&lt;p&gt;El lenguaje se llama &lt;a href="https://fuellabs.github.io/sway/v0.34.0/book/reference/"&gt;sway&lt;/a&gt;, inspirado en Rust, diría que muy similar a rust, lo cual es tendencia ahora en las nuevas generaciones de soluciones de blockchain con todos sus beneficios y complejidades que esto implica.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;A continuación vamos a realizar nuestro primer ejercicio paso a paso, desde un contrato básico, hasta llevarlo a interactuar con una interfaz web.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Antes que todo este tutorial se basa en este código&lt;br&gt;
&lt;em&gt;código fuente original:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FuelLabs/quickstart"&gt;https://github.com/FuelLabs/quickstart&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;La instalación:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;funciona para cualquier solución linux compatible, Linux, mac y Windows( bajo wsl2)&lt;br&gt;
Se baja y ejecuta esta instrucción&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl --proto '=https' --tlsv1.2 -sSf https://install.fuel.network/fuelup-init.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instrucciones completas acá:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://install.fuel.network/master/installation/index.html"&gt;https://install.fuel.network/master/installation/index.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;creamos un directorio, y dentro de este directorio ejecutamos la siguiente instrucción &lt;/p&gt;

&lt;p&gt;&lt;code&gt;forc new countersm&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;entramos al directorio countersm/src y cambiamos el código de main.sw por el siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;contract;

storage {
    counter: u64 = 0,
}

abi Counter {
    #[storage(read, write)]
    fn increment();

    #[storage(read)]
    fn count() -&amp;gt; u64;
}

impl Counter for Contract {
    #[storage(read)]
    fn count() -&amp;gt; u64 {
        storage.counter
    }

    #[storage(read, write)]
    fn increment() {
        storage.counter = storage.counter + 1;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Storage&lt;/strong&gt;&lt;br&gt;
Estructuras "globales" y de acceso a todo el contrato.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;abixxx&lt;/strong&gt;&lt;br&gt;
Definiciones genéricas de todas las funciones&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;impl xxx for Contract&lt;/strong&gt;&lt;br&gt;
Implementación del abi&lt;/p&gt;

&lt;p&gt;Que nos obliguen a tener una estructura clara, nos da orden en el código :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; para el diario transcurrir, se recomienda editar el código con VS-code más la extensión de sway&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj2uxtwrmcp2h8zr9k1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj2uxtwrmcp2h8zr9k1b.png" alt="Image description" width="663" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;En este caso,estoy corriendo el vs-code en windows y todo el sway en ubuntu 22.04 LTS desde WSL&lt;/em&gt; 🤓&lt;/p&gt;

&lt;p&gt;Esta extensión nos advierte si tenemos algún error en nuestra codificación.&lt;/p&gt;

&lt;p&gt;Una vez tenemos el código, en la consola de linux o mac compilamos el programa.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;forc compile&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Una vez tenemos listo nuestro código vamos a desplegarlo, pero........vamos a desplegarlo localmente, esto con el fin de tener una experiencia más agradable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fuel-core run --ip 127.0.0.1 --port 4000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhqdvygjngl5uoz2u8ty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhqdvygjngl5uoz2u8ty.png" alt="Image description" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acá tenemos billeteras generadas con fondos, entonces nos ahorramos crear la billetera y ponerle fondos, esto es muy útil cuando estamos haciendo desarrollos internos, luego si desplegamos en la testnet.&lt;/p&gt;

&lt;p&gt;Como paso final de la parte de contratos vamos a deplegar el contrato en la red local ubicados dentro de la carpeta raiz de los contratos&lt;br&gt;
&lt;code&gt;forc deploy --unsigned&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1cqrgv3inus1nzdgfc8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1cqrgv3inus1nzdgfc8.png" alt="Image description" width="800" height="100"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Creando la aplicación web&lt;/strong&gt;&lt;br&gt;
Como es una aplicación react, debemos tener instalado nodejs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nodejs.org/en"&gt;https://nodejs.org/en&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Se intentó crear la aplicación web por NextJS, por Deno, o simplemente en consola, pero explota por un error en una libreria &lt;br&gt;
&lt;a href="https://www.npmjs.com/package/elliptic"&gt;https://www.npmjs.com/package/elliptic&lt;/a&gt; , la cual no permite hacer el uso de import o exports.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Para tener la interacción web-fuelnetwork, se usa la librería fuels, que es de &lt;em&gt;typescript&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;En este ejercicio vamos a usar vite, ya que no se recomienda usar create-react-app.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm create vite@latest&lt;br&gt;
React&lt;br&gt;
Typescript+SWC&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57spp1grzg8tnqhf0v4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj57spp1grzg8tnqhf0v4.png" alt="Image description" width="729" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih9v1z169niqp82crzmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih9v1z169niqp82crzmw.png" alt="Image description" width="766" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftohc30g91efs5yy6enqs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftohc30g91efs5yy6enqs.png" alt="Image description" width="737" height="233"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora vamos al directorio web  y ejecutamos  &lt;code&gt;npm install&lt;/code&gt; e instalamos la libería de fuels&lt;br&gt;
&lt;code&gt;npm install fuels&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;Después de instalar la libería fuels, vamos a mirar  que al compilar con &lt;code&gt;forc build&lt;/code&gt; se generó el abi en estructura json.&lt;/p&gt;

&lt;p&gt;El código abi está generado en la siguiente carpeta&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsxbp14p3dcdsv8ei9ra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsxbp14p3dcdsv8ei9ra.png" alt="Image description" width="686" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si abrimos el archivo &lt;code&gt;countersm-abi.json&lt;/code&gt;, vemos lo siguiente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "types": [
    {
      "typeId": 0,
      "type": "()",
      "components": [],
      "typeParameters": null
    },
    {
      "typeId": 1,
      "type": "u64",
      "components": null,
      "typeParameters": null
    }
  ],
  "functions": [
    {
      "inputs": [],
      "name": "count",
      "output": {
        "name": "",
        "type": 1,
        "typeArguments": null
      },
      "attributes": [
        {
          "name": "storage",
          "arguments": [
            "read"
          ]
        }
      ]
    },
    {
      "inputs": [],
      "name": "increment",
      "output": {
        "name": "",
        "type": 0,
        "typeArguments": null
      },
      "attributes": [
        {
          "name": "storage",
          "arguments": [
            "read",
            "write"
          ]
        }
      ]
    }
  ],
  "loggedTypes": [],
  "messagesTypes": [],
  "configurables": []
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nos ubicamos dentro de la carpeta web y ejecutamos el siguiente comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx fuels typegen -i ../countersm/out/debug/*-abi.json -o ./src/types --contract&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Con esto dejamos el abi listo para usar en web, pasamos el json a algo typescript!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujw7og7e1znneow2mw3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujw7og7e1znneow2mw3o.png" alt="Image description" width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En visual studio code, vamos modificar el archivo app.tsx y alteramos la funcionalidad del botón.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfwwns9ng3akd888iwgz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfwwns9ng3akd888iwgz.png" alt="Image description" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ponemos el siguiente código, lo que es contrato y llave secreta se cambia a sus datos respectivos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { useEffect, useState } from "react";
import "./App.css";
//Liberria para cargar la wallet
import { Wallet } from "fuels";
// Import the contract factory -- you can find the name in index.ts.
// You can also do command + space and the compiler will suggest the correct name.
//Generado npx fuels typegen -i ../countersm/out/debug/*-abi.json -o ./src/types --contract
import { CountersmAbi__factory } from "./types/factories/CountersmAbi__factory";

// The address of the contract deployed the Fuel testnet
//dato obtenido al desplegar el contrato localmente forc deploy --unsigned
const CONTRACT_ID =
  "0x3edb96c23766b8504caaff042994efa18460e7ba27f60191394a6bcf5be8d7d8";

//the private key from createWallet.js
//billetera generada al ejecutar el nodo localmente en memoria fuel-core run --ip 127.0.0.1 --port 4000
const WALLET_SECRET =
  "0x37fa81c84ccd547c30c176b118d5cb892bdb113e8e80141f266519422ef9eefd";

// Create a Wallet from given secretKey in this case
// The one we configured at the chainConfig.json
//el segundo parámetro es el provider, en este caso es local
const wallet = Wallet.fromPrivateKey(
  WALLET_SECRET, "http://127.0.01:4000/graphql"
);

// Connects out Contract instance to the deployed contract
// address using the given wallet.
const contract = CountersmAbi__factory.connect(CONTRACT_ID, wallet);


function App() {
  const [count, setCount] = useState(0)

  //función que hace incrementa en 1 y luego trae el valor de la blockchain local!! :)
  async function fuel_power(){
    await contract.functions.increment().txParams({ gasPrice: 1 }).call();
    const { value } = await contract.functions.count().get();
    setCount(Number(value));
  }

  return (
    &amp;lt;div className="App"&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;a href="https://vitejs.dev" target="_blank"&amp;gt;
          &amp;lt;img src={viteLogo} className="logo" alt="Vite logo" /&amp;gt;
        &amp;lt;/a&amp;gt;
        &amp;lt;a href="https://reactjs.org" target="_blank"&amp;gt;
          &amp;lt;img src={reactLogo} className="logo react" alt="React logo" /&amp;gt;
        &amp;lt;/a&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;h1&amp;gt;Vite + React&amp;lt;/h1&amp;gt;
      &amp;lt;div className="card"&amp;gt;
        &amp;lt;button onClick={fuel_power}&amp;gt;
          count is {count}
        &amp;lt;/button&amp;gt;
        &amp;lt;p&amp;gt;
          Edit &amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; and save to test HMR
        &amp;lt;/p&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;p className="read-the-docs"&amp;gt;
        Click on the Vite and React logos to learn more
      &amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
  )
}

export default App



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente activamos el vite&lt;br&gt;
&lt;code&gt;npm run dev&lt;/code&gt;&lt;br&gt;
y abrimos el navegador en el puerto 5173&lt;br&gt;
&lt;a href="http://localhost:5173"&gt;http://localhost:5173&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fll91n4m42iowp5h8df7v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fll91n4m42iowp5h8df7v.png" alt="Image description" width="455" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cómo es local, la interacción blockchain es a la velocidad del rayo :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmx5mxpqc5zrtxazj3tv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmx5mxpqc5zrtxazj3tv.png" alt="Image description" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Felicitaciones!!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Tu primera implementación real y con interacción web&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repositorio github:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/sergiotechx/counterReactFuel"&gt;https://github.com/sergiotechx/counterReactFuel&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Actualización&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Un miembro de Fuel me indicó donde está el foro de la comunidad y allí ya resolvieron el problema con NEXTJS y funciona!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rp2l6n8fkytu7q10sx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7rp2l6n8fkytu7q10sx.png" alt="Image description" width="381" height="150"&gt;&lt;/a&gt;&lt;br&gt;
En el archivo next.config.js se agrega lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; experimental: {
    esmExternals: false,
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://forum.fuel.network/t/running-fuels-on-nextjs/1132"&gt;https://forum.fuel.network/t/running-fuels-on-nextjs/1132&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>sway</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Invocando una función de un contrato inteligente de la BNBChain mediante una API REST🤯</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Mon, 03 Oct 2022 23:18:35 +0000</pubDate>
      <link>https://dev.to/sergiotechx/invocando-una-funcion-de-un-contrato-inteligente-de-la-bnbchain-mediante-una-api-rest-2p96</link>
      <guid>https://dev.to/sergiotechx/invocando-una-funcion-de-un-contrato-inteligente-de-la-bnbchain-mediante-una-api-rest-2p96</guid>
      <description>&lt;p&gt;Hola a todos, el día de hoy vamos a ver otra forma de invocar funciones de los contratos inteligentes, mediante la solución de TATUM (&lt;a href="https://tatum.io/"&gt;https://tatum.io/&lt;/a&gt;).&lt;br&gt;
Con tatum la creación de NFT, y muchas funcionalidades que se necesitan a diario en una daap, vienen en forma de una simple llamada a una &lt;strong&gt;API REST&lt;/strong&gt;, lo cual nos abre un mundo de posibilidades en nuestras aplicaciones ( &lt;em&gt;cualquier cosa puede llamar una api rest&lt;/em&gt; 😁).&lt;/p&gt;



&lt;p&gt;Otra ventaja es que tenemos acceso mediante API rest a 40 blockchains, lo cual nos ayuda muchisimo en nuestros desarrollos.&lt;/p&gt;

&lt;p&gt;En esta ocación vamos invocar la función que creamos la primera vez en bnb studio (&lt;a href="https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b"&gt;https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Lo primero que debemos hacer es crear un usuario en TATUM, luego de esto, entramos en el dash board y damos click en api keys&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbeu9wh620y6h8wgo6ngg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbeu9wh620y6h8wgo6ngg.png" alt="Api keys" width="237" height="90"&gt;&lt;/a&gt;&lt;br&gt;
Creamos una api key de testnet y otra de mainnet.&lt;br&gt;
&lt;strong&gt;Nota:&lt;/strong&gt; Según la api key que usamos en las invocaciones de las API rest el sistema sabe si nos dirigimos a operaciones de testnet o mainnet 🤓&lt;/p&gt;

&lt;p&gt;Para ver toda la documentación, la podemos ver acá &lt;a href="https://docs.tatum.io/"&gt;https://docs.tatum.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico&lt;/strong&gt;&lt;br&gt;
1) Vamos directos al siguiente link&lt;br&gt;
&lt;a href="https://apidoc.tatum.io/tag/BNB-Smart-Chain#operation/BscBlockchainSmartContractInvocation"&gt;https://apidoc.tatum.io/tag/BNB-Smart-Chain#operation/BscBlockchainSmartContractInvocation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;podemos probar dentro del mismo documentador de tatum o en postman, para mayor comodidad vamos realizarlo en postman&lt;br&gt;
 2) elegimos que servidor queremos, si en europa o en USA en el URL de la api&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8va4x6pb655jvn7mui9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8va4x6pb655jvn7mui9h.png" alt="Server" width="336" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este caso lo dejamos en Europa y el link quedaría así&lt;br&gt;
&lt;a href="https://api-eu1.tatum.io/v3/bsc/smartcontract"&gt;https://api-eu1.tatum.io/v3/bsc/smartcontract&lt;/a&gt;&lt;br&gt;
Allí se evidencia que es versión 3 llamado a la BNB chain y el endpoint &lt;em&gt;smartcontract&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;3) Es un request tipo Post, para poner que es una aplicación tipo JSON y las credenciales en la parte de headers en Post man&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds2i9wpkrbjfh3jgiy28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds2i9wpkrbjfh3jgiy28.png" alt="Image description" width="601" height="249"&gt;&lt;/a&gt;&lt;br&gt;
4)En el body ponemos que es tipo raw con tipo JSON&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgr0xh18ux6y8i4d228v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgr0xh18ux6y8i4d228v1.png" alt="Image description" width="630" height="72"&gt;&lt;/a&gt;&lt;br&gt;
E incluimos el siguiente código&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 {
1  "contractAddress":"0x7BcAF331B2d33Fbdc17De5dD0C3DEadb360503bb",
2  "methodName": "getResult",
3  "methodABI":  
4            {
5              "inputs": [],
6              "name": "getResult",
7              "outputs": [
8               {
9                  "internalType": "string",
10                  "name": "",
11                  "type": "string"
12               }
13              ],
14              "stateMutability": "view",
15              "type": "function"
16            } ,
17   "params": []
18 } 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Línea 1&lt;/strong&gt; el contrato a usar&lt;br&gt;
&lt;strong&gt;Línea 2&lt;/strong&gt; el mètodo o función a invocar&lt;br&gt;
&lt;strong&gt;Línea 3&lt;/strong&gt; el código abi&lt;/p&gt;

&lt;p&gt;Al ver el ABI en el BNB Studio, vemos que el código está entre [], en tatum, quitamos esos []&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7sw99nqdgufd1oy10ey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7sw99nqdgufd1oy10ey.png" alt="BNB Studio" width="367" height="293"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Línea 17&lt;/strong&gt; los parámetros que vamos a usar&lt;/p&gt;

&lt;p&gt;Ejecutamos el api rest, que es un llamado a una función de un contrato inteligente de la BNBChain y obtenemos lo siguiente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ebn7al192uwu9r0xof8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ebn7al192uwu9r0xof8.png" alt="Hola mundo tatum" width="480" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consideraciones:&lt;/strong&gt;&lt;br&gt;
No es el santo grial para todas las aplicaciones, ya que en opciones que haya que pagar en BNB, hay que tener una billetera con fondos e indirectamente poner la privatekey con todas las medidas de seguridad, lo cual en ciertos escenarios no aplica.&lt;br&gt;
Específicamente en una operación contra una metamask donde absolutamente todo lo paga el usuario, como lo sería un pancake swap por ejemplo. Pero......en airdrops, operaciones tipo backend, billeteras mobiles y un sin fin de aplicaciones es perfectamente viable.&lt;/p&gt;

&lt;p&gt;Nos vemos más adelante en este maravilloso mundo blockchain 🤓😁🤠&lt;/p&gt;

</description>
      <category>bnbchain</category>
      <category>web3</category>
      <category>programming</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Primeros pasos con Netherum en la BNB Chain</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Sat, 01 Oct 2022 17:06:14 +0000</pubDate>
      <link>https://dev.to/sergiotechx/primeros-pasos-con-netherum-en-la-bnb-chain-lpg</link>
      <guid>https://dev.to/sergiotechx/primeros-pasos-con-netherum-en-la-bnb-chain-lpg</guid>
      <description>&lt;p&gt;Hola a todos, en esta ocación vamos a ver algo super fundamental en el mundo C#, la mayoria de veces la web3 va ligado inherentemente a una página web y javascript, en cualquier variante ( navegador desktop, navegador de mobil o sus variantes).&lt;/p&gt;

&lt;p&gt;Pero que pasa si queremos hacer una solución a nivel de Backend, escritorio o mobil directamente con C#, usamos una solución llamada Netherum 🤓&lt;br&gt;
&lt;a href="https://nethereum.com/"&gt;https://nethereum.com/&lt;/a&gt;&lt;br&gt;
A continuación vamos a llamar la función que se créo en el artículo pasado (&lt;a href="https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b"&gt;https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b&lt;/a&gt;), donde dimos los primeros pasos en el ide   "BNB Studio" 🤠&lt;/p&gt;



&lt;p&gt;Lo primero es crear un proyecto, tipo consola y por el packet manager de nugets, bajamos en Netherum.web3&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wqdm7efagwdw9r94mxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wqdm7efagwdw9r94mxo.png" alt="Netherum.web3" width="800" height="77"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego abrimos el bnbstudio para localizar el código abi y el contrato que desplegamos la vez pasada&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1nj3rkyptnvwbyom23o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1nj3rkyptnvwbyom23o.png" alt="bnb studio" width="295" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwu3aaersfstz3p3n9jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwu3aaersfstz3p3n9jv.png" alt="Image description" width="567" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbikl9yxxnbp11bb3zoiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbikl9yxxnbp11bb3zoiu.png" alt="Image description" width="496" height="68"&gt;&lt;/a&gt;&lt;br&gt;
Ahora escribimos lo siguiente ( &lt;em&gt;maximiza el código para que sea más legible&lt;/em&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; static async Task Main(string[] args)
        {

            //Acá pones tu llave privada que no debes compartir con nadie!        
            string _privatekey = "tu llave privada";
            //un proveedor gratis de la testnet de BNB https://www.ankr.com/rpc/
            string _strconnection = "https://rpc.ankr.com/bsc_testnet_chapel";
            //chain ID de la BNBChain testnet 97
            //https://academy.binance.com/en/articles/connecting-metamask-to-binance-smart-chain
            Account account = new Account(_privatekey, new BigInteger(97));
            Web3 web3 = new Web3(account, _strconnection);
            string contractAdress = "0x7BcAF331B2d33Fbdc17De5dD0C3DEadb360503bb";
            //el abi lo sacamos del bnbstudio
            var abi = @"
                        [
                         {
                          ""inputs"": [],
                          ""name"": ""getResult"",
                          ""outputs"": [
                           {
                             ""internalType"": ""string"",
                             ""name"": """",
                             ""type"": ""string""
                           }
                          ],
              ""stateMutability"": ""view"",
              ""type"": ""function""
            }
          ]";
            Nethereum.Contracts.Contract contract = web3.Eth.GetContract(abi, contractAdress);
            //Invocación de la función del contrato inteligente
            var function = contract.GetFunction("getResult");
            //la función del smart contract retorna un datos tipo string
            var result = await function.CallAsync&amp;lt;string&amp;gt;();
            Console.WriteLine(result);
            Console.ReadLine();
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y este es el resultado &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpaoyv6oroplt5v4dtc0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpaoyv6oroplt5v4dtc0h.png" alt="resultado" width="558" height="68"&gt;&lt;/a&gt;&lt;br&gt;
Cómo puedes ver, integrar tus contratos de la &lt;strong&gt;BNBChain&lt;/strong&gt; al mundo C# es muy viable mediante este tipo de soluciones.&lt;/p&gt;

&lt;p&gt;El código del proyecto lo puedes descargar acá&lt;br&gt;
&lt;a href="https://github.com/sergiotechx/NetherumCallAbi"&gt;https://github.com/sergiotechx/NetherumCallAbi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta la próxima.😁&lt;/p&gt;

</description>
      <category>web3</category>
      <category>programming</category>
      <category>blockchain</category>
      <category>bnbchain</category>
    </item>
    <item>
      <title>Primeros pasos con BNB Studio</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Sun, 18 Sep 2022 22:03:35 +0000</pubDate>
      <link>https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b</link>
      <guid>https://dev.to/sergiotechx/primeros-pasos-con-bnb-studio-525b</guid>
      <description>&lt;p&gt;Hola a todos, mirando este link &lt;a href="https://www.bnbchain.org/en/developers"&gt;https://www.bnbchain.org/en/developers&lt;/a&gt;&lt;br&gt;
Asumiendo que es el punto de entrada para todos los desarrolladores de la BNB chain, me encontré con esto&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fceba9x9amu2w4rul5fha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fceba9x9amu2w4rul5fha.png" alt="bsc" width="598" height="335"&gt;&lt;/a&gt;&lt;br&gt;
Está un poco desactualizado, porque es la BNB studio ahora por el rebranding que hubo, pero vale la pena mirarlo que tan util es a la hora de realizar nuestros proyectos bajo la bnb chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  let`s go  builders 😎!!! 
&lt;/h2&gt;

&lt;p&gt;El bnb studio en un ide para desarrollar nuestros smartcontracts de la BNB chain, está desarrollado &lt;a href="https://www.obsidians.io/"&gt;https://www.obsidians.io/&lt;/a&gt;.&lt;br&gt;
Actualmente el BNB Studio viene en 2 formatos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WEB:&lt;/strong&gt; &lt;a href="https://bsc.intl.ide.black/"&gt;https://bsc.intl.ide.black/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop&lt;/strong&gt;: en Linux, Mac y Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En el artículo vamos a instalar la versión de escritorio para Windows.&lt;br&gt;
Antes de instalarlo, hay 2 alternativas de instalación.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instalación de algunos elementos via docker, algo único que no he visto en otros ides , es la integración de containes para truffle y un nodo local de la bsc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instalación de nodejs y eso es todo 👍&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nosotros para efectos prácticos lo vamos instalar con nodejs&lt;/p&gt;

&lt;p&gt;1) Descargarmos e instalamos nodejs&lt;br&gt;
&lt;a href="https://nodejs.org/es/"&gt;https://nodejs.org/es/&lt;/a&gt; descargamos la versión lts&lt;br&gt;
hoy 16 de Agosto del 2022&lt;br&gt;
&lt;a href="https://nodejs.org/dist/v16.17.0/node-v16.17.0-x64.msi"&gt;https://nodejs.org/dist/v16.17.0/node-v16.17.0-x64.msi&lt;/a&gt;&lt;br&gt;
2) Descargarmos e instalamos el Bnb Stucio&lt;br&gt;
&lt;a href="https://github.com/ObsidianLabs/BNB-Studio"&gt;https://github.com/ObsidianLabs/BNB-Studio&lt;/a&gt;&lt;br&gt;
La última versión fue lanzada en mayo 14 de 2022&lt;br&gt;
&lt;a href="https://github.com/ObsidianLabs/BNB-Studio/releases/tag/v0.10.6"&gt;https://github.com/ObsidianLabs/BNB-Studio/releases/tag/v0.10.6&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ObsidianLabs/BNB-Studio/releases/download/v0.10.6/BNB-Studio-0.10.6.exe"&gt;https://github.com/ObsidianLabs/BNB-Studio/releases/download/v0.10.6/BNB-Studio-0.10.6.exe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3kfcyq8ru7u6k1ti36c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3kfcyq8ru7u6k1ti36c.png" alt="BNB studio primera imagen" width="800" height="408"&gt;&lt;/a&gt;&lt;br&gt;
Como vamos a trabajar en la modalidad que está instalado en nodejs, click en skip&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgafkyo0nar6w8vb7nz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgafkyo0nar6w8vb7nz4.png" alt="crear proyectos" width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq49fq8k0lzhvpiaxmrfs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq49fq8k0lzhvpiaxmrfs.png" alt="Project templates" width="724" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos varios templates y su las respectivas versiones para estos templates &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y066sj456h6ujuickof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6y066sj456h6ujuickof.png" alt="versiones" width="704" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Además de esto podemos ver si nos vamos por truffle, hardhat, waffle con sus respectivas versiones o la versión docker&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://trufflesuite.com/truffle/"&gt;https://trufflesuite.com/truffle/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hardhat.org/"&gt;https://hardhat.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ethereum-waffle.readthedocs.io/en/latest/index.html"&gt;https://ethereum-waffle.readthedocs.io/en/latest/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para efectos prácticos, vamos a hacer un hola mundo por hardhat y lo vamos a lanzar por la testnet de la bsc&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22iilkofh43gsb92ec6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22iilkofh43gsb92ec6m.png" alt="hola mundo" width="723" height="661"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Nota:&lt;/strong&gt; la ultima versión para bnb studio de hardhat es la 2.5.0 y la última versión de hardhat va por la 2.11.2&lt;/p&gt;

&lt;p&gt;Automáticamente , se instala hardhat para el proyecto &lt;br&gt;
Nos queda instalado lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "name": "helloworld",&lt;br&gt;
  "version": "1.0.0",&lt;br&gt;
  "description": "",&lt;br&gt;
  "main": "hardhat.config.js",&lt;br&gt;
  "scripts": {&lt;br&gt;
    "build": "hardhat compile --config hardhat.config.js",&lt;br&gt;
    "deploy": "hardhat run scripts/deploy.js"&lt;br&gt;
  },&lt;br&gt;
  "keywords": [],&lt;br&gt;
  "author": "",&lt;br&gt;
  "license": "ISC",&lt;br&gt;
  "devDependencies": {&lt;br&gt;
    "@nomiclabs/hardhat-ethers": "^2.1.1",&lt;br&gt;
    "@nomiclabs/hardhat-waffle": "^2.0.3",&lt;br&gt;
    "chai": "^4.3.6",&lt;br&gt;
    "ethereum-waffle": "^3.4.4",&lt;br&gt;
    "ethers": "^5.7.1",&lt;br&gt;
    "hardhat": "^2.5.0"&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9527r0usacgjg9h2ex8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc9527r0usacgjg9h2ex8.png" alt="Image description" width="619" height="374"&gt;&lt;/a&gt;&lt;br&gt;
Vamos a borrar el contrato generado, crear nuetro propio contrato "helloworld.sol y ponerlo en la testnet de la BSC! 🤠&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvyz5xvrlvoqkavqncuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftvyz5xvrlvoqkavqncuz.png" alt="Nuevo Contrato" width="262" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;br&gt;
// SPDX-License-Identifier: GPL-3.0&lt;br&gt;
pragma solidity &amp;gt;=0.8.6;&lt;/p&gt;

&lt;p&gt;contract Hello {&lt;br&gt;
     function getResult() public view returns(string memory){&lt;br&gt;
            return "Hola Mundo!";&lt;br&gt;
      }&lt;br&gt;
 }&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;br&gt;
Abrimos el archivo config.json y cambiamos lo siguiente:&lt;br&gt;
&lt;strong&gt;Main File&lt;/strong&gt;: ./contracts/hellworld.sol&lt;br&gt;
&lt;strong&gt;Solc version&lt;/strong&gt;: v0.8.6&lt;br&gt;
&lt;strong&gt;EVM version&lt;/strong&gt;: Berlin&lt;/p&gt;

&lt;p&gt;y click en save all&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhgb55l70zcjz7k9ru0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzhgb55l70zcjz7k9ru0n.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro de la carpeta "scripts" en deploy.js hacemos la siguiente modificación y grabamos el cambio, de esta forma hardhat sabe que el contrato a desplegar es el que estamos elaborando. &lt;br&gt;
&lt;code&gt;const Main = await ethers.getContractFactory('Main')&lt;/code&gt;&lt;br&gt;
se cambia por : &lt;code&gt;const Main = await ethers.getContractFactory('Hello')&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0586zcr13b7h8c7zcx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0586zcr13b7h8c7zcx3.png" alt="Image description" width="540" height="230"&gt;&lt;/a&gt;&lt;br&gt;
Ahora vamos a compilar el contrato con danco click en el ícono del martillo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvvnas0qiph4c8xu9bpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsvvnas0qiph4c8xu9bpn.png" alt="Image description" width="276" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si todo es exitoso abajo aparece lo siguiente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75xndjrm3butjurubv2e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75xndjrm3butjurubv2e.png" alt="Image description" width="298" height="35"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora vamos a desplegar el contrato en la testnet de la BSC 😉&lt;/p&gt;

&lt;p&gt;1) en la parte superior derecha seleccionamos que es la red de pruebas&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9hu9ip8zaa533gfttap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9hu9ip8zaa533gfttap.png" alt="Image description" width="195" height="164"&gt;&lt;/a&gt;&lt;br&gt;
2) Vamos al administrador de llaves privadas en la parte inferior derecha y click en el ícono de llave&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqa7nf5hu6kdg3s7e3yc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqa7nf5hu6kdg3s7e3yc.png" alt="Image description" width="454" height="49"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una ves ingresamos en esta opción click en import&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfxcouj74uzh2vmnesmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkfxcouj74uzh2vmnesmq.png" alt="Image description" width="776" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este paso, ponemos la llave privada de la metamask, mucho cuidado, la llave privada no la debejmos compartir con nadie!&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3oaijbz22hj3kujhwuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3oaijbz22hj3kujhwuf.png" alt="Image description" width="704" height="323"&gt;&lt;/a&gt;&lt;br&gt;
Debe quedar algo así ydamos click en close&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgw3wzcu792ypxeo47l8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgw3wzcu792ypxeo47l8.png" alt="Image description" width="795" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) Click en el ícono de la ballenita, para desplegar el contrato en la testnet de la BNB chain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ir9mljhj0yx747ddbdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ir9mljhj0yx747ddbdh.png" alt="Image description" width="177" height="37"&gt;&lt;/a&gt;&lt;br&gt;
Click en Estimate &amp;amp; Deploy ( esto hace el cálculo del gas y gas price por nosotros)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96vqsqns0bbcu73fa1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl96vqsqns0bbcu73fa1e.png" alt="Image description" width="713" height="406"&gt;&lt;/a&gt;&lt;br&gt;
Finalmente click en Deploy &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0u21bfkcvwjm95afkpd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0u21bfkcvwjm95afkpd.png" alt="Image description" width="724" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Felicitaciones!!! ya desplegamos un contrato en la testnet de la BSC!!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47g90nu3uvguno0fe8rl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47g90nu3uvguno0fe8rl.png" alt="Image description" width="711" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora vamos a interactuar con el contrato 🧐&lt;/p&gt;

&lt;p&gt;Hacemos click en el contratro generado&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhahi7m64g1xmt7894qw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnhahi7m64g1xmt7894qw.png" alt="Image description" width="619" height="64"&gt;&lt;/a&gt;&lt;br&gt;
En este caso no tenemos parámetros, pero esta habilitado para ello en BNB Studio!&lt;br&gt;
Vamos a ejecutar el contrato!! &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy3kd61o095luwnjovvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy3kd61o095luwnjovvy.png" alt="Image description" width="800" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlhwumq9prd9h92yqrsy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftlhwumq9prd9h92yqrsy.png" alt="Image description" width="352" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conlusiones&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nos facilita mucho la vida este entorno, ya que podemos compilar y hacer despliegues totalmente automatizados con un sólo click. &lt;/li&gt;
&lt;li&gt;Muy interesante ver que podemos usar truffle o hardhat. Aunque un poco desactualizado en sus versiones&lt;/li&gt;
&lt;li&gt;No lo mostramos pero tiene un explorador de transacciones incluido.&lt;/li&gt;
&lt;li&gt;Para las personas que les gusta tener todo bajo control, quizá sea más aconsejable usar otro ide como visual studio e incorporar hardhat, truffle u otras soluciones completamente a mano, ya que BNB Studio , nos hace todas estas labores de forma automática y perdemos un poco el control sobre esto. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Espero este tutorial haya sido de agrado y utilidad 😉&lt;/p&gt;

</description>
      <category>bnbchain</category>
      <category>solidity</category>
      <category>web3</category>
      <category>programming</category>
    </item>
    <item>
      <title>Llamado dinámico de una clase en C#</title>
      <dc:creator>Sergio Martinez Marin</dc:creator>
      <pubDate>Tue, 06 Sep 2022 16:51:53 +0000</pubDate>
      <link>https://dev.to/sergiotechx/llamado-dinamica-de-una-clase-en-c-45ek</link>
      <guid>https://dev.to/sergiotechx/llamado-dinamica-de-una-clase-en-c-45ek</guid>
      <description>&lt;p&gt;Hola a todos, espero que disfruten el siguiente mini tutorial 🦖&lt;/p&gt;

&lt;p&gt;Aveces tenemos una configuración de un sistema, ya sea por base de datos o algún archivo de configuración.&lt;/p&gt;

&lt;p&gt;Dependiendo de esta configuración el comportamiento del programa en su implementación puede cambiar mucho y  como nosotros somos programadores elegantes 😎 no queremos hacer un switch case de implementación de interfaces, llamamos el objeto de nuestra configuración y voila 🤗.&lt;/p&gt;

&lt;p&gt;Un ejemplo mundo real que estoy aplicando esto es para un bot de trading donde la configuración apunta a realizar operaciones en diferentes exchanges, cada exchange maneja diferentes apis, reglas de negocio e implementaciones, por lo cual esta técnica es sumamente útil.&lt;/p&gt;




&lt;p&gt;Voy a plantear la siguiente situación hipotética, viajar, podemos viajar de muchas formas!&lt;/p&gt;

&lt;p&gt;Desde un archivo json en nuestro ejemplo podemos, configurar el medio de transporte (avión, pie, carro y trén).&lt;/p&gt;

&lt;p&gt;Para poner un poco de orden al caos de llamar objetos sin conexión, implementamos una interfaz la cual deben cumplir todos los objetos&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0rnvyqf1uufmdnz9rap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0rnvyqf1uufmdnz9rap.png" alt="Diagrama de interfaz e implementacion" width="636" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para facilitar la lectura  de un objeto json, usaremos la librería newton soft.&lt;br&gt;
El proyecto en su estructura quedaría así &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mubb9nzubpvt8qxvvte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2mubb9nzubpvt8qxvvte.png" alt="Estructura" width="284" height="217"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Archivo de configuración Config.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"Medio":  "Pie"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;interface Iviajar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace LlamadoDinamico
{
    //Marco de referencia que deben cumplir los diferentes medios de viaje
    public interface Iviajar
    {
        bool ComienzoViaje(string destino);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Programa principal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/***
 * Ejemplo de como invocar una clase dinámicamente por medio de una configuración almacenada en un archivo
 * de configuración
 ***/

using LlamadoDinamico;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;


string configPath = Directory.GetCurrentDirectory() + @"\Config.json";

if (File.Exists(configPath))
{
    //Obtención en bruto del archivo a texto
    string textConfiguration = File.ReadAllText(configPath);
    //de string a Jobject
    dynamic data = JObject.Parse((string)textConfiguration);
    string medio = data["Medio"];
    //se incluye la ruta del namespace completo más la clase
    string strclase = "LlamadoDinamico.FormasdeViaje." + medio;
    Iviajar viajar = (Iviajar)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(strclase);
    bool resultado = viajar.ComienzoViaje("FarFaraway!");
    Console.ReadLine();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implementación de una de las forma de viaje &lt;br&gt;
Pie.cs&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace LlamadoDinamico.FormasdeViaje
{
    public class Pie : Iviajar
    {
        public bool ComienzoViaje(string destino)
        {
            bool respuesta = false;
            if (destino == "FarFaraway!")
            {
                Console.WriteLine("voya pie y está muy lejos, usa otro medio de transporte");
            }
            else 
            {
                Console.WriteLine("Andando ando!");
                respuesta = true;
            }
            return respuesta;
        }
    }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Baja el ejemplo completo acá &lt;br&gt;
&lt;a href="https://github.com/sergiotechx/LlamadoDinamico"&gt;https://github.com/sergiotechx/LlamadoDinamico&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que te haya sido de utilidad 😁 y a seguir con toda la energía positiva en tu proyecto, que eso no se hace sólo 💪&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
