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