BYTECODES

IPFS的MFS和UnixFS

由于IPFS的内容寻址和数据切分的原因,在IPFS中使用文件需要理解以下几个重要概念。

内容寻址

IPFS是基于内容寻址,文件上传后生成CID,这样就可以通过CID来找到这个文件,如果文件内容变了,那CID也会发生变化。

MFS

MFS全称是Mutable File System,他提供了一层抽象,让用户可以像操作传统文件系统那样去操作不可变内容。比如你可以添加、删除、移动、编辑文件。


MFS可以通过IPFS的CLI或者API接口来使用,可以参考这个链接https://proto.school/mutable-file-system

UnixFS

当添加一个比较大的文件到IPFS里面时候,文件会被切成块,这时就需要使用metadata来描述这个块信息。UnixFS是基于protocal-buffer格式的,用来描述文件、目录以及符号连接等信息。它有三个重要部分:

  • 数据格式Data Format

  • Importer: 生成DAG

  • Exporter:导出DAG

如下是一个数据格式例子(UnixFS-v1)

message Data {
    enum DataType {
        Raw = 0;
        Directory = 1;
        File = 2;
        Metadata = 3;
        Symlink = 4;
        HAMTShard = 5;
    }

    required DataType Type = 1;
    optional bytes Data = 2;
    optional uint64 filesize = 3;
    repeated uint64 blocksizes = 4;
    optional uint64 hashType = 5;
    optional uint64 fanout = 6;
    optional uint32 mode = 7;
    optional UnixTime mtime = 8;
}

message Metadata {
    optional string MimeType = 1;
}

message UnixTime {
    required int64 Seconds = 1;
    optional fixed32 FractionalNanoseconds = 2;
}