diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f25db4360c5b6dd7537da7192fd0ad7db77870d0 --- /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.