Cómo crear tú primer cliente para NEAR

Devsebasgr
3 min readApr 6, 2022

Actualmente los únicos clientes que existen son para JavaScript, Rust y C# (Como librería para unity, algo rota). NEAR es una red que está en constante crecimiento en el navegador, por eso es importante que se expanda a diferentes lenguajes de programación y poder conectarse hasta dentro de un micro controlador.

En este artículo nos vamos a enfocar en cómo crear un cliente de NEAR y cómo podemos conectarnos a su red para obtener y escribir datos en su blockchain.

¿Cómo conectarse a la red de NEAR?

NEAR es una red descentralizada, por lo que posee varios nodos para conectarse a su blockchain, los cuales almacenan su último estado. Para interactuar con dichos nodos se usan los RPC endpoint. Un RPC (remote procedure call) endpoint es un tipo de dirección URL, mediante la cual puedes hacer peticiones a la blockchain. Algunos de ellos son por ejemplo:

En todas las direcciones se pueden hacer peticiones con un objeto JSON que contiene el método que se desea ejecutar, ya viene siendo una método de solo lectura en la blockchain o de escritura. Los de escritura son llamados transacciones y puedes hacer acciones como llamar a funciones call de un contrato, eliminar las llaves de una cuenta, subir un contrato, transferir tokens, etc.

¿Cómo llamar a un método en los RPC Endpoints?

Por ahora, sólo vamos a necesitar una herramienta para hacer peticiones https, como puede ser Postman. La estructura para las peticiones será: la URL del nodo que queramos, Post como método HTTP y en el cuerpo de la petición se coloca un objeto JSON como este:

Con esto ya es posible llamar a todos los métodos que existen y ver todos los demás métodos.

No obstante, todos los métodos que modifiquen el estado de la blockchain (broadcast_tx_async y broadcast_tx_commit), son considerados transacciones y es realmente escasa la documentación disponible para ellos. De hecho, el único procedimiento (esquema JSON con la información que requiera la acción) disponible es la acción para transferir nears (https://docs.near.org/docs/api/rpc/transactions). Sin embargo, por suerte en la librería near-api-js están todas las acciones y los esquemas. Ahora, con esta información podemos crear este tipo de métodos.

En primer lugar, debemos tener las credenciales (la llave pública y privada de la cuenta que usaremos para llamar la transacción). Algún lenguaje scripting que tenga alguna librería de criptografía TweetNaCl, una para sha256, una de deserialización y de serialización borsh, base58, base64.

Una vez que tengamos todos estos criterios listos ya podemos hacer una transacción. Comenzamos usar el método query llamando view_access_key, del resultado nos quedamos con los valores: nonce, el block_hash y la llave pública. Al valor de nonce le sumamos uno y al block_hash lo decodificamos con base58. Con estos datos rellenamos el esquema de las transacciones, seleccionamos el método broadcast_tx_async o broadcast_tx_commit y al tipo de acción que queramos usar. El siguiente ejemplo ilustra cómo llamar a una función call de un contrato:

Este ejemplo es para llamar a una funcion call de un contrato

Posteriormente, usaremos la librería de borsh para serializar todo el JSON que tenemos armado y aplicaremos hash con el método sha256 al resultado obtenido. El hash lo codificamos con base58 y lo firmamos con la llave privada con TweetNaCl. En caso de que aparezcan varios métodos de encriptación, usamos el ed25519. Importante!!! las credenciales de NEAR comiencen con “ed25519:”. En caso de ser así, se debe eliminar ese prefijo y utilizar el resto para firmar.

Luego de la firma, procedemos a codificarlo en base64 y lo incluimos como en el valor de params.

Si fue enviado con broadcast_tx_async, el resultado será el hash de transacción y sabremos cuándo esté lista, por medio de los querys. Por otra parte, si fue enviado con broadcast_tx_await, luego de un período de espera, recibiremos un JSON con el resultado final.

Y esto esto lo que se necesita saber para crear un cliente para NEAR, es muy general y casi todos los lenguajes de programación tienen disponible todas estas librerías para empezar con la creación de tu cliente.

--

--

Devsebasgr

Programo cosas que sale en la pantalla y en la blockchain de near