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.