<?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: Bruno Gonzales</title>
    <description>The latest articles on DEV Community by Bruno Gonzales (@brunogonzales).</description>
    <link>https://dev.to/brunogonzales</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%2F359807%2F0d6dcaff-64db-43e9-aa3c-19efc5760422.jpg</url>
      <title>DEV Community: Bruno Gonzales</title>
      <link>https://dev.to/brunogonzales</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/brunogonzales"/>
    <language>en</language>
    <item>
      <title>Construye en Flow: Aprende FCL - 8. Como consultar una transacción por su id</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Mon, 13 Jun 2022 05:58:39 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-8-como-consultar-una-transaccion-por-su-id-1hg</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-8-como-consultar-una-transaccion-por-su-id-1hg</guid>
      <description>&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;En esta corta guía, aprenderás a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;encontrar la data de una transacción por su id.&lt;/li&gt;
&lt;li&gt;procesar y analizar la data adquirida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Corto, pero directo al punto!&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué?
&lt;/h2&gt;

&lt;p&gt;Después de que una transacción es enviada a la cadena, obtendrás el correspondiente &lt;code&gt;id&lt;/code&gt;, que cualquiera puede usar para consultar la data de esa específica transacción . Por ejemplo, si estás transfiriendo algunos tokens a otra cuenta, también puedes proveer el &lt;code&gt;id&lt;/code&gt; de la transacción como una prueba de que has cumplido con la tarea en tu lado y ahora el recipiente puede obtener actualizaciones consultando cambios de estado a esa transacción. &lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Como?
&lt;/h2&gt;

&lt;p&gt;FCL provee una función &lt;code&gt;[tx](https://docs.onflow.org/fcl/reference/api/#tx)&lt;/code&gt; que te permite suscribirte a actualizaciones de estado (via polling), pero subsecuentemente también retorna el resultado final si el estado de la transacción es &lt;code&gt;sealed&lt;/code&gt;. La función &lt;code&gt;tx&lt;/code&gt; retornará un objeto y uno de los campos es el método &lt;code&gt;.onceSealed()&lt;/code&gt;. Cuando es llamado este método retornará una promesa, la cual se resolverá si la transaccion con el &lt;code&gt;id&lt;/code&gt; especificado tienej estado igual a &lt;code&gt;5&lt;/code&gt; (sealed).&lt;/p&gt;

&lt;h3&gt;
  
  
  Sellado de nuevo? 🤔
&lt;/h3&gt;

&lt;p&gt;Similar a los bloques, las transacciones también tienen diferentes &lt;a href="https://docs.onflow.org/fcl/reference/api/#transaction-statuses"&gt;estados&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 - &lt;code&gt;pending&lt;/code&gt; - la transacción espera &lt;strong&gt;finalización&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;2 - &lt;code&gt;finalized&lt;/code&gt; -  la transacción espera &lt;strong&gt;ejecución&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;3- &lt;code&gt;executed&lt;/code&gt; -  la transacción espera ser &lt;strong&gt;sellada.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;4 - &lt;code&gt;sealed&lt;/code&gt;** - la transacción esta &lt;strong&gt;sellada&lt;/strong&gt; y podría verse como &lt;strong&gt;completa&lt;/strong&gt; e irreversible.&lt;/li&gt;
&lt;li&gt;5 - &lt;code&gt;expired&lt;/code&gt; - la transacción &lt;strong&gt;expiró&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Has leído eso bien, las transacciones pueden expirar! Cuando una transacción es creada, es “anclada” al último bloque disponible y necesita ser sellada dentro del rango de los 600 bloques (o alrededor de 10 minutes en tiempo humano 👨‍🏫).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ahora pongámoslo en practica! 💪&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1 - Instalación
&lt;/h3&gt;

&lt;p&gt;Añade &lt;code&gt;"@onflow/fcl": "1.0.0"&lt;/code&gt; como tu dependencia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2 - Configuración
&lt;/h3&gt;

&lt;p&gt;Justo como la última vez importaremos los métodos necesarios para configurar FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importar métodos de FCL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Especificar el endpoint de la API- esta vez usaremos Mainnet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://rest-mainnet.onflow.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configuraremos FCL para que use mainnet como el nodo de acceso&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Finalmente
&lt;/h3&gt;

&lt;p&gt;Envolveremos el código en un bloque IIFE para ejecución automática:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// usaremos IIFE para ejecute nuestro codigo de inmediato&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// Este es un id cualquiera que consegui del live feed de Flowscan&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;txResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;onceSealed&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;txResult&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después de la ejecución tu consola debería tener este output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;txResult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;blockId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;f21eb65a65cd8f2f26a340265c24497ee2ca130862e4c7e9d6f1e6d6680a2fe6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;statusString&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SEALED&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;errorMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;events&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada evento tendra la forma de un objeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A.2d4c3caffbeab845.FLOAT.FLOATMinted&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;transactionId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;transactionIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;eventIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si le das una vista al nombre de tipo de evento de varios events veras claramente un patrón:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;A&lt;/code&gt; - es por &lt;strong&gt;A&lt;/strong&gt;ccount&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2d4c3caffbeab845&lt;/code&gt; - esta es la dirección donde el contrato conteniendo declaraciones de eventos es desplegado.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FLOAT&lt;/code&gt; - nombre del contrato.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FLOATMinted&lt;/code&gt; - nombre del evento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Podemos crear un enlace y explorar este &lt;a href="https://flow-view-source.com/mainnet/account/0x2d4c3caffbeab845/contract/FLOAT"&gt;contrato en Flow View Source&lt;/a&gt;. &lt;code&gt;Línea 53&lt;/code&gt; tiene la definición del evento &lt;code&gt;FLOATMinted&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La &lt;a href="https://docs.onflow.org/fcl/"&gt;referencia rápida de FCL en la documentación de Flow&lt;/a&gt; tiene más información acerca de transacciones y eventos: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;resultado de transacciones - &lt;a href="https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7"&gt;https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;data de eventos  - &lt;a href="https://docs.onflow.org/fcl/reference/api/#event-object"&gt;https://docs.onflow.org/fcl/reference/api/#event-object&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Otras maneras de explorar transacciones
&lt;/h2&gt;

&lt;p&gt;De manera similar a Account, como cubrimos la ultima vez, exploraremos la data de las transacciones en FlowScan and Flow View Source&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow View Source&lt;/strong&gt; - &lt;a href="https://flow-view-source.com/mainnet/tx/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7"&gt;https://flow-view-source.com/mainnet/tx/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7&lt;/a&gt; - es un proyecto de la comunidad por el creador original de FCL - James Hunter - &lt;a href="https://github.com/orodio"&gt;https://github.com/orodio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flowscan&lt;/strong&gt; -h&lt;a href="https://flowscan.org/transaction/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7"&gt;ttps://flowscan.org/transaction/2297668a3f35d6c6b4a18bb9c5ea8d3e60ce7e4a4e0fe31ad5a9c623d002b9d7&lt;/a&gt; - contrario a la información de la cuenta, una transacción en Flowscan tiene la misma data en Flow View Source.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Código del ejemplo&lt;/strong&gt; - &lt;a href="https://codesandbox.io/s/dev-to-fcl-08-fetch-transaction-by-id-44kccc?file=/src/index.js"&gt;https://codesandbox.io/s/dev-to-fcl-08-fetch-transaction-by-id-44kccc?file=/src/index.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentacion de la funciñon&lt;/strong&gt;&lt;code&gt;tx&lt;/code&gt;- &lt;a href="https://docs.onflow.org/fcl/reference/api/#tx"&gt;https://docs.onflow.org/fcl/reference/api/#tx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentación sobre la respuesta del status de una transacción&lt;/strong&gt; - &lt;code&gt;transaction status&lt;/code&gt; response - &lt;a href="https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7"&gt;https://docs.onflow.org/fcl/reference/api/#returns-after-decoding-7&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentación sobre la data de eventos&lt;/strong&gt;- &lt;code&gt;event&lt;/code&gt; data - &lt;a href="https://docs.onflow.org/fcl/reference/api/#event-object"&gt;https://docs.onflow.org/fcl/reference/api/#event-object&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que podrías encontrar útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de  Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - más información de tallada acerca de Flow blockchain y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - tu punto de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la librería FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introducción a Cadence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un asombroso IDE en el navegador para prototipar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Esta es una traducción al español del octavo artículo de la serie Build on Flow | Learn FCL escrito por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 7. Como consultar una cuenta en Flow por su dirección</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Mon, 13 Jun 2022 03:54:03 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-7-como-consultar-una-cuenta-en-flow-por-su-direccion-1jji</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-7-como-consultar-una-cuenta-en-flow-por-su-direccion-1jji</guid>
      <description>&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;En el post anterior, cubrimos como colectar información acerca de bloques en la cadena. Hoy cubriremos como puedes consultar información acerca de una cuenta especifica usando la función &lt;code&gt;account&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Los dos casos de uso mas comunes, y que tu aprenderás hoy serán:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;obtener el balance actual de una cuenta en FLOW.&lt;/li&gt;
&lt;li&gt;traer una lista de contractos desplegados en la cuenta.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paso 1 - Instalación
&lt;/h3&gt;

&lt;p&gt;Añade &lt;code&gt;"@onflow/fcl": "1.0.0"&lt;/code&gt; como tu dependencia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2 - Configuración
&lt;/h3&gt;

&lt;p&gt;Justo como la última last vez, importaremos los métodos necesarios y configuraremos FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importa los métodos de FCL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Especifica el endpoint de la API - esta vez usaremos Mainnet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://rest-mainnet.onflow.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configura FCL para usar mainnet como el nodo de acceso&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3 - Copiar el resolvedor
&lt;/h3&gt;

&lt;p&gt;Siempre es bueno aplicar conocimiento previo y practicar. Traigamos de vuelta la función resolvedora de la &lt;a href="https://dev.to/onflow/construye-en-flow-aprende-fcl-4-como-resolver-identidades-en-find-a-direcciones-en-flow-26nm"&gt;lección 4&lt;/a&gt; para usarla en nuestro ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resolveName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    import FIND from 0x097bafa4e0b48eef

    pub fun main(name: String): Address?{
      return FIND.lookupAddress(name)
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 4 - Encontrando la cuenta
&lt;/h3&gt;

&lt;p&gt;Tratemos de resolver la identidad &lt;code&gt;flovatar&lt;/code&gt; y exploremos que tiene para nosotros😊&lt;/p&gt;

&lt;p&gt;Usaremos nuestro bloque invocado inmediatamente como siempre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Usaremos IIFE para ejecutar nuestro codigo inmediatamente &lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;resolveName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flovatar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;// es posible que name sea resuelto a "null" &lt;/span&gt;
    &lt;span class="c1"&gt;// agreguemos algo de protección basica en esta parte&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;accountInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;account&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;accountInfo&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después de que el polvo se asiente, deberías ver el código en la consola:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;921ea449dffec68a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;13052726819120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;contracts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esos 5 valores son respectivamente:: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;address&lt;/code&gt; &lt;strong&gt;-&lt;/strong&gt; dirección de una cuenta (nota el prefijo &lt;code&gt;0x&lt;/code&gt; faltante si deseas usarlo en el futuro)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;balance&lt;/code&gt; - cantidad de tokens FLOW en formato UFix64. Divide por &lt;code&gt;Math.pow(10,8)&lt;/code&gt; para obtener un valor float.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;code&lt;/code&gt; - este es un valor deprecado, previamente fue usado para almacenar código del contrato desplegado a la cuenta. Antes solo era posible almacenar un solo contrato por cuenta.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;contracts&lt;/code&gt; - objeto representando contratos desplegados. Las llaves son los nombres de los contratos y los valores son código en Cadence del respectivo contrato.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keys&lt;/code&gt; - lista de llaves asociadas a una cuenta.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Puedes encontrar mas información acerca de ellos en la documentación de Flow - &lt;a href="https://docs.onflow.org/fcl/reference/api/#blockobject"&gt;https://docs.onflow.org/fcl/reference/api/#blockobject&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Otras maneras de explorar una cuenta
&lt;/h2&gt;

&lt;p&gt;Hay formas de explorar una cuenta específica: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow View Source&lt;/strong&gt; - &lt;a href="https://flow-view-source.com/mainnet/account/0x5916e847260714b6"&gt;https://flow-view-source.com/mainnet/account/0x5916e847260714b6&lt;/a&gt; - es un proyecto de la comunidad hecho por el creador original de FCL - James Hunter - &lt;a href="https://github.com/orodio"&gt;https://github.com/orodio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flowscan&lt;/strong&gt; - &lt;a href="https://flowscan.org/account/0x5916e847260714b6"&gt;https://flowscan.org/account/0x5916e847260714b6&lt;/a&gt; - la página de Flowscan te mostrará mas información acerca de transacciones y transferencias gracias a que procesa los bloques detrás de escenas para acumular esa información.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Código del ejemplo&lt;/strong&gt; - &lt;a href="https://codesandbox.io/s/dev-to-fcl-07-get-account-j9rxkm?file=/src/index.js"&gt;https://codesandbox.io/s/dev-to-fcl-07-get-account-j9rxkm?file=/src/index.js&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que podrías encontrar útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de  Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - más información de tallada acerca de Flow blockchain y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - tu punto de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la librería FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introducción a Cadence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un asombroso IDE en el navegador para prototipar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Esta es una traducción al español del séptimo artículo de la serie Build on Flow | Learn FCL escrito por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>flow</category>
      <category>fcl</category>
      <category>web3</category>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 6. Como consultar el último bloque de la cadena.</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Mon, 13 Jun 2022 01:22:21 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-6-como-consultar-el-ultimo-bloque-de-la-cadena-4n0o</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-6-como-consultar-el-ultimo-bloque-de-la-cadena-4n0o</guid>
      <description>&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;Mientras construyes tu aplicación Web3, una tarea común y útil es traer el último bloque sellado. Traer el último bloque sellado es útil para consultar eventos específicos y data para asegurarse de que todo esta trabajado como se espera.  Esta guía te enseñara a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;como usar la función &lt;code&gt;block&lt;/code&gt; para traer el último &lt;code&gt;sealed block&lt;/code&gt;  por su &lt;code&gt;height&lt;/code&gt; o &lt;code&gt;id&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;las limitaciones de FCL en relación a la consulta de bloques&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bloques? Como en Tetris?
&lt;/h3&gt;

&lt;p&gt;Bueno, no realmente 😅 El bloque es un constructo diseñado para contener cierta información como la cantidad específica de transacciones, elegidas por los nodos de rol &lt;code&gt;Collection&lt;/code&gt; para su ejecución. Los tipos de data que los bloques contienen son: ****&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;id&lt;/strong&gt; - el id del bloque generalmente usado para traer un bloque específico por su id.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;height&lt;/strong&gt; - la altura actual del bloque (puedes visualizarla como si estuvieras apilando cajas una encima de la otra).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;parentId&lt;/strong&gt; - para que puedas &lt;em&gt;regresar en el tiempo&lt;/em&gt; y leer la información del bloque pasado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;timestamp -&lt;/strong&gt; objeto, conteniendo campos relacionados con el tiempo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;blockSeals&lt;/strong&gt; - los detalles de qué nodos ejecutaron y sellaron el bloque.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;collectionGuarantees&lt;/strong&gt;  - todas las firmas por los items en el bloque.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Los bloques en la blockchain están organizados de tal manera que cada bloque (excepto el &lt;code&gt;bloque genesis&lt;/code&gt;) está referenciando un bloque pegado a él desde su “cola”. Cuando conectas varios bloques de esta maneras puedes visualizar que forman una &lt;code&gt;cadena&lt;/code&gt; - por ello la palabra &lt;code&gt;blockchain&lt;/code&gt; 💡.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  De vuelta a la parte divertida
&lt;/h3&gt;

&lt;p&gt;Hay al menos dos maneras para consultar el último bloque sellado. Cubriremos la más simple llamando la función &lt;code&gt;block&lt;/code&gt; - &lt;a href="https://docs.onflow.org/fcl/reference/api/#block"&gt;https://docs.onflow.org/fcl/reference/api/#block&lt;/a&gt; - una interacción pre construida que retorna el último bloque (opcionalmente sellado o no), por id o por altura. Aprovechando que ya te “enganché” saltemos a verlo en acción y en detalle! &lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1 - Instalación
&lt;/h3&gt;

&lt;p&gt;Agrega &lt;code&gt;"@onflow/fcl": "1.0.0"&lt;/code&gt; como dependencia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2 - Setup
&lt;/h3&gt;

&lt;p&gt;Como la última vez importaremos los métodos necesarios para configurar FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Importaremos los métodos de FCL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Especificamos los endpoints de la API - esta vez usaremos Mainnet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://rest-mainnet.onflow.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configuraremos FCL para usar mainnet como el nodo de acceso&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Finalmente
&lt;/h3&gt;

&lt;p&gt;Ya que la función &lt;code&gt;block&lt;/code&gt; no requiere ningún setup atravesaremos el proceso de una pasada, sin configurar métodos adicionales como hicimos anteriormente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;sealed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latestBlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si revisas la consola encontrarás información acerca del último bloque ahí:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;latestBlock&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;29697cbe3f0b811f319c99e0002536c5404491feab39d1b3f63ac92faec16306&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;parentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8bbb05e0e84fb78648b1673a67a5ddf1556a7d9bfd3a81c3afabd108c8234e1e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;69553091&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2022-06-01T16:04:42.593016593Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;collectionGuarantees&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;blockSeals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usemos el campo &lt;code&gt;height&lt;/code&gt; de &lt;code&gt;latestBlock&lt;/code&gt; y consultemos otro bloque sustrayendo &lt;code&gt;1&lt;/code&gt; a su valor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;sealed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latestBlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;previousBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;previousBlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;previousBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente, usaremos el campo &lt;code&gt;parentId&lt;/code&gt; de &lt;code&gt;previousBlock&lt;/code&gt; para obtener otro bloque por &lt;code&gt;id&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;sealed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latestBlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;previousBlock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;latestBlock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;previousBlock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;previousBlock&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockById&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;previousBlock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentId&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blockById&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockById&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después de que el código actualizado sea ejecutado, deberías ver un mensaje parecido en la console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;latestBlock&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;29697cbe3f0b811f319c99e0002536c5404491feab39d1b3f63ac92faec16306&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;parentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8bbb05e0e84fb78648b1673a67a5ddf1556a7d9bfd3a81c3afabd108c8234e1e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;69553091&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2022-06-01T16:04:42.593016593Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;collectionGuarantees&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;blockSeals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;previousBlock&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8bbb05e0e84fb78648b1673a67a5ddf1556a7d9bfd3a81c3afabd108c8234e1e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;parentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3556f13dba2c2e5d543944139666b21d56d2ece8ceb00998e70ec5b007e4c0cd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;69553090&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2022-06-01T16:04:41.751672413Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;collectionGuarantees&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;blockSeals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;blockById&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3556f13dba2c2e5d543944139666b21d56d2ece8ceb00998e70ec5b007e4c0cd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;parentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8ab3734670901b1d76b57e0ae53908d17b621ea7b7172565a9e07ffe591b2385&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;69553089&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2022-06-01T16:04:40.932442068Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;collectionGuarantees&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;blockSeals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Por qué querríamos el bloque &lt;code&gt;sealed&lt;/code&gt; ? 🤔
&lt;/h3&gt;

&lt;p&gt;Como probablemente notaste, estamos pasando el argumento &lt;code&gt;sealed&lt;/code&gt; para traer el último bloque. El bloque será sellado por los nodos de rol &lt;code&gt;Consenso&lt;/code&gt; solo cuando suficientes aprobaciones hayan sido colectadas. En castellano, puedes estar seguro de que si tu transacción fue incluida en el bloque fue ejecutada o revertida. &lt;/p&gt;

&lt;h3&gt;
  
  
  Limitaciones
&lt;/h3&gt;

&lt;p&gt;El proceso de obtener un bloque específico - ya sea por &lt;code&gt;id&lt;/code&gt; o &lt;code&gt;height&lt;/code&gt; - esta limitado a un &lt;a href="https://docs.onflow.org/node-operation/spork/"&gt;spork&lt;/a&gt; - un proceso de actualización de la red donde operadores de nodos actualizan el software de su nodo y lo re-inicializan con una representacion consolidada del estado del spork previo.&lt;/p&gt;

&lt;p&gt;Puedes encontrar mas información &lt;a href="https://docs.onflow.org/node-operation/past-sporks/"&gt;acerca del spork actual y el pasado&lt;/a&gt; en la Documentación de Flow. &lt;/p&gt;

&lt;p&gt;Si el bloque que quieres esta fuera del spork actual, y realmente necesitas obtener esa información - tu única opción es usar la &lt;a href="https://github.com/onflow/flow-go"&gt;Flow Go SDK&lt;/a&gt; y apuntar a un nodo de acceso específico. No cubriremos ese proceso en este artículo pero quizás en una serie futura. 😉 &lt;/p&gt;

&lt;p&gt;El código completo puede ser encontrado en &lt;a href="https://codesandbox.io/s/dev-to-fcl-06-get-latest-block-5wiry0"&gt;este Codesandbox&lt;/a&gt; &lt;/p&gt;

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

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Código del ejemplo&lt;/strong&gt; - &lt;a href="https://codesandbox.io/s/dev-to-fcl-06-get-latest-block-5wiry0"&gt;https://codesandbox.io/s/dev-to-fcl-06-get-latest-block-5wiry0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de la función&lt;/strong&gt; &lt;code&gt;block&lt;/code&gt; - &lt;a href="https://docs.onflow.org/fcl/reference/api/#block"&gt;https://docs.onflow.org/fcl/reference/api/#block&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que podrías encontrar útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - Más informacion detallada sobre Flow blockchain y cómo interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - tu punto de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la librería FCL JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta es una traducción al español del sexto artículo de la serie Build on Flow | Learn FCL escrito por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web3</category>
      <category>flow</category>
      <category>fcl</category>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 5. Obtener una lista de NFTs viviendo una direccion conocida</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Sun, 12 Jun 2022 23:18:59 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-5-obtener-una-lista-de-nfts-viviendo-una-direccion-conocida-29n7</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-5-obtener-una-lista-de-nfts-viviendo-una-direccion-conocida-29n7</guid>
      <description>&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En esta guía, expandirás tu conocimiento interactuando con contratos inteligentes a través de scripts en Cadence. Aprenderás como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sacar una lista de NFTs almacenados en la cuenta de una dirección (usaremos un Flovatar para este ejemplo)&lt;/li&gt;
&lt;li&gt;preparar y retornarlas como un Array de &lt;code&gt;Struct&lt;/code&gt; personalizados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Previamente en “Aprende FCL”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/onflow/construye-en-flow-aprende-fcl-4-como-resolver-identidades-en-find-a-direcciones-en-flow-26nm"&gt;En el post pasado&lt;/a&gt;, aprendimos como interactuar con contratos desplegados y como retornar un valor &lt;code&gt;Struct&lt;/code&gt; personalizado de un script. Aprenderemos como construir sobre ese conocimiento y ejecutar un procedimiento más complejo - traer una lista de NFTs almacenados en una cuenta, mapearlos a nuestro formato favorito y retornarlos de vuelta. &lt;/p&gt;

&lt;p&gt;Empecemos! 💪&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es Flovatar?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flovatar es una de los muchos asombrosos proyectos sobre NFTs construido encima de Flow. En vez de dejarte comprar uno de esos miles de NFTs únicos, provee herramientas para que tu puedas agregar tu toque personal a un Flovatar que vaya con tu estilo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las primeras cosas primero, deberías encontrar la dirección donde el contrato está desplegado. El &lt;a href="https://github.com/crash13override/flovatar"&gt;GitHub de Flovatar&lt;/a&gt; tiene las direcciones para los contratos desplegados en la página principal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mainnet - &lt;strong&gt;0x921ea449dffec68a&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Testnet - &lt;strong&gt;0x0cf264811b95d465&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y en el archivo &lt;code&gt;get_flovatars.cdc&lt;/code&gt;, El contrato Flovatar tiene un método util que podemos usar llamado &lt;code&gt;getFlovatars&lt;/code&gt; que acepta una dirección como argumento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Flovatar&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mh"&gt;0x921ea449dffec68a&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;span class="nx"&gt;pub&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;Flovatar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FlovatarData&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;Flovatar&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getFlovatars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 1- Instalación
&lt;/h3&gt;

&lt;p&gt;Agrega &lt;code&gt;"onflow/fcl": "1.0.0"&lt;/code&gt; como tu dependencia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2 - Setup
&lt;/h3&gt;

&lt;p&gt;Como la última vez importaremos los métodos necesarios para configurar FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Importamos métodos de FCL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Especifica el endpoint de la API - esta vez usaremos Mainnet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://rest-mainnet.onflow.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configurar FCL para usar Testnet como el nodo de acceso&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3 - Implementar el método &lt;code&gt;getFlovatar&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Obtén una lista de Flovatars a través de direcciones.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getFlovatars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;adddress&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
        import Flovatar from **0x921ea449dffec68a**

        pub fun main(address:Address) : [Flovatar.FlovatarData] {
            return Flovatar.getFlovatars(address: address)
        }
    `&lt;/span&gt;
    &lt;span class="c1"&gt;// Necesitamos pasar un sólo argumento de tipo Address&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flovatars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;flovatars&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 4 - Démosle un intento
&lt;/h3&gt;

&lt;p&gt;Hagamos un llamado a nuestro método. Nuestro objetivo sera &lt;a href="https://find.xyz/luca"&gt;Luca (creador de Flovatar)&lt;/a&gt; - su dirección es &lt;code&gt;0x2a0eccae942667be&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x2a0eccae942667be&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;getFlovatars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si das una mirada a la consola veras una lista de objetos representando Flovatars.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u3qfMsNK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0j19ryzlfv7dl0wu5mc3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u3qfMsNK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0j19ryzlfv7dl0wu5mc3.png" alt="Image description" width="198" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No tan mal, verdad? Bueno… tratemos de desenvolver ese campo &lt;code&gt;metadata&lt;/code&gt; :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IOV8IPlO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cb0d0mv0y8j88g17t2z3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IOV8IPlO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cb0d0mv0y8j88g17t2z3.png" alt="Image description" width="630" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora eso es SVG para ti. Mientras que puedes traer esta data cada vez que el usuario refresque la página, idealmente querrías cachearla de alguna manera y solo consultarla cuando la necesites.&lt;/p&gt;

&lt;p&gt;Adicionalmente si consultas cuentas con cientos/miles de NFTs podrias sobrepasar el límite de valor retornable, el cual es alrededor de ~10Mbs.&lt;/p&gt;

&lt;p&gt;Si vas al &lt;a href="https://flovatar.com/showroom"&gt;Showroom de Flovatar&lt;/a&gt; y usas las dev tools en tu navegador puedes encontrar que todas las imágenes estan cacheadas en &lt;code&gt;https://flovatar.com/api/image/{id}&lt;/code&gt;. Traigamos solo los subcampos &lt;code&gt;id&lt;/code&gt; y &lt;code&gt;creatorAddress&lt;/code&gt; del campo &lt;code&gt;metadata&lt;/code&gt; de los NFTs. De esta manera podemos identificar si el dueño es un creador original de dicho NFT.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paso 5- Mejorando el script en Cadence
&lt;/h2&gt;

&lt;p&gt;Como recordarás del último post- podemos crear Struct personales que almacenarán toda la data que queremos retornar. Definiremos un Struct llamado &lt;code&gt;Avatar&lt;/code&gt; con dos campos: &lt;code&gt;id&lt;/code&gt; y &lt;code&gt;isCreator&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Trae una lista de FLovatars de una dirección&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getFlovatarsImproved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;adddress&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
        import Flovatar from **0x921ea449dffec68a

        pub struct Avatar{
      pub let id: UInt64
      pub let isCreator: Bool

      // guión abajo en frente de los argumentos nos permite pasarlos sin nombrarlos
            init(_ id: UInt64, _ isCreator: Bool){
        self.id = id
        self.isCreator = isCreator
      }
        }**

        pub fun main(address:Address) : [Avatar] {
            // Como la última vez llamaremos el método "getFlovatars"
            let flovatars = Flovatar.getFlovatars(address: address)

            // Colectaremos la data procesada del Flovatar aquí
      let data: [Avatar] = []

            // Un loop simple para iterar sobre Flovatars
      for flovatar in flovatars {
        let isCreator = flovatar.metadata.creatorAddress == address
        let avatar = Avatar(flovatar.id, isCreator)

                // agregar nueva instancia del Avatar en la lista resultante
        data.append(avatar)
      }
      return data  
    }
    `&lt;/span&gt;

    &lt;span class="c1"&gt;// Pasaremos la dirección como un argumento solitario de tipo Address&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flovatars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;flovatars&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Finalmente&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Actualicemos nuestro IFEE e intentemos nuevamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x2a0eccae942667be&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;getFlovatarsImproved&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta invocación resulta en una huella más reducida en la consola.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OLMNTQ8e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d51371ac-885c-4c30-afd7-c1060e4aaa2a/flovatars-small.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OLMNTQ8e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d51371ac-885c-4c30-afd7-c1060e4aaa2a/flovatars-small.png" alt="flovatars-small.png" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Contained information would be enough to construct a link &lt;/p&gt;

&lt;p&gt;La información contenida sería suficiente para construir un link (&lt;code&gt;https://flovatar.com/flovatars/{id}&lt;/code&gt;) o imagen (&lt;code&gt;https://flovatar.com/api/image/{id}&lt;/code&gt;) en tu interfaz. &lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐Challenge Extra
&lt;/h2&gt;

&lt;p&gt;Usando tu conocimiento de &lt;a href="https://dev.to/onflow/construye-en-flow-aprende-fcl-4-como-resolver-identidades-en-find-a-direcciones-en-flow-26nm"&gt;el post sobre resolver identidades en .find&lt;/a&gt; modifica el codigo para permitir pasar identidades de .find al método &lt;code&gt;getFlovatars&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Código del ejemplo&lt;/strong&gt;:  &lt;a href="https://codesandbox.io/s/dev-to-fcl-05-list-flovatars-at-address-0bibcd?file=/src/index.js"&gt;https://codesandbox.io/s/dev-to-fcl-05-list-flovatars-at-address-0bibcd&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence Structs&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/language/composite-types/#composite-type-declaration-and-creation"&gt;https://docs.onflow.org/cadence/language/composite-types/#composite-type-declaration-and-creation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repositorio de Flovatar en GitHub&lt;/strong&gt; - &lt;a href="https://github.com/crash13override/flovatar"&gt;https://github.com/crash13override/flovatar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contrato de Flovatar en Flow View Source&lt;/strong&gt; - &lt;a href="https://flow-view-source.com/mainnet/account/0x921ea449dffec68a/contract/Flovatar"&gt;https://flow-view-source.com/mainnet/account/0x921ea449dffec68a/contract/Flovatar&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que podrías encontrar útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - Más información detallada acerca de la blockchain de Flow y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - Tu portal de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la libreria de FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introduccion a Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un editor de texto genial para prototipar en el navegador.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta es una traducción al español del quinto artículo de la serie Build on Flow | Learn FCL escrito por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>web3</category>
      <category>flow</category>
      <category>fcl</category>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 4. Como resolver identidades en .find a direcciones en Flow</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Thu, 09 Jun 2022 22:38:39 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-4-como-resolver-identidades-en-find-a-direcciones-en-flow-26nm</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-4-como-resolver-identidades-en-find-a-direcciones-en-flow-26nm</guid>
      <description>&lt;p&gt;&lt;em&gt;Esta es una traducción al español del cuarto artículo de la serie Build on Flow | Learn FCL escrita por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En este artículo, aprenderemos como usar un contrato desplegado e interactuar con él. Interactuar con contractos existentes en la blockchain es un parte esencial de lo que hace a la Web3 especial.&lt;/p&gt;

&lt;p&gt;En este tutorial específico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resolveremos un identificador de nombre en &lt;code&gt;.find&lt;/code&gt; a una dirección &lt;code&gt;0x&lt;/code&gt; en Flow  (&lt;strong&gt;.find&lt;/strong&gt; → 0x)&lt;/li&gt;
&lt;li&gt;Busca el nombre &lt;code&gt;.find&lt;/code&gt; para una cuenta para una dirección &lt;code&gt;0x&lt;/code&gt; en Flow (0x0 → &lt;strong&gt;.find&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Previamente en “Aprende FCL”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si trabajaste a través de alguno de nuestros posts previos deberías saber como pasar argumentos a scripts en Cadence. Necesitaremos este conocimiento ya que en este tutorial pasaremos valores &lt;code&gt;String&lt;/code&gt; y &lt;code&gt;Address&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Empecemos! 💪&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cuando quieras interactuar con algún contrato desplegado, primero necesitas descubrir donde esta desplegado 😅. En nuestro ejemplo específico, .find es un servicio conocido y con la ayuda de su creador &lt;a href="https://github.com/bjartek"&gt;Bjarte&lt;/a&gt; fuimos capaces de encontrar la dirección del repositorio en GitHub en &lt;a href="https://github.com/findonflow/find"&gt;https://github.com/findonflow/find&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Pro Tip: puedes encontrar cualquier contrato que quieras, mientras tengas un hash de la transacción o una dirección de una cuenta que haya interactuado con el contrato en el pasado. Solo visita su historia en &lt;a href="https://flowscan.org/"&gt;flowscan.org&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;De vuelta a .find! Excavando un poco, puedes encontrar toda la información que necesitas dentro del archivo &lt;a href="https://github.com/findonflow/find/blob/main/integrating.md"&gt;integration.md&lt;/a&gt;. Específicamente, dos bloques de código en Cadence que usaremos como nuestros resolvedores. Este método para encontrar un nombre a través de una dirección:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FIND&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="mh"&gt;0x097bafa4e0b48eef&lt;/span&gt;

&lt;span class="nx"&gt;pub&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;?{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;FIND&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lookupAddress&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Y este otro para el proceso reverso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;FIND&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="mh"&gt;0x097bafa4e0b48eef&lt;/span&gt;

&lt;span class="nx"&gt;pub&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;?{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;FIND&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reverseLookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Paso 1 - Instalación
&lt;/h1&gt;

&lt;p&gt;Agrega &lt;code&gt;"onflow/fcl": "1.0.0"&lt;/code&gt; como tu dependencia.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Paso 2 - Setup&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Como la última vez importaremos los métodos necesarios para configurar FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Importamos métodos de FCL&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Especifica el endpoint de la API - esta vez usaremos Mainnet&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;https://rest-mainnet.onflow.org&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Configurar FCL para usar Testnet como el nodo de acceso&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  Paso 3 - Resolver una Alias de Identidad a una dirección
&lt;/h1&gt;

&lt;p&gt;Ahora crearemos una función llamada &lt;code&gt;resolveName&lt;/code&gt;. Esta función aceptará un parametro &lt;code&gt;String&lt;/code&gt;, pasa este a la blockchain junto con nuestro código resolvedor e imprime el resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resolveName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// El codigo Cadence que podemos obtener del script "resolve.cdc":&lt;/span&gt;
  &lt;span class="c1"&gt;// &amp;lt;https://github.com/findonflow/find/blob/main/scripts/resolve.cdc&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;// El contrato de .find está deployado en la Mainnet de Flow en la dirección "0x097bafa4e0b48eef"&lt;/span&gt;
    &lt;span class="c1"&gt;// usaremos esta direccion en la declaración de importación&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    import FIND from 0x097bafa4e0b48eef

    pub fun main(name: String): Address?{
      return FIND.lookupAddress(name) // we'll use .find's native lookupAddress method.
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

    &lt;span class="c1"&gt;// "query" es usado para operaciones de sólo lectura en la blockchain.&lt;/span&gt;
    &lt;span class="c1"&gt;// lee más acerca del método "query" en la pagina web de la documentación de Flow:&lt;/span&gt;
    &lt;span class="c1"&gt;// &amp;lt;https://docs.onflow.org/fcl/reference/api/#query&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; identity has address %c&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color: #36ad68; font-weight: bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  &lt;strong&gt;Paso 4 - Resolver una dirección a un Alias de Identidad&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Hagamos algo similar para revertir el proceso. Crearemos una función llamada &lt;code&gt;resolveAddress&lt;/code&gt; que acepta una dirección pasada como &lt;code&gt;String&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;resolveAddress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// El código Cadence para resolver una direccion como argumento &lt;/span&gt;
    &lt;span class="c1"&gt;// a una Address lo podemos obtener del script "name.cdc"&lt;/span&gt;
    &lt;span class="c1"&gt;// &amp;lt;https://github.com/findonflow/find/blob/main/scripts/name.cdc&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;// El contrato de .FIND esta deployado en la dirección "0x097bafa4e0b48eef" - usaremos esa dirección en la declaración de importación.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    import FIND from 0x097bafa4e0b48eef

    pub fun main(address: Address) : String?{
      return FIND.reverseLookup(address) // nota la nueva función
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;
    &lt;span class="c1"&gt;// "query" pasara código en Cadence para acceder al nodo para su ejecución y nos retornará un resultado&lt;/span&gt;
    &lt;span class="c1"&gt;// lee más acerca del método "query" en la documentación de Flow.&lt;/span&gt;
    &lt;span class="c1"&gt;// &amp;lt;https://docs.onflow.org/fcl/reference/api/#query&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; address is aliased to %c&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color: #36ad68; font-weight: bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;h1&gt;
  
  
  &lt;strong&gt;Finalmente&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Llamemos las funciones que creamos al final del archivo usando algunos parámetros de prueba.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❕Nota: Estamos llamando a esos métodos dentro de una IIFE por simplicidad. Uno puede imaginar ejecutándolos con un botón o como parte de un procedimiento más complejo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ejecutar este código debería emitir esto a la consola:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;bjartek&lt;/span&gt; &lt;span class="nx"&gt;identity&lt;/span&gt; &lt;span class="nx"&gt;has&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="mh"&gt;0x886f3aeaf848c535&lt;/span&gt;
&lt;span class="mh"&gt;0x886f3aeaf848c535&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;aliased&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;bjartek&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puedes encontrar el código completo en &lt;a href="https://codesandbox.io/s/dev-to-fcl-resolve-find-name-9tbo8e?file=/src/index.js"&gt;este Codesandbox&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hasta la próxima! 👋&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Recursos&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Código del ejemplo&lt;/strong&gt;: &lt;a href="https://codesandbox.io/s/dev-to-fcl-resolve-find-name-9tbo8e"&gt;https://codesandbox.io/s/dev-to-fcl-resolve-find-name-9tbo8e&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence Imports&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/language/imports/"&gt;https://docs.onflow.org/cadence/language/imports/&lt;/a&gt; - documentación sobre declaraciones &lt;code&gt;import&lt;/code&gt; en Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.find GitHub Repository&lt;/strong&gt; - &lt;a href="https://github.com/findonflow/find"&gt;https://github.com/findonflow/find&lt;/a&gt; - código completo y documentación de la plataforma .find.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que podrías encontrar útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - Más información detallada acerca de la blockchain de Flow y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - Tu portal de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la libreria de FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introduccion a Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un editor de texto genial para prototipar en el navegador.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>fcl</category>
      <category>flow</category>
      <category>web3</category>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 3. Como retornar valores arbitrarios desde un script</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Thu, 09 Jun 2022 21:33:31 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-3-como-retornar-valores-arbitrarios-desde-un-script-2oa6</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-3-como-retornar-valores-arbitrarios-desde-un-script-2oa6</guid>
      <description>&lt;p&gt;Esta es una traducción al español del tercer artículo de la serie Build on Flow | Learn FCL escrita por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vista previa
&lt;/h2&gt;

&lt;p&gt;En esta guía aprenderás como retornar un valor que contenga multiples otros valores que no son del mismo tipo. Haremos esto definiendo y usando &lt;code&gt;structs&lt;/code&gt; en Cadence, es decir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;definiendo un &lt;code&gt;Struct&lt;/code&gt; en el cuerpo del script.&lt;/li&gt;
&lt;li&gt;creando una instancia del mencionado &lt;code&gt;Struct&lt;/code&gt; y usándolo como valor de retorno del script.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Previamente en “Aprende FCL”
&lt;/h2&gt;

&lt;p&gt;En el post pasado, aprendimos como pasar argumentos a nuestro script en Cadence. Si recordamos el ejemplo &lt;code&gt;passMultipleDifferentTypes&lt;/code&gt; podíamos retornar un valor único, a pesar de que pasábamos tipos de valor diferentes.&lt;/p&gt;

&lt;p&gt;Hoy te mostraré como definir un &lt;code&gt;Struct&lt;/code&gt; personalizado en el cuerpo de tu script para poder usarlo como valor de retorno.&lt;/p&gt;

&lt;p&gt;Empecemos! 💪 &lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1 - Instalación
&lt;/h3&gt;

&lt;p&gt;Agrega &lt;code&gt;"onflow/fcl": "1.0.0"&lt;/code&gt; como tu dependencia&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2 - Configuración
&lt;/h3&gt;

&lt;p&gt;Como la última vez, importaremos los métodos necesarios para configurar FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://rest-testnet.onflow.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3 - Implementando el método &lt;code&gt;fetchCustom&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchCustom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    // Este script te permite definir Structs personalizados en su cuerpo. 
        // Crearemos uno y lo llamaremos Custom (puedes usar cualquier nombre que quieras)
    pub struct Custom {
      pub let number: Int
      pub let address: Address

      init(number: Int, address: Address){
        self.number = number
        self.address = address
      }
    }

    pub fun main():Custom {
            // para crear una instancia del struct usa su nombre
            // y pásale los argumentos de inicializacion entre paréntesis
            let t = Custom(number: 42, address: 0x1337)
      return t
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;custom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;custom&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`number field is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`address field is &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Finalmente
&lt;/h3&gt;

&lt;p&gt;Como siempre , ejecutamos el código con una IIFE:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetchCustom&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deberías ver el siguiente resultado en la consola:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="nx"&gt;field&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;
&lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="nx"&gt;field&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x0000000000001337&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Te perdiste? Puedes revisar el código completo en &lt;a href="https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx"&gt;este Codesandbox&lt;/a&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Código del ejemplo - &lt;a href="https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx?file=/src/index.js:1399-1512"&gt;https://codesandbox.io/s/dev-to-fcl-return-custom-struct-sgywnx&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Documentación sobre Structs en Cadence - &lt;a href="https://docs.onflow.org/cadence/language/composite-types/#composite-type-declaration-and-creation"&gt;https://docs.onflow.org/cadence/language/composite-types/#composite-type-declaration-and-creation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Otros recursos que te podrían ser útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - Más información detallada acerca de la blockchain de Flow y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - Tu portal de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la libreria de FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introduccion a Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un editor de texto genial para prototipar en el navegador.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>web3</category>
      <category>flow</category>
      <category>fcl</category>
    </item>
    <item>
      <title>Construye en Flow: Aprende FCL - 2. Pasando argumentos a Scripts</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Mon, 30 May 2022 17:26:13 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-2-pasando-argumentos-a-scripts-4ode</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-2-pasando-argumentos-a-scripts-4ode</guid>
      <description>&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Después de trabajar con el código en este post, sabrás como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pasar simple argumentos - &lt;code&gt;Int&lt;/code&gt; , &lt;code&gt;String&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;Pasar argumentos complejos - Arrays y Dictionaries.&lt;/li&gt;
&lt;li&gt;Pasar estructuras complejas - Arrays de Dictionaries, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Previamente en “Aprende FCL”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En posts pasados aprendimos como enviar scripts basicos en Cadence para su ejecución. En este te mostraré como pasar diferentes tipos de argumentos.&lt;/p&gt;

&lt;p&gt;Para este y todos los siguientes ejemplos usaremos Codesandbox para simplificar el proceso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1 - Instalación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agrega  &lt;code&gt;"@onflow/fcl": "1.0.0"&lt;/code&gt; como dependencia a tu proyecto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2 - Setup&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Como la vez anterior importaremos los métodos necesarios y configuraremos FCL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://rest-testnet.onflow.org](https://rest-testnet.onflow.org/)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 3 - Pasar enteros&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;passIntegers&lt;/code&gt; pasará dos enteros como argumentos a un simple script en Cadence el cual retornará su suma.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passIntegers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;// Aquí almacenaremos el código que queremos ejecutar.&lt;/span&gt;
&lt;span class="c1"&gt;// Podemos ponerlo en la misma línea que pasamos el método "query"&lt;/span&gt;
&lt;span class="c1"&gt;// pero se ve mas simple de esta manera.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pub&lt;/span&gt; &lt;span class="nx"&gt;fun&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;     
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// A pesar de que ambos argumentos son números, tenemos que pasarlos como String.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Int&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

&lt;span class="c1"&gt;// "query" pasará código Cadence y los argumentos para acceder a un nodo para ejecutarse y retornará el resultado&lt;/span&gt;
&lt;span class="c1"&gt;// lee más acerca del método "query" en la documentación de FCL:&lt;/span&gt;
&lt;span class="c1"&gt;// [https://docs.onflow.org/fcl/reference/api/#query](https://docs.onflow.org/fcl/reference/api/#query)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 4 - Pasar multiples tipos diferentes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;passMultipleDifferentTypes&lt;/code&gt; pasará argumentos de tipo String, Bool, UFix64 y Address.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passMultipleDifferentTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    pub fun main(a: String, b: Bool, c: UFix64, d: Address): Address{
      return d
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// Todos los valores numericos tienen que ser pasados como Strings, recuerdas? :)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;// Las direcciones también deberían ser pasadas como Strings.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// No todos los tipos son los mismos como especificamos en nuestro codigo en Cadence.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Bool&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;UFix64&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 5 - Pasar un Array&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El método&lt;code&gt;passArray&lt;/code&gt; pasará un array de Strings y retornará una de ellas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passArray&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    pub fun main(a: [String]): String{
      return a[1]
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cadence&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="c1"&gt;// El tipo del argumento esta compuesto por t.Array y t.String&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;))];&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 6 - Pasar un Dictionary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El método&lt;code&gt;passDictionary&lt;/code&gt; pasará un Dictionary como argument y luego retornará el valor de uno de los campos en el diccionario. Las llaves de dicho Dictionary seran de tipo &lt;code&gt;String&lt;/code&gt; y los valores de tipo &lt;code&gt;Int&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;passDictionary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// En este ejemplo pasaremos un diccionario de Cadence como argumento.&lt;/span&gt;
    &lt;span class="c1"&gt;// Las llaves seran de tipo String y los valores de tipo Int.&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    pub fun main(a: {String: Int}): Int?{
      return a["amount"]
    }
  `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Los diccionarios deben ser representados como listas de pares de clave y valor.&lt;/span&gt;
    &lt;span class="c1"&gt;// Nótese que aquí deberiamos pasar un valor numérico como String &lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;amount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}];&lt;/span&gt;
    &lt;span class="c1"&gt;// Para nuestro caso el tipo del diccionario esta compuesto de t.Dictionary, t.String y t.Int&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;arg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Int&lt;/span&gt; &lt;span class="p"&gt;}))&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 7 - Pasar argumentos complejos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El método&lt;code&gt;passComplex&lt;/code&gt; demostrará como pasar un listado de diccionarios como argumento. Conceptualmente es una combinación de Arrays y tipos de Dictionary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finalmente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agreguemos un IIFE  al final del archivo para popularlo con los métodos que acabamos de definir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;passIntegers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;passMultipleDifferentTypes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;passArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;passDictionary&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;passComplex&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cuando el polvo se asiente deberías ver lo siguiente en el historial de la consola.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;17&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0x0000000000000001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cadence&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;42&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;result&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1337&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Practica pasando diferentes tipos de argumentos, debería ser una tarea común para ti en el futuro.&lt;/p&gt;

&lt;p&gt;El código completo puede ser encontrado en Codesandbox aquí &lt;a href="https://codesandbox.io/s/dev-to-fcl-script-arguments-knpuel"&gt;https://codesandbox.io/s/dev-to-fcl-script-arguments-knpuel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta la próxima! 👋&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recursos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Otros recursos que te podrían ser útil:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación de Flow&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - Más información detallada acerca de la blockchain de Flow y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - Tu portal de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; - Código fuente y la habilidad de contribuir a la libreria de FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - Introduccion a Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; - Un editor de texto genial para prototipar en el navegador.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Esta es una traducción al español del segundo artículo de la serie Build on Flow | Learn FCL escrita por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>flow</category>
      <category>fcl</category>
    </item>
    <item>
      <title>Construye en Flow | Aprende FCL - 1. Introducción</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Fri, 27 May 2022 16:12:05 +0000</pubDate>
      <link>https://dev.to/onflow/construye-en-flow-aprende-fcl-1-introduccion-5463</link>
      <guid>https://dev.to/onflow/construye-en-flow-aprende-fcl-1-introduccion-5463</guid>
      <description>&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;br&gt;
Después de atravesar los ejemplos en este post sabrás:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qué es FCL y cómo se usa.&lt;/li&gt;
&lt;li&gt;Cómo configurar FCL JS para interactuar con la Testnet de la blockchain de Flow.&lt;/li&gt;
&lt;li&gt;Como ejecutar scripts en Cadence 💪&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es FCL?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La Flow Client Library (FCL) es un conjunto de patrones de comunicación estandarizados entre billeteras, aplicaciones y usuarios, usado para realizar una variedad de acciones desde tu dapp. Diferentes lenguajes tienen tienen su propia implementación de los conceptos y estándar de FCL .&lt;/p&gt;

&lt;p&gt;En el lado de JavaScript, es un paquete NPM usado para interactuar con billeteras de usuarios y la blockchain de Flow tanto como en el navegador y en el ambiente del servidor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Espera, que es la Flow blockchain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una buena cosa que hayas preguntado! Flow es una blockchain construida para la siguiente generación de juegos, aplicaciones y activos digitales que les dan poder.&lt;/p&gt;

&lt;p&gt;Hay muchas características diferentes que hacen a Flow único. Aquí algunas de ellas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - El nuevo lenguaje de programación orientado a recursos que es fácil de aprender diseñado para dapps y bienes digitales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contratos inteligentes actualizables&lt;/strong&gt; - Parcha bugs y actualiza partes pre-especificadas de un contrato inteligente de forma segura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rapido y de finalidad determinista&lt;/strong&gt; - Flow esta construido para ser rápido, responsivo - logrando finalidad global en segundos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para más información acerca de la blockchain de Flow visita &lt;a href="http://flow.com"&gt;flow.com&lt;/a&gt; y docs.onflow.org&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo simple&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En futuros posts demostraremos ejemplos mas complejos y significativos pero por ahora tratemos de hacer que la Testnet de Flow retorne un numero especifico para nosotros (por favor mantén presente que será mucho más interesante en un futuro).&lt;/p&gt;

&lt;p&gt;Usaremos la plataforma &lt;a href="https://codesandbox.io"&gt;Codesandbox&lt;/a&gt; para que compartir el resultado final sea mas fácil y permitirte clonar el sandbox y probar tus propias ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1 - Instalación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Añade &lt;code&gt;"@onflow/fcl": "1.0.0"&lt;/code&gt; como dependencia a tu proyecto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2 - Importar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FCL JS expone multiples metodos desde el paquete para construir interacciones, configurar FCL, interactuar con la blockchain, etc. Importaremos los metodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;query&lt;/code&gt; (&lt;a href="https://docs.onflow.org/fcl/reference/api/#query"&gt;https://docs.onflow.org/fcl/reference/api/#query&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;config&lt;/code&gt; (&lt;a href="https://docs.onflow.org/fcl/reference/api/#common-configuration-keys"&gt;https://docs.onflow.org/fcl/reference/api/#common-configuration-keys&lt;/a&gt;)
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Paso 3 - Configurar FCL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FCL necesita saber donde enviar ese script para ejecución. La siguiente línea establecerá el endpoint de Access Node usando el método &lt;code&gt;config&lt;/code&gt; .&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://rest-testnet.onflow.org](https://rest-testnet.onflow.org/)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Paso 4 - Ejecutar un script en la Testnet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En orden para ejecutar Cadence scripts en la blockchain de Flow, podemos enviarlos con el metodo &lt;code&gt;query&lt;/code&gt;. Nuestro caso básico no utiliza argumentos, asi que solo pasaremos el script en Cadence.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    pub fun main(): Int{
       return 42     
    }
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theAnswer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;theAnswer&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finalmente - Código completo&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@onflow/fcl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[https://rest-testnet.onflow.org](https://rest-testnet.onflow.org/)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;config&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accessNode.api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// We will use IIFE to execute our code right away&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    pub fun main(): Int{
       return 42     
        }
    `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theAnswer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;cadence&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;theAnswer&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;En el siguiente post resaltaremos como pasar un argumento a tus scripts. Quédate atentx! 👋&lt;/p&gt;

&lt;p&gt;El sandbox completo esta disponible aquí: &lt;a href="https://codesandbox.io/s/dev-to-fcl-introduction-zbhz0v"&gt;https://codesandbox.io/s/dev-to-fcl-introduction-zbhz0v&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links y fuentes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flow Docs Site&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/"&gt;https://docs.onflow.org/&lt;/a&gt; - más información detallada acerca de la blockchain de Flow y como interactuar con ella.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flow Portal&lt;/strong&gt; - &lt;a href="https://flow.com/"&gt;https://flow.com/&lt;/a&gt; - tu punto de entrada a Flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FCL JS&lt;/strong&gt; - &lt;a href="https://github.com/onflow/fcl-js"&gt;https://github.com/onflow/fcl-js&lt;/a&gt; -  código fuente y la habilidad de contribuir a la libreria de FCL JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence&lt;/strong&gt; - &lt;a href="https://docs.onflow.org/cadence/"&gt;https://docs.onflow.org/cadence/&lt;/a&gt; - introduccion a Cadence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codesandbox&lt;/strong&gt; - &lt;a href="https://codesandbox.io/"&gt;https://codesandbox.io&lt;/a&gt; -  editor de texto genial para prototipar en el navegador.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Esta es una traducción al español del primer artículo de la serie &lt;strong&gt;Build on Flow | Learn FCL&lt;/strong&gt; escrita por &lt;a href="https://twitter.com/MaxStalker"&gt;Maksimus Starka&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>flow</category>
      <category>tutorial</category>
      <category>fcl</category>
    </item>
    <item>
      <title>How to create a testnet account on Flow 🚀 </title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Mon, 07 Feb 2022 18:09:47 +0000</pubDate>
      <link>https://dev.to/brunogonzales/how-to-create-a-testnet-account-on-the-flow-blockchain-52lp</link>
      <guid>https://dev.to/brunogonzales/how-to-create-a-testnet-account-on-the-flow-blockchain-52lp</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Open a new terminal or go to &lt;a href="//repl.it"&gt;repl.it&lt;/a&gt; and sign in, then create a new &lt;strong&gt;Bash&lt;/strong&gt; sandbox.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NwEKx78o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95i5tqiak4h3plxn423i.jpg" alt="bash repl.it" width="719" height="932"&gt;
&lt;/li&gt;
&lt;li&gt;Type &lt;code&gt;sh -ci "$(curl -fsSL https://storage.googleapis.com/flow-cli/install.sh)"&lt;/code&gt; inside &lt;strong&gt;main.sh&lt;/strong&gt;.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ma1BfQ4O--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rk73hjz1xw8fmcxzj99i.jpg" alt="flow cli command" width="681" height="378"&gt;
&lt;/li&gt;
&lt;li&gt;Click the green button to execute the code that will install the Flow CLI.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rpv2yn1u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqxxa5fllbexcs8enbb4.jpg" alt="execute code" width="687" height="378"&gt;
&lt;/li&gt;
&lt;li&gt;On the console type &lt;code&gt;flow keys generate &amp;gt; keys.md&lt;/code&gt; to save your keys 🗝️ to a file.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xaCioXQS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pd47upic10az1d1gzc5q.jpg" alt="generate keys from the console" width="688" height="378"&gt;
&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Code&lt;/strong&gt;, then &lt;strong&gt;Files&lt;/strong&gt;, open &lt;code&gt;keys.md&lt;/code&gt; and copy the text below &lt;strong&gt;Public Key&lt;/strong&gt; 🗝️. Store your private and public key somewhere safe before deleting this file in order to protect your keys.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pL5_ocvV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l1ghzbuquk20t1raorfb.jpg" alt="open file with your keys" width="738" height="1464"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visit the &lt;a href="https://testnet-faucet.onflow.org/fund-account"&gt;Flow faucet&lt;/a&gt; to paste the public key 🗝️ on the &lt;strong&gt;Public Key&lt;/strong&gt; field and submit the form to create your account.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JLdtq_l5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dgxpgn39e1ssz8zdufe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JLdtq_l5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0dgxpgn39e1ssz8zdufe.jpg" alt="flow fauce" width="542" height="1100"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Congratulations! if you followed the previous steps you shall see your testnet account address on the screen. Click on &lt;strong&gt;View Account&lt;/strong&gt; to see your account information on Flow View Source.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lpwATNEQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zzlof816omh2e8l546j.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lpwATNEQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zzlof816omh2e8l546j.jpg" alt="testnet account created" width="533" height="972"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Testnet account information available at Flow View Source.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0uMh-_oK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csgx7jmnm23ypoy6ijdq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0uMh-_oK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csgx7jmnm23ypoy6ijdq.jpg" alt="flow view source" width="638" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; Fund your account again through the &lt;a href="https://testnet-faucet.onflow.org/"&gt;faucet&lt;/a&gt; by clicking the &lt;strong&gt;Fund account&lt;/strong&gt; button and  entering your testnet account address. Then search the address on &lt;a href="https://flow-view-source.com/testnet"&gt;Flow View Source&lt;/a&gt; and verify that your balance was bumped 1000 FLOW. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xAX2k8i8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8rre1k8bpue0y07zksk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xAX2k8i8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8rre1k8bpue0y07zksk.jpg" alt="challenge solution" width="528" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🚀 Get started building on Flow reading the &lt;a href="https://docs.onflow.org/"&gt;documentation&lt;/a&gt; or &lt;a href="https://play.onflow.org/"&gt;try Cadence on the playground&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>tutorial</category>
      <category>flow</category>
    </item>
    <item>
      <title>Authentication in 6 minutes using Vue 3 and Flow blockchain</title>
      <dc:creator>Bruno Gonzales</dc:creator>
      <pubDate>Sat, 26 Jun 2021 02:39:11 +0000</pubDate>
      <link>https://dev.to/brunogonzales/authentication-with-vue-3-and-flow-blockchain-2m7e</link>
      <guid>https://dev.to/brunogonzales/authentication-with-vue-3-and-flow-blockchain-2m7e</guid>
      <description>&lt;p&gt;In this 6 minutes tutorial we'll Codesandbox to implement client side authentication using Flow and Vue. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/834ehFyjmg8"&gt;https://youtu.be/834ehFyjmg8&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flow</category>
      <category>vue</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
