Comenzando con el protocolo Rouge – The Rouge Project

1. Obteniendo algunos tokens Rouge (RGE)

En el protocolo Rouge, debe depositar, como emisor, una "Tara" por cada nuevo cupón que desee crear. El precio de la tara es exactamente de 0,1 RGE por cupón en la implementación beta del protocolo (el informe técnico apunta a 1 RGE en el futuro). ¡Así que primero necesitamos conseguir algo de RGE!

Debido a que es una prueba, trabajaremos con la red de pruebas de Ropsten. Puede obtener fácilmente tokens RGE para esta red utilizando nuestro grifo. La dirección del contrato de los tokens ERC20 Rouge es 0x32C3f2Ca80677Ccb67AB393d4a2429f47c94A3f3.

2. Crear una campaña y emitir “Notas”.

MetaMask ya está instalado, y tan pronto como obtenga algunos tokens RGE de nuestro grifo, debe ir a la página "Crear y emitir cupones" de nuestra ÐApp. Eso es todo lo que necesita para poder crear una campaña y emitir notas (en este caso, cupones) enviando un formulario muy simple.

En el protocolo de Rouge, una campaña es un conjunto de "Notas" con exactamente las mismas características (por lo que son fungibles) emitidas al mismo tiempo por un único "Emisor". En nuestro caso, podría ser, por ejemplo, una tienda en Internet que crea una campaña de cupones para dar un 40% de descuento en todas sus "camisetas Nyan Cat Tee". El parámetro de emisión en el formulario, es simplemente el número de cupones a emitir.

¡Así que decidamos crear una campaña con 5 cupones! El depósito debe ser de al menos 0.5 RGE (0.1 RGE tara * 5 cupones). ¿Pero qué sucede debajo del capó, después de que enviamos el botón de formulario con estos parámetros?

Primero, su cuenta de Ethereum, como emisor, llamará a la función newCampaign (uint32 _issuance, uint256 _deposit) del contrato de RGE. Esta función de solo trabajo es transferir el depósito de tokens de 0.5 RGE y la información de emisión a otro contrato: el Fábrica de Rouge .

La fábrica (actualmente 0x80c4594d8b21134e4ae53b5a9e79e9fb20ffec41 en Ropsten) se cambia cada vez que se modifica la implementación del protocolo para que la Red Rouge pueda evolucionar y actualizarse fácilmente. The Rouge Factory se encarga de crear. una nueva instancia de contrato por campaña creada. Todas las acciones posteriores del protocolo después de la creación de la campaña, se manejan llamando directamente a esta nueva instancia de contrato de "Campaña".

En nuestro ejemplo, la fábrica ha creado un nuevo contrato de campaña "Camisetas de Nyan Cat" en la dirección 0x56c9383b1b2374fc50f1d27c2a7b97ef3c81fd53 (ver captura de pantalla más arriba). También puede verificar en Etherscan que el depósito de tokens de 0.5 RGE se transfirió a esta nueva instancia de contrato de campaña.

El segundo paso, cuando envía el formulario ÐApp, es emitir los cupones ellos mismos llamando al problema de la función (bytes4 _scheme, string _name, uint _campaignExpiration) de la instancia del contrato de campaña. Puede verificar en el explorador esta transacción de "emisión". El segundo parámetro _nombre es, por supuesto, el nombre de la campaña tal como se solicita en el Formulario de aplicación de la demostración de cupón. El tercer parámetro _campaignExpiration es una marca de tiempo correspondiente al final de nuestra campaña de cupones, después de la cual la adquisición o el canje de cupones ya no es posible. Finalmente, _scheme es un código de protocolo para diferenciar entre los muchos casos de uso de notas y vales (cupones, tickets, etc.) que puede ignorar de forma segura en esta etapa.

3. Adquirir notas

Una vez que una campaña de Rouge ha emitido sus "notas" (que representan cupones en nuestro ejemplo), pueden ser adquiridas inmediatamente por cualquier persona, excepto el propio emisor. Es por eso que el panel de ÐApp en la captura de pantalla a continuación, no incluye los cupones de Nyan Cat en la columna derecha de "cupones disponibles".

Así que continuemos con nuestra exploración del protocolo, adquiriendo el cupón N ° 4 "Salir de la tarjeta de la cárcel" de otra campaña creada por otro emisor.

Esta acción se realiza en el nivel de Ethereum mediante una llamada a la función de adquisición (bytes32 _hash, uint8 v, bytes32 r, bytes32 s) de la instancia de contrato de campaña. El primer argumento _hash es un sha3 hexadecimal de la cadena de mensaje 'acceptAcquisition' + campaign.address + bearer que comunica inequívocamente que el emisor de la campaña acepta esta adquisición de cupón. El hash es único para este evento ya que contiene La dirección de la instancia de la campaña y la dirección futura del "Portador". del cupón. Los siguientes 3 parámetros, uint8 v, bytes32 r, bytes32 s son simplemente la firma del emisor de este _hash para garantizar que solo el emisor pueda producir el mensaje de aceptación inequívoco. En la vida real, todos estos parámetros, que representan la intención de aceptación del emisor, podrían encajar en un código QR que un usuario podría escanear para adquirir un cupón.

Aquí están las capturas de pantalla correspondientes a la adquisición de este cupón con el paso intermedio durante el cual el comprador confirma la transacción con MetaMask.

El protocolo también implementa una segunda función que solo puede ser invocada por el emisor de una campaña, para distribuir directamente una nota a cualquier dirección: distribuirNota (dirección _trabajador). Esta función no se utiliza en la aplicación de demostración de cupones.

4. Canjeando una "Nota"

Este cuarto paso es muy simétrico al procedimiento de adquisición. El portador de un cupón debe llamar a la instancia de contrato de campaña con la función de canjear (bytes32 _hash, uint8 v, bytes32 r, bytes32 s). Los argumentos son equivalentes, excepto que la cadena de mensaje de aceptación inequívoca utilizada para la autorización es 'aceptarRedemption' + campaign.address + bearer. Una vez más, los datos que se pasan a esta función podrían ser solo un código QR para escanear con un teléfono, por ejemplo, en un punto de venta.

Finalmente, el emisor podría activar el canje utilizando la función acceptRedemption (bytes32 _hash, uint8 v, bytes32 r, bytes32 s) con la misma cadena de mensaje de autorización 'acceptRedemption' + campaign.address + bearerbut esta vez firmado por el portador.