From 1d3ea80567f1c55a73cc33cb96bfd8717e09591b Mon Sep 17 00:00:00 2001
From: "Mariano Absatz (git)" <scm@baby.com.ar>
Date: Thu, 4 Apr 2019 11:34:58 -0300
Subject: [PATCH] =?UTF-8?q?agrego=20un=20README.md=20para=20describir=20el?=
 =?UTF-8?q?=20Stamper.sol=20(despu=C3=A9s=20habr=C3=ADa=20que=20documentar?=
 =?UTF-8?q?=20el=20resto)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/README.md | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 src/README.md

diff --git a/src/README.md b/src/README.md
new file mode 100644
index 0000000..f25db43
--- /dev/null
+++ b/src/README.md
@@ -0,0 +1,36 @@
+# Stamper.sol 
+
+Smart contract simple que puede utilizarse para una _timestamp authority_ o para cualquier caso en el que quiera registrarse cosas del tipo: 
+
+* qué, quién, cuándo
+* qué, dónde, cuándo
+* quién, dónde, cuándo
+
+Notar que el _cuándo_ definido más arriba se refiere a cuándo fue insertado en la _blockchain_, lo cual lo único que verifica es que el hecho, la cosa o la acción se realizaron o existían **antes** de eso. Si una aplicación requiere de una marca de tiempo específica (_fine grained_), como ser un registro de control de ingreso/egreso laboral, esto debería codificarse en el registro "qué" o "quién" y mantenerse _off-chain_.
+
+El SC define una `struct stamp` que tiene:
+
+* un hash llamado `object` (que representa un objeto arbitrario, que puede ser un archivo o cualquier otra cosa)
+* una dirección llamada `stamper` (que identifica a la cuenta Ethereum -EOA- que invocó al SC para insertar este stamp)
+* el número de bloque `blockno` (que contiene el número de bloque en el que se invocó al Sc para insertar este stamp)
+
+El SC mantiene una lista de estas estructuras `stamplist` donde mantiene la información de todos los objetos _stampeados_.
+
+En la primera posición de la lista (0), se guarda la información de la cuenta que instanció el SC y en qué bloque lo hizo.
+
+Además mantiene dos arrays asociativos (_mappings_) que facilitan la búsqueda de stamps tanto por `object` (`hashobjects`) como por `stamper` (`hashstampers`).
+
+Las funciones para invocar al SC son:
+
+* `put ( [ lista de objects ] )` que recibe una lista de objects (puede ser uno solo) y genera un stamp para cada uno
+* `getStampListPos ( posición )` que recibe una posición de la lista de stamps y devuelve el object correspondiente a esa posición
+* `getObjectCount ( object )` que recibe un object y devuelve la cantidad de stamps que hay de ese object
+* `getObjectPos ( object , pos )` que recibe un object y una posición de la lista para ese object y devuelve la posición correspondiente al stamp específico en la lista de stamps
+* `getStamperCount ( stamper )` que recibe un stamper y devuelve la cantidad de stamps que realizó ese stamper
+* `getStamperPos ( stamper , pos )` que recibe un stamper y una posición de la lista de ese stamper y devuelve la posición correspondiente al stamp específico en la lista de stamps
+
+Esto permite fácilmente ubicar todos los stamps que hay de un object o todos los objects que haya enviado un stamper.
+
+Un mismo object podría tener varios stamps (enviados por el mismo o diversos stampers).
+
+En todos los casos, para cada stamp es fácil saber cuándo fue insertado en la blockchain.
-- 
GitLab