Fundamentos de la tecnología blockchain

¿Cómo llegamos a pagar millones por un png/jpeg virtual? ¿Cómo llegamos a que una moneda virtual costara $20,000. USD?

El contexto lo es todo, y aquí lo hablaremos.

Sabías que aproximadamente solo el 8% del dinero del mundo existe de manera física, es decir billetes y monedas, el resto ya es digital, de manera electrónica

Pero primero entandamos que es el dinero.

¿Qué es el dinero?

El dinero son varias cosas: lo primero es que el dinero es una herramienta para transferir valor y sirve como medio de intercambio para mover o intercambiar valor entre personas, adicionalmente el dinero es también una unidad de cuenta, el dinero es la forma como se puede medir el valor de las cosas por eso las cosas tienen precio y finalmente el dinero sirve como depósito de valor, sirve para guardar valor pensando en el futuro

Bitcoin es la primera aplicación a la tecnología blockchain y bitcoin pretende ser una nueva forma de dinero, ahí está la conexión entre blockchain y dinero. Bitcoin es una red de ordenadores, bitcoin es un software que se instala en estos ordenadores y bitcoin es una criptomoneda que es una nueva forma de transferir valor por internet.

Breve historia del dinero

El trueque

En épocas antiguas la humanidad usaba el trueque para realizar actividades comerciales e intercambiar valor entre personas. En su forma básica consiste en el intercambio de bienes y servicios generados por dos personas.

El trueque permite que las dos partes involucradas en una transacción se vieran beneficiadas, pues cada parte obtenía algo que deseaba a cambio de algo que tenía en exceso o de una actividad que estaba dispuesto a realizar, que hubiera doble coincidencia de deseos

Dinero primitivo

Para solucionar el problema de la doble coincidencia de deseos, los seres humanos descubrieron que había unos bienes intermedios (que vamos a llamar dinero primitivo) por los que había una demanda continua entre los miembros de la comunidad y que podían conservarse para hacer intercambios más adelante. Conformado principalmente por materias primas y artículos coleccionables, que conservaban su valor por cierto periodo y podían ser almacenados de manera fácil para ser intercambiados por bienes y servicios en el futuro.

El dinero primitivo podía tomar diferentes formas en diferentes lugares, como el ganado, la sal, las plumas de animales exóticos, el tabaco. Piedras rai, que son piedras calizas de forma circular con un agujero en el centro que no se pueden encontrar de forma natural en la isla de yap, se pueden encontrar en una isla cerca y es necesario transportarla en balsas hasta la isla . Deseados por su rareza, escasez y gran esfuerzo para llevarla a la isla. 

Si bien el dinero primitivo solucionaba algunos de los problemas originales del trueque, todos estos bienes presentaban varios inconvenientes para funcionar como dinero, la mayoría no eran fungibles, eran difíciles de dividir, difíciles de transportar y su valor no necesariamente se podría conservar en el tiempo.

Fungible: es una propiedad del dinero que se tiene cuando una cantidad de dinero es igual a la misma cantidad del mismo dinero representado en otra forma.

Direcciones en Solidity

El blockchain de Ethereum esta construido de cuentas, que puedes razonar como cuentas de bancos. Una cuenta tiene balance de Ether, la moneda usada en el blockchain de Ethereum. Puedes utilizar estas cuentas para enviar y recibir Ether, así como puedes hacerlo con cuentas de bancos que transfieren dinero a otras cuentas de banco.

Cada cuenta tiene una dirección, exactamente igual que las cuentas de banco. Es un identificador único que apunta a tu cuenta, y se así:

0x1B0fcE686a0A3d46c7838d5a3fb39A506e40Bf6f

(Esta dirección es mía, puedes enviar Ether si quieres 😉 )

Estas direcciones pertenecen a un usuario único (o un contrato inteligente).

Source: https://cryptozombies.io/en/lesson/2/chapter/2

También te puede interesar

Eventos: https://alanhurtarte.com/eventos-en-solidity/

Funciones puras: https://alanhurtarte.com/funciones-puras-en-solidity/

Eventos en solidity

Los eventos en solidity son como en cualquier otro lenguaje, emisor y receptor. Se usan para comunicar que algo paso en el blockchain hacia tu frontend, el cual estará «escuchando» para ciertos eventos y tomara acción cuando suceda.

Por ejemplo:

// declarando el evento
event EnterosSumados(uint x, uint y, uint resultado);

function sumar(uint _x, uint _y) public returns (uint) {
  uint result = _x + _y;
  // disparar el evento hacia el app
  emit EnterosSumados(_x, _y, result);
  return result;
}

Tu frontend podría estar escuchando el evento. Una implementación en Javascript podría verse así:

TuContrato.EnterosSumados(function(error, result) {
  // haz algo con el resultado
})

Source: https://cryptozombies.io/en/lesson/1/chapter/13

También te puede interesar:

Funciones puras en solidity: https://alanhurtarte.com/funciones-puras-en-solidity/

Funciones puras en Solidity

En solidity hay funciones llamadas puras o pure en ingles, que es cuando no se accede al app ni se escribe sobre ella, solo se usa lo que se mande por parámetros.

Por ejemplo

function _multiply(uint a, uint b) private pure returns (uint) {
  return a * b;
}

Esta función ni siquiera lee el estado del app. El valor a retornar depende solo de los parámetros de la función.

Cabe mencionar que puede ser difícil de recordar cuando marcar una función como pure/view. Por suerte el compilador es bueno para recordar con warning de cuándo deberías usar uno de estos modificadores.

Source: https://cryptozombies.io/en/lesson/1/chapter/10

Lo que aprendí del Toptal JS Speeding Challenge

El toptal js speeding challenge concluyo ya hace unas semanas, y tenía premios geniales como $1000 gift card en amazon y unos airpods para el primer lugar. Lo que aprendí yc de cómo podrías ganarlo.

Muchos como a mí les habra salido la publicidad del challenge de toptal, apelaban al orgullo de si podías resolver algo con js rápido, y no me convencían, paso una semana con estos anuncios constantes hasta que decidí participar. Lo curioso es que la publicidad que funciono fue una que apelaba a mi nacionalismo. Algo tipo «ayuda a que tu país rankee mas alto». Me parece curioso que eso me llevo a la acción.

El primer intento

Bueno dije yo, participe y resultaron ser los típicos ejercicios de JS que hacen en las entrevistas laboras. Algunos mas fáciles como retorno un numero al cubo, o sacar la raíz cuadrada de un número. Otros un poco más complejos como encontrar anagramas y palíndromos.

En mi primer intento saque 15 puntos, fueron 3 ejercicios acertados en 2:30 minutos. Me pareció muy poco tiempo pero pensé, de esto se ha de tratar, quién typea mas rapido. Al terminar mi tiempo me llevo a mi scoreboard nacional, solo habían unos 8 participantes y estaba sexto en el listado de Guatemala, pero el primer lugar tenía 4500 puntos. Eso es imposible dije yo, o logro hackear el timer o esta haciendo algo más, porque no hay manera de escribir tan rápido. Luego vi el score global y era lo mismo, arriba de 4000 puntos.

Lo que necesitaba era automatización

Después de ver los scores más altos encontré que esto tenía que ser un bot, o algo similar. Investigue un poco y decidí probar https://github.com/puppeteer/puppeteer. Resulta que esta herramienta se utiliza para automatizar pruebas y acciones en un navegador tal y como la haría una persona, pero mucho más rápido. Pase dos días perdido probando e investigando como niño que descubrió algo nuevo.

Resulto que el Toptal JS Speeding Challenge resulto ser mas un concurso de velocidad de automatización que de Javascript.

Solución

Ya con esta solución solo fue cuestión de tiempo para encontrar el patrón y automatizar todas las respuestas. Yo entre el penúltimo día de la competencia, logre una puntuación alta, mas no perfecta. Logre quedar en el puesto 15 de América y como en el 97 a nivel global. Mi solución puede encontrarse aquí https://github.com/kenny08gt/toptal-speed-coding-challenge-js

Leaderboard en América
Leaderboard en Americas (mejor posición que llegue, luego quede 15)

Que queda por mejorar y aprendí

Realmente creo que mis soluciones se pueden mejorar para dar un mejor tiempo de respuesta, sin embargo creo que es más fundamental encontrarse en un lugar con poca latencia. En un concurso tan competido, donde el tiempo es la medida de calificación, sería perfecto tener una conexión con poca latencia. Donde en vez de tardarse 300ms la conexión pudiera darse en menos de 100ms. Multiplica eso por 36 ejercicios y ya son mas de 3 segundos menos, por dar un ejemplo. Esta podría ser la clave para ganarlo o rankear mas alto.

No te olvides de pasar otros de mis posts

Mi experiencia con DataScience

Soy un ingeniero de software con mas de 4 años de experiencia laboral, me gradué en el tiempo previsto de la carrera lo cual habla de insistencia, compromiso y oportunidad, más que de mi capacidad. Me considero una persona promedio.

Inicie un master en Data Science en la universidad Galileo de Guatemala. Porque? Tengo la idea de seguir superándome, así encontrar mejores oportunidades laborales, ganar más dinero, e ir progresando junto a los míos. Se que existen mas postgrados aplicable a mi carrera pero este fue análisis

  • Cualquier cosa relacionada a redes un rotundo no, no fue lo mío durante mi carrera universitaria
  • Cosas relacionadas al management. Claro atrae por ser puestos de gerencia o jefes, pero de pensar llevar clases cómo contabilidad me desinflan enormemente.
  • Seguridad informática, se me hace un mundo lleno de burocracia y edificios grises y tristes llenos de gente en traje frustrada.

Entonces quería algo técnico que supusiera una mejora salarial al final. Mi experiencia fue emocionante pero debo decir que no sabía al 100% que me esperaba, me tope con un programa mas dirigido a personas no técnicas con background estadísticos que a personas técnicas con no background estadísticos.

Las clases de programación o técnicas eran a pasos de bebe, desde cero, pero las clases estadísticas ya eran avanzadas. Esto llevo a frustración en estadística, y aburrimiento en programación.

Termine exitosamente el postgrado inicial, pero me quede con un sabor amargo, puedo hacer todo en teoría, obtendré los resultados esperados, pero no entiendo el porque, resulta que necesitaba una fuerte base de algebra lineal. Hubiera sido un buen requisito llevar un curso previo al master.

Aunque este primer acercamiento no fue el deseado, creo que hay mucho potencial en el area y sera algo interesante de volver estudiar en un futuro cercano

LinkedIn
Share
Instagram
WhatsApp