Dominando Web 3.0 con Waves -Módulo #5

Kolin Platform
Dominando Web3.0 con Waves
14 min readJul 7, 2019

Módulo #5: Tokenización y Activos Inteligentes

5.1 Tokenización

5.2 Operaciones con activos digitales: Parte 1.

5.3 Operaciones con activos digitales: Parte 2.

5.4 Activos digitales inteligentes

5.5 Activos digitales del Coupon-Bazaar.

¿Qué es la tokenización?

Lo primero que tenemos que discutir es qué es exactamente la tokenización. En términos generales, la tokenización es el proceso de convertir algún tipo de activo en un token que se puede mover, utilizado o almacenado en un sistema de blockchain. Eso suena más complejo de lo que es. En pocas palabras, la tokenización convierte el valor almacenado en algún objeto (un objeto físico, como una pintura, o un objeto intangible, como un crédito de carbono) en un token que se puede manipular a lo largo de un sistema de cadena de bloques.

https://blockonomi.com/tokenization-blockchain

Como podemos ver, “La evolución del dinero” tiene varios hitos importantes:

  • Trueque antes de dinero
  • Oro y plata despues
  • Monedas de metal
  • Papel moneda o billetes de banco
  • Tarjetas de plástico
  • Dinero electrónico
  • Y, por último, las criptomonedas y tokens: el fenómeno moderno.

Por lo tanto, los tokens son formas digitales de activos más efectivas y automatizadas.

Debido a su naturaleza descentralizada, las operaciones con tokens están completamente automatizadas y no pueden ser moderadas ni bloqueadas por ningún tercero. Hace que los sistemas tokenizados sean globales y estén disponibles para todos en la Tierra. No importa cuál sea el país de origen, situación política, cultura, religión o situación económica.

Para tener un valor monetario, cualquier activo criptográfico (token) debe ser líquido.

En negocios, economía o inversión, la liquidez del mercado es una característica del mercado por la cual una persona o empresa puede comprar o vender un asset de forma fácil y rápida sin causar un cambio drástico en el precio del activo.

Para tener un valor de utilidad, cualquier token debe diseñarse como un componente requerido por parte de la dApp u operación comercial.

Los tokens también pueden ser intercambiados utilizando diferentes estrategias de negociación dentro de intercambios, creando ordenes de compra o venta. Tal como lo haria con otros activos (assets)

Waves DEX: es un intercambio descentralizado que posee listados muchos activos tokenizados líquidos.

Al igual que todo en la economía, los activos criptográficos tienen un precio determinado por el equilibrio entre oferta y demanda. A mayor demanda — el precio de un criptoactivo es más alto. Nota: es posible que esto no funcione con ciertos Activos Inteligentes (smart assets), donde algunas opciones pueden ser restringidas aplicando un script de activos.

Ya estamos familiarizados con WAVES, el token nativo de la red pública blockchain de Waves.

En cualquier blockchain pública, un token nativo es muy importante para la funcionalidad de la plataforma:

  • Hace que cualquier ataque DDoS sea caro (debido a las tarifas)
  • Incentiva a los nodos de la red / productores de bloques a mantener la red.
  • Incentiva a los colaboradores de la plataforma a mejorar la infraestructura.

En este módulo, intentaremos crear nuestro propio token y automatizar algunas operaciones con dicho token haciéndolo inteligente.

Llamemos tokens que no son “nativos” de la cadena publica (como WAVES), como “tokens personalizados”. Todo otro token además de WAVES son tokens personalizados en la cadena de bloques de Waves.

​​Hay muchas cosas que podemos hacer con tokens personalizados:

* Issue — significa que somos capaces de crear nuestros propios tokens

* Re-Issue — significa que podemos “imprimir” más tokens (si es posible, depende de los parametros utilizados en Issue) o cambiar su lógica mediante la aplicación de un asset-script

* Burn — significa que, en ciertas circunstancias, podemos eliminar algunos tokens del total circulante

* Transfer — nos permite transferir o movilizar nuestros tokens en la red

* Exchange — podemos intercambiar tokens en un DEX (intercambio descentralizado)

* Invokations — nuestras dApps también pueden trabajar con tokens personalizados

* Asset Script — el proceso por el cual se crea un Activo Inteligente a partir de un Activo Personalizado, o cambiar el comportamiento de un activo inteligente existente

¡Aprendamos a trabajar con tokens en nuestras aplicaciones web3!

Todos pueden emitir un nuevo token con ciertos parámetros. Para hacer eso en JavaScript, simplemente use una transacción de issue.

Este es el caso para crear un “token personalizado”.

Mira el parámetro — decimals (decimales). Al configurarlo como 2, funcionará de la misma manera que el EUR y CENT. Donde un CENT es un 1/100 de un EUR y tmbien el valor mínimo disponible para operaciones de transferencia, intercambio o quema.

Si configura el parámetro reissuable en falso, nunca podrán cambiarse los parámetros del token emitido (volver a emitirse o convertirse en un activo inteligente).

Documentación: https://docs.wavesplatform.com/en/blockchain/token/custom-tokens.html

API: https://wavesplatform.github.io/waves-transactions/globals.html#issue

P.S.: En la interfaz de usuario de Waves, cualquier persona puede emitir un token con solo hacer unos pocos clics:

(Cliente UI de Waves para testnet : https://testnet.wavesplatform.com/tokens)

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente emitir su propio token utilizando el código JS del “Paso 2” (con 2 decimales).

Encuentre este token en el explorador y ponga aquí el valor del campo “Scripted”:

Pista: https://wavesexplorer.com/testnet/assets/{asset_id}

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente emitir su propio token utilizando el código JS del “Paso 2” (con 2 decimales).

Encuentre esta transacción de emisión en el explorador y ponga aquí el valor del campo “Fee”:

Pista: https://wavesexplorer.com/testnet/tx/{asset_id}

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente emitir su propio token utilizando el código JS del “Paso 2” (con 2 decimales).

Busque la cuenta del emisor en el explorador de Waves (assets tab) y ponga aquí el valor del campo “Balance” para el token emitido:

Los usuarios pueden emitir tokens indivisibles estableciendo decimales en cero.

En nuestro bazar de cupones, estamos trabajando con activos digitales indivisibles: “cupones”.

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente emitir su propio token indivisible (cantidad — 100) utilizando el código JS del “Paso 6” (con 0 decimales).

Encuentre la cuenta del emisor en el explorador (assets tab) y ponga aquí el valor del campo “Balance” para el token indivisible emitido:

Re-Issue — significa que podemos “imprimir” más tokens (si es posible, dependiendo de los parámetros de emisión) o cambiar su lógica aplicando un asset script

El proveedor puede desear vender un poco más de cupones para el mismo servicio o producto en el mercado.

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente emitir su propio token indivisible (cantidad — 100) utilizando el código JS del “Paso 6” (con 0 decimales). Vuelva a emitir 10 fichas más (“Paso 8”).

Encuentre la transaccion de re-emisión en el explorador y ponga aquí el valor del campo “fee”:

En la interfaz de usuario de Waves, cualquiera puede transferir un token de una dirección a otra.

Cliente UI Waves para Testnet: https://testnet.wavesplatform.com/wallet/portfolio

Hagamos eso primero en la interfaz de usuario y luego en JavaScript.

Encuentre su token de cupón en la cartera e intente enviar su token nuevo a otra dirección.

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente enviar un token de cupón en la UI del cliente de Testnet:

Encuentre la transferencia en el explorador y ponga aquí el valor del campo “Fee”:

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

¿Qué función de la API (@waves-transaction) se está utilizando para realizar transferencias de activos?

Exchange — Podemos intercambiar tokens en el DEX (intercambio descentralizado)

Vamos a hacerlo manualmente en el Testnet DEX:

El emisor puede vender sus fichas al realizar un pedido de venta “Sell”. Esto es posible debido a que otros usuarios están haciendo pedidos de compra “Buy”, creando un mercado P2P.

Por lo tanto, libro de pedidos/ordenes puede ser generado para nuestro token.

Cuando los precios por venta “Sell” y compra “Buy” son los mismos, tenemos una concordancia y se ejecutan las ordenes de intercambio- i.e. Exchange Transaction.

API: https://wavesplatform.github.io/waves-transactions/globals.html#exchange

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Intente intercambiar algunos tokens de cupones en el Testnet DEX (de una cuenta a otra):

Use el par “cupon / WAVES”.

Encuentre el intercambio de divisas en el explorador y ponga aquí el valor del campo “Fee”:

Página con el enlace de la interfaz de usuario de Waves: https://stepik.org/lesson/237607/step/2?unit=209936

Utilice una ‘cuenta estandar’ (no inteligente) como proveedor de firmas para todos los desafíos presentes en este módulo. De lo contrario, las tarifas serán diferentes.

Los usuarios pueden quemar (Burn) sus tokens.

Por ejemplo: en nuestro caso, los proveedores pueden desear quemar tokens de cupones cuando los cupones se hayan transferido de vuelta por parte de los clientes.

API: https://wavesplatform.github.io/waves-transactions/globals.html#burn

Vamos a quemar 10 tokens:

Encuentre la transaccion de burn en el explorador y ponga aquí el valor del campo “Fee”:

En módulos anteriores, hemos visto cómo las dApps podrían funcionar con WAVES (el token nativo).

Para permitirles trabajar con tokens personalizados, debemos aplicar cierta lógica a las funciones @Callable.

Veamos el ejemplo del “monedero multiusuario” que funciona ahora solo con la moneda (token) de wEUR creada:

i.payment.assetId — debe utilizarse para permitir o denegar las transacciones de la dApp.

ScriptTransfer está utilizando el assetId adecuado para ejecutar la transferencia de fondos desde la cuenta de una dApp a otras direcciones.

La misma lógica es necesaria en el código JavaScript. Simplemente use su ID de activo en el parámetro de pago de invokeScript tx.

Intente implementar una nueva cartera dApp (“Paso 1”) que funcione con su token e implemente el script de cuenta.

Encuentre este script en el explorador y ponga el código descompilado aquí:

Intente implementar una nueva cartera dApp (“Paso 1”) que funcione con su token e implemente el script de cuenta.

Deposite 3 tokens wEUR en la dApp.

Encuentre el depósito en el explorador y ponga el valor del campo de pago/”Payment” aquí:

Un token no fungible (NFT) es un tipo especial de token criptografico que representa algo único; Por lo tanto, las fichas no fungibles no son intercambiables. Esto contrasta con las criptomonedas como bitcoin, y muchos tokens de redes o utilidades que son fungibles naturalmente.

https://en.wikipedia.org/wiki/Non-fungible_token

Los tokens no fungibles se utilizan para crear una escasez digital verificable. Los NFT se utilizan en varias aplicaciones específicas que requieren elementos digitales únicos, como crypto-collectibles y crypto-gaming, certificados o cupones únicos.

En Waves, los NFT son tokens personalizados con 0 decimal y 1 cantidad.

La tarifa de emisión para un NFT es 1000x menor que para los no NFT.

Los usuarios no pueden enviar un pedazo (unidades con decimales) de estos tokens ya que son indivisibles.

Hablemos un poco nuevamente sobre contratos inteligentes.

Los contratos tradicionales representan un acuerdo entre los participantes (partes), estos acuerdos deben ser validados y ejecutados por un tercero ya sea alguna entidad oficial o gobierno. Por lo tanto, estos participantes externos son clave para la validación de las condiciones del contrato, considerando las circunstancias externas y otros eventos que podrían influir en la ejecución del contrato.

A pesar de poseer términos similares, los contratos inteligentes no son contratos que sigan la definición de “acuerdo entre las partes”. El contrato inteligente es un código o programa de computadora que puede ejecutarse dentro de un entorno distribuido como una red blockchain. Todas las operaciones y resultados de ejecución se almacenan en la cadena de bloques.

En esta definición, un contrato inteligente no es un contrato entre partes, sino un protocolo de cooperación entre usuarios, que también puede ser entre usuario y computadora o incluso computadora — computadora según las reglas descritas en el código del contrato inteligente.

En Waves tenemos dos tipos de contratos inteligentes: Cuentas inteligentes (o dApps) y Activos inteligentes.

Un script de Activo inteligente (Smart Asset) permite o niega algunas transacciones salientes a realizarse con ciertos activos, dependiendo de condiciones descritas dentro del código del script del smart asset.

Veamos el gran ejemplo de trabajo de los activos inteligentes: Waves Reward Tokens (WRTs).

El objetivo: solo los embajadores podrán vender WRT, el cual el equipo de Waves volverá a comprar a travez del DEX. Es un caso especial de programas de lealtad y motivación.

Los miembros de Waves Community que cumplieron con ciertas condiciones están recibiendo cierta cantidad de WRT (mensual o trimestral).

Posteriormente, podrán enviar WRT a los embajadores de Waves como recompensa por sus actividades.

Al presentar WRT, el equipo de Waves alienta a la comunidad a realizar un seguimiento de las actividades de los embajadores, expresando opiniones y recompensándolas, si lo merecen.

El activo inteligente funcionará de la siguiente manera:

  • WRT solo se puede enviar a direcciones incluidas en la lista blanca (las de los embajadores)
  • El token no puede ser quemado
  • No puede ser negociado en DEX; Sólo las direcciones en lista blanca pueden venderlo

El identificador de token WRT de mainnet: H1RmwqzeXsdQMt6jR6DPkGbZjA2PKUoofP4WjuCRz1st

Encuentre el token WRT en el explorador de Waves de la red principal y coloque aquí el script descompilado de activos inteligentes:

Encuentre el token WRT en el explorador de Waves y lea el script descompilado del activo inteligente.

Encuentre el almacenamiento de key-value que especifica la lista blanca y ponga todos los datos de key-value aquí:

Intente crear su propio Smart Asset aplicando el script a su token emitido (elija cualquier formulario creado en este módulo o cree uno nuevo).

En este script de activos inteligentes, solo se permiten transacciones de intercambio para todos.

API: https://wavesplatform.github.io/waves-transactions/globals.html#setassetscript

StackOverflow: https://stackoverflow.com/questions/55041411/how-to-set-a-script-for-an-asset-using-waves-ide

Hint: La biblioteca de IDE tiene ejemplos de casos de uso de activos inteligentes.

Ponga el código de su activo inteligente RIDE aquí:

Esta es una continuación del paso anterior …

Intente crear su propio Smart Asset aplicando el script a su token emitido (elija cualquier formulario creado en este módulo o cree uno nuevo).

En este script de activos inteligentes, solo se permiten transacciones de intercambio.

API: https://wavesplatform.github.io/waves-transactions/globals.html#setassetscript

StackOverflow: https://stackoverflow.com/questions/55041411/how-to-set-a-script-for-an-asset-using-waves-ide

Estamos construyendo un mercado Web3.0 descentralizado de cupones: “Coupon Bazaar”.

Los usuarios están buscando descuentos en productos y servicios que puedan comprar por un pequeño precio en el mercado.

Cada cupón es un activo digital que representa un descuento especial proporcionado por un proveedor.

“Coupon Bazaar” es un mercado de activos digitales: cupones en forma de token proporcionados por los proveedores.

Los proveedores pueden configurar cierta lógica para los tokens de cupones, como la cantidad y el vencimiento.

Ya tenemos un contrato inteligente para el Coupon Bazaar que permite funciones de prueba. Agreguemos algunas funcionalidades para el proveedor:

En el código de RIDE para activos inteligentes, permitimos quemar y re-emitir cupones solo para el proveedor que es el emisor (issuer) del activo digital.

Los clientes pueden comprar cupones, vender cupones en el DEX, transferir cupones a sus amigos y familiares dentro de un período de vencimiento.

P.S.: Mira el truco en el IDE. Puedes usar la funcion file(…) para guardar en formato de texto el código fuente RIDE.

Vamos a crear su propio “cupón” representado por un activo inteligente ! Encuentre el script del activo en el explorador y coloque el código descompilado aquí:

En realidad, ahora tenemos todo para construir nuestro propio bazar de cupones Web3.0 de una forma totalmente funcional.

¡En el Módulo 6 vamos a combinar todo junto!

--

--

Kolin Platform
Dominando Web3.0 con Waves

Kolin is an acronym of "Konscienco Lingvo" which in Esperanto means "Conscious Language". https://kolinplatform.com