一起来读源码230-Ipfs 第三方库:go-cid

    技术2022-07-11  92

    摘要:

    一个自描述地址项目

    详情:

    go-cid

    定义全局变量:

    编码器类型:

        "v0":                                  DagProtobuf, //0x70     "raw":                                Raw, //     "protobuf":                         DagProtobuf,     "cbor":                               DagCBOR,     "libp2p-key":                      Libp2pKey,     "git-raw":                            GitRaw,     "eth-block":                        EthBlock, //以太坊块     "eth-block-list":                   EthBlockList,     "eth-tx-trie":                        EthTxTrie,     "eth-tx":                               EthTx, //0x93 以太坊传输块     "eth-tx-receipt-trie":             EthTxReceiptTrie,     "eth-tx-receipt":                   EthTxReceipt,     "eth-state-trie":                    EthStateTrie,     "eth-account-snapshot":     EthAccountSnapshot,     "eth-storage-trie":                EthStorageTrie,     "bitcoin-block":                    BitcoinBlock,     "bitcoin-tx":                          BitcoinTx,     "zcash-block":                      ZcashBlock,     "zcash-tx":                           ZcashTx,     "decred-block":                    DecredBlock,     "decred-tx":                          DecredTx,     "dash-block":                        DashBlock,     "dash-tx":                             DashTx,     "fil-commitment-unsealed":  FilCommitmentUnsealed,     "fil-commitment-sealed":      FilCommitmentSealed,

     

    定义全局函数:

    func Fuzz(data []byte) int //测试cid的相关转换函数是否有效

    func NewCidV0(mhash mh.Multihash) Cid // 新建一个cid包裹的multihash(推荐优先使用NewCidV1)

    func NewCidV1(codecType uint64, mhash mh.Multihash) Cid // 新建一个cid包裹的multihash

    func Parse(v interface{}) (Cid, error) //将对象解析成cid

    func Decode(v string) (Cid, error)//str解码成Cid

    func ExtractEncoding(v string) (mbase.Encoding, error) // 提取编码器

    func Cast(data []byte) (Cid, error) // byte数组转cid (数据格式:版本 编码器类型 multihash)

    func PrefixFromBytes(buf []byte) (Prefix, error) // 二进制数组转前缀

    func CidFromBytes(data []byte) (int, Cid, error) // 二进制数组转cid

    func NewPrefixV0(mhType uint64) Prefix //new一个v0版本的前缀

    func NewPrefixV1(codecType uint64, mhType uint64) Prefix //new一个v1版本的前缀

     

    定义接口:

    type Builder interface { //构造器

        Sum(data []byte)(Cid, error)

        GetCodec() uint64

        WithCodec(uint64) Builder

    }

     

    定义类:

    //v0版本构建器

    type V0Builder struct{}

    func(p V0Builder) Sum(data []byte)(Cid, error)

    func (p V0Builder) GetCodec() uint64

    func (p V0Builder) WithCodec(c uint64) Builder

    //v1版本构建器

    type V1Builder struct{

        Codec uint64

        MhType uint64

        MhLength int

    }

    func (p V1Builder) Sum(data []byte) (Cid, error)

    func (p V1Builder) GetCodec() uint64

    func (p V1Builder) WithCodec(c uint64) Builder

    // 前缀 type Prefix struct {     Version  uint64 //版本     Codec    uint64 //编解码器     MhType   uint64 //multihash版本     MhLength int    //multihash长 }

    func (p Prefix) Sum(data []byte) (Cid, error) // 与二进制数组求和并返回一个cid

    func (p Prefix) Bytes() []byte // 返回前缀的二进制数组

    func(p Prefix) GetCodec() uint64

    func(p Prefix) WithCodec(c uint64) Builder

    //自描述地址

    type Cid struct{

        str string

    }

    func (c Cid) Defined() bool //是否已被定义

    func (c *Cid) UnmarshalBinary(data []byte) error // 解析二进制数组

    func (c *Cid) UnmarshalText(text []byte) error // 解析文本

    func (c Cid) Version() uint64// 返回cid版本 0或1

    func (c Cid) Type() uint64 // 返回cid类型

    func (c Cid) String() string // 返回 版本0:b58str 版本1:b32str

    func (c Cid) StringOfBase(base mbase.Encoding) (string, error) // 返回str的进制

    func (c Cid) Encode(base mbase.Encoder) string // cid编码成str

    func (c Cid) Hash() mh.Multihash // 返回cid的hash

    func (c Cid) Bytes() []byte // 返回cid的二进制数据

    func (c Cid) ByteLen() int // 返回cid的二进制数据长度

    func (c Cid) WriteBytes(w io.Writer) (int, error)  // 写入二进制数据

    func (c Cid) MarshalBinary() ([]byte, error) // 格式化二进制

    func (c Cid) MarshalText() ([]byte, error)  // 格式化文本

    func (c Cid) Equals(o Cid) bool // 判断2个cid是否相等

    func (c *Cid) UnmarshalJSON(b []byte) error  // 反格式化json转为cid

    func (c Cid) MarshalJSON() ([]byte, error) // 格式化json

    func (c Cid) KeyString() string // 返回string类型的cid内容

    func (c Cid) Loggable() map[string]interface{}  // 导出map["cid"]cid 这种格式

    func (c Cid) Prefix() Prefix // 返回前缀

    Processed: 0.015, SQL: 9