ipfs 的块

CID的产生

Multihash的格式其实就是一个字符串,由三部分组成:Hash算法编码、HasH值的长度(字节数)、Hash值。

Multihash以字节(0x12)开头,这个开头将指示出是哪一个哈希算法。接着是长度为(0x20)的另一个字节。目前IPFS默认采用sha2-256哈希函数算法,哈希摘要的二进制长度为32个字节。再加上哈希值后,字符串的长度就很长很长。

这时候用到了Base58编码技术,使得字符串长度可以压缩,方便存储和传播。因为IPFS现在的Multihash值,都是以1220开头,按照Base58编码运算,算出的结果都是以“Qm”开头。

总结起来正是:原始数据封装 -> sha2-256函数计算 -> 封装成Multihash -> Base58编码转换 ->最终的哈希地址(即CID)。

上文为二进制,下文为字符串

上文以Qm开头的为base58btc编码的CIDv0,下文以b开头的则为使用base32编码,是大部分IPFS默认使用的标识符

 ipfs add指定块大小(-s --chunker)

# ipfs add -s=size-1
12
ipfs: Reading from /dev/stdin; send Ctrl-d to stop.
added QmTUK826T8DBSoWU2pgvyBEum4cbvD3Qf6Fvj8td4UAtPg QmTUK826T8DBSoWU2pgvyBEum4cbvD3Qf6Fvj8td4UAtPg
 2 B / 2 B [===================================================================================================================] 100.00%/
# ipfs ls QmTUK826T8DBSoWU2pgvyBEum4cbvD3Qf6Fvj8td4UAtPg
QmWYddCPs7uR9EvHNCZzpguVFVNfHc6aM3hPVzPdAEESMc 1    《------字符1
QmT9SanPHnSH5AsBqy2xZbstw4rAw5znFPkmjkvDCMdVuF 1    《------字符2
# ipfs add -s=size-1
123
ipfs: Reading from /dev/stdin; send Ctrl-d to stop.
added QmfEhKEffgDqNAL2XvaiVnL52iHD3shQiJEKETJbHBBYmM QmfEhKEffgDqNAL2XvaiVnL52iHD3shQiJEKETJbHBBYmM
 3 B / 3 B [===================================================================================================================] 100.00%/ # ipfs ls QmfEhKEffgDqNAL2XvaiVnL52iHD3shQiJEKETJbHBBYmM
QmWYddCPs7uR9EvHNCZzpguVFVNfHc6aM3hPVzPdAEESMc 1   《----字符1  cid与前面的相同
QmT9SanPHnSH5AsBqy2xZbstw4rAw5znFPkmjkvDCMdVuF 1    《----字符2 cid与前面的相同
QmY4ZaCGXPTqRmTVEGSC6PPMgniAhMD1wPBTH7PeU3qtAf 1    《----字符3

块的分级结构

$date;  icc add press/2G/1.json --replication-max 1 --replication-min 1 --local ; date
4G文件耗时3分钟
-------------------------------------
顶层
QmWNk2RP4JwrXw1u1yuACEmr67XWvHGsrzRGbS9nmwonVd
------------------------------------
第二层
$ipfs0 ls QmWNk2RP4JwrXw1u1yuACEmr67XWvHGsrzRGbS9nmwonVd 
QmP7yQ6M27n1a3Gn4M8dum2VGBd4NAt7QvLSLz8e26cHth 45613056  <<<<<
QmVx4jSAuApvnHSvqv23ueVwSntyw1d2FJ9kB4tHordkjx 45613056 
QmUtoRaCBL7sknV7RJYPiKBapRs4trT2qpmKihraKJb8FC 45613056 
QmRLVkoTZUFCgmCbQ8PdRtsfc83x1uJw4i3Ejbg8Mae4MQ 45613056
...
Qmb7nuHAzHSsziMjbSwVAedrBSXQHcPa39QzQJTmat4eDP 31664128 


$ipfs0 ls QmWNk2RP4JwrXw1u1yuACEmr67XWvHGsrzRGbS9nmwonVd | wc -l
88
------------------------------------
第三层
$ipfs0 ls QmP7yQ6M27n1a3Gn4M8dum2VGBd4NAt7QvLSLz8e26cHth 
QmRCZsYGha8a3edbgCmkecGaTs38jqTeqif4YGbVe1YFsb 262144 
QmZBXn5o72Paa3HGDM84u9wRZrrkBUkGrqtgWVinBVsbJ8 262144 
QmV78sg6VwbYfxyWFhYcbu9jsEowAMqPUWDMumsSShwqzn 262144 
...
QmdRFddS857VaEFzvwyzLaJirSUHMu8eVT41hPPJGRQ5Eo 262144 

$ipfs0 ls QmP7yQ6M27n1a3Gn4M8dum2VGBd4NAt7QvLSLz8e26cHth | wc -l
174



1个顶层块,88个二层块,262144个三层快
块数:88 * 174 = 15312
每个二层块收纳的自己数: 172 * 262144 = 45613056 
总字节数:88 * 174 * 262144 = 4,013,948,928 bytes

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值