Giter Site home page Giter Site logo

blockbird's Introduction

Documentación del Contrato Inteligente BlockBird

Introducción

Proyecto hecho para la tarea de TokioSchool. Tema de Ethereum.

El ejercicio consiste en la generación de un Smart Contract para una aplicación de mensajería pública.
Por lo tanto, deberás implementar una aplicación descentralizada haciendo uso de los conocimientos adquiridos en el módulo, para el envío y lectura de mensajes públicos (una red social parecida a Twitter).

La aplicación deberá tener al menos estas dos funciones:
- Una función para escribir un mensaje de una longitud máxima de 300 caracteres.
- Una función para leer todos los mensajes escritos hasta el momento.

Opcionalmente:
- Añadir un mecanismo para conseguir recuperar solo aquellos mensajes que no se hayan leído hasta el momento.
- Añadir un mecanismo para identificar a la persona (con su seudónimo) que ha escrito el mensaje.

El contrato se ha desarrollado usando la versión 0.8.9 de Solidity y está orientado a plataformas donde la comunicación anónima con responsabilidad es esencial.

Estructura del Contrato

Estructura del mensaje.

  • Struct Message: Representa un mensaje en la plataforma.   - text: El contenido del mensaje.   - sender: La dirección del remitente. Sería la dirección pública.   - read: Booleano que indica si el mensaje ha sido leído.

   Este objeto (o struct) es necesario para almacenar de una manera cómoda y fácil lo que es un "mensaje". Entre los datos elegidos a almacenar, estos tres: text, pseudonym, read, son los más relevantes para el enunciado de la tarea.

Variables

  • Array messages: Almacena todos los mensajes del contrato en una única variable. De este modo se puede filtrar que mensaje fue leído, escrito, etc...

Eventos

  • Evento NewMessage: Emitido cuando se crea un nuevo mensaje, capturando el "address" del emitente y el contenido del mensaje.

Funciones del Contrato

writeMessage

  • Propósito: Permite a los usuarios escribir un nuevo mensaje.
  • Lógica: Valida la longitud del mensaje y la existencia del pseudónimo del remitente. Añade el nuevo mensaje al array messages.

readAllMessages

  • Propósito: Proporciona una función de visualización para leer todos los mensajes.
  • Lógica: Devuelve el array completo de messages.

readUnreadMessages

  • Propósito: Recupera todos los mensajes no leídos y los marca como leídos.
  • Lógica: Cuenta los mensajes no leídos, los marca como leídos y los devuelve en un nuevo array.

Decisiones de diseño

Lógica de Lectura de Mensajes

  • Eficiencia: La función readUnreadMessages está diseñada para minimizar las iteraciones de bucles. Se aprovecha que los datos se cuardan de modo secuencial (Un mensaje tras otro). Gracias a que se almacenan secuencialmente, los mensajes escritos, siempre aparecerán en un todo al inicio del array de mensajes.
  • Marcar como Leído: Marca automáticamente los mensajes como leídos tras detección de lo contrario para, así, copiar comportamiento típico de las plataformas de mensajes.

Medidas de seguridad

  • Restricción de Longitud del Mensaje: Previene el uso excesivo de gas y espacio de almacenamiento mediante la revisión de caracteres en el mensaje a la hora de escribirlo.

Diagrama

Usuario -> writeMessage -> array de mensajes
       -> readAllMessages
       -> readUnreadMessages

Eventos:
  NewMessage -> Activado en la creación de un nuevo mensaje.

blockbird's People

Contributors

pejarru avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.