Wiki de ZooBC
Datos y almacenamiento

Archivos en la cadena (DFS)

ZooBC tiene dos formas de guardar un archivo. Un archivo DFS es para contenido pequeño: el archivo viaja dentro de su propia transacción, y la cadena lo registra como una fila de dataset de su propietario. Los archivos más grandes van al almacenamiento descentralizado, cortados en fragmentos que nunca tocan la cadena. Este artículo trata de los archivos DFS.

El registro y el contenido

Un archivo DFS de un propietario en una ruta es la fila de dataset (owner, owner, "dfs:" + path): el autor y el destinatario son ambos el propietario, y la propiedad es dfs: seguido de la ruta. El valor de la fila es la forma hexadecimal de un registro de metadatos:

  • el hash SHA3-256 del contenido, y su tamaño;
  • los permisos (0644);
  • dos marcas de tiempo;
  • el número de trozos y el hash de cada trozo.

El contenido en sí viaja dentro del cuerpo de la transacción. Un cuerpo puede tener como máximo 65 536 bytes, así que un archivo DFS contiene hasta unos 64 KiB. Los nodos guardan los bytes en una tabla local de trozos junto a la cadena; no forman parte del estado de consenso. La fila en la cadena contiene los hashes, así que cualquiera puede comprobar el contenido con ella.

Rutas

Una ruta empieza por / y tiene como máximo 1024 bytes. No puede contener //, .., un byte NUL, un retorno de carro ni un salto de línea. Una / final se descarta, así que /a/b/ y /a/b nombran el mismo archivo. Solo las transacciones DFS pueden escribir filas bajo dfs: o dfs:dir:; un SetupAccountDataset con cualquiera de los dos prefijos se rechaza.

Crear, actualizar, borrar

TransacciónTipoQué hace
DFSCreateFile8crea el archivo en una ruta, con su contenido
DFSUpdateFile264sustituye el contenido en la misma ruta
DFSDeleteFile520elimina el archivo

Crear sobre un archivo existente, y actualizar o borrar un archivo que no existe, son operaciones nulas pagadas: se cobra la comisión y no cambia nada. Por tanto, una app debería leer la fila de la ruta antes de elegir entre crear y actualizar.

Alquiler y reembolsos

Una fila DFS es un objeto de dataset como cualquier otro. Tiene su propia dirección de depósito (ZBS_…), que cualquiera puede financiar, y paga alquiler de dataset en cada periodo por sus bytes, la propiedad más el valor hexadecimal: al precio inicial, 0.05 ZBC por MiB y periodo en mainnet. El alquiler se toma del depósito y después del propietario, y se abona al fondo de longevidad. Si ninguno de los dos puede pagar, la fila se desactiva, como en cualquier dataset.

Borrar un archivo DFS devuelve a cada pagador, propietario incluido, su propia parte no usada del depósito. El dinero se consume por orden de llegada: el pago más antiguo se agota antes de tocar el siguiente, así que los pagadores más recientes son los que más recuperan.

¿Archivo DFS o archivo almacenado?

Archivo DFSArchivo almacenado
Tamañohasta unos 64 KiBhasta 100 000 fragmentos de 1 MiB
Contenidodentro de la transacciónfragmentos en cinco nodos poseedores, nunca en la cadena
En la cadenauna fila bajo dfs:el manifiesto: la raíz, los tamaños y los ids de los fragmentos
Cambiosactualizar y borrar en la misma rutaun contenido nuevo tiene una raíz nueva, así que es un archivo nuevo
El alquiler va ael fondo de longevidadel fondo de almacenamiento
Control de accesoninguno: el contenido está en una transacción públicaun indicador de privado con una lista de permitidos

Ninguna de las dos formas depende de las máquinas de la ZooBC Foundation ni del ordenador de quien sube el archivo.

Dos formas de guardar un archivo: un archivo DFS dentro de su transacción, o un archivo almacenado cortado en fragmentos que guardan cinco nodos.
Dos formas de guardar un archivo: un archivo DFS dentro de su transacción, o un archivo almacenado cortado en fragmentos que guardan cinco nodos.

Véase también