我正在运行一个完整的geth节点,并对区块链大小感兴趣。
因此,我将所有块的大小之和与块链副本所消耗的实际磁盘大小进行了比较。
虽然chaindata文件夹的大小是136个GiB,但是所有块大小的总和都小于5 GiB。这种差异是从何而来的?
$ du -hs geth/chaindata/
136G geth/chaindata/在这里,我使用JSON接口并查询每个块(eth_getBlockByHash),从我所知道的最好的块(使用eth_getBlockByNumber API调用)返回。
从每个块中,我得到了size值(根据维基是以字节为单位)。但是,所有size属性的总和大约只有4.76 GiB。
我在这里错过了什么?
(我知道我可以按每个街区的编号来取,但这与问题无关。)
发布于 2017-04-29 09:02:00
您所看到的差异是由于状态数据,状态数据单独存储在块数据中。
块本身由一个头、包含事务的列表和一个ommers列表组成。这是块数据。这说明了你的~5GB值。
所有其他数据--例如帐户数据,如合同代码、余额、非the以及其他数据(如日志和收据)--都被视为状态数据,而不是保存在块本身中。(仍然由所有“完整”节点下载。)这说明了你所看到的剩余的130‘re。
有关此问题的更多详细信息,请参见以下内容:
下面的图片也可能是有用的,它来自于下面的前一个线程:
块本身显示在右边,标头包含从状态数据派生出来的值,这些值显示在中间的大方框中。

通过从以太扫描下载平均块大小的CSV,并在给定平均块时间的情况下推断出每天的块数,我得到了一个类似的5GB数字:https://etherscan.io/chart/blocksize
发布于 2017-05-01 05:00:33
你在Mac上吗?根据我的经验,Mac上的'du‘会报告比你用字节加起来的磁盘使用量要大得多。搜索谷歌。你终究会明白的。
https://ethereum.stackexchange.com/questions/15586
复制相似问题