ä»åã¯ãgo-ethereumã®v1.10ãã追å ãããã³ãã³ãã§ããã`go-ethereum snapshot prune-state`ã試ãã¦ã¿ãã®ã§ãã®çµæãå
±æããè¨äºã¨ãªãã
ãã®ã³ãã³ãã¯ãgo-ethereumã®full nodeãç¶æããã¨æºã¾ã£ã¦ãã£ã¦ãã¾ãstate trieã®ã´ããã¼ã¿ãåé¤ï¼æåãï¼ããããã®ã³ãã³ãã§ãããã¤ã¾ããè¨ãæããã¨go-ethereumã§è¥å¤§åãã¦ããã¹ãã¬ã¼ã¸ã®å®¹éãåæ¸ãããã¨ãã§ããã
ãã詳細ãªæ
å ±ã«ã¤ãã¦ã¯å
¬å¼ããã°ãåç
§ã
blog.ethereum.org
- state trieã®ã´ããã¼ã¿
- ä»ã¾ã§pruningãå®è£ ãããªãã£ãçç±
- v1.10ããpruningãå®è£ ãããçç±
- å®éã«è©¦ãã¦ã¿ã
state trieã®ã´ããã¼ã¿
Ethereumã§ã¯Accountã®stateæ
å ±ãMerkle Patricia Trieã¨ãããã¼ã¿æ§é ã§ä¿æãã¦ããããã®ãã¼ã¿ãLevelDBã«ä¿åãã¦ããã
Merkle Patricia Trieã¯16åæ¨ã§ããããã®ããªã¼ã¯Accountã®addressããã¨ã«æ§æããã¦ãããã¾ããåbranch nodeã¯addressãå
ã«ããªã¼æ§é ã¨ãªã£ã¦ããã16åã®(ã¤ã¾ã0ãFã¾ã§ã®)次ã®nodeã¸ã®ãã¼(=hashå¤)ãä¿æãã¦ãããbranch nodeãAccountã®addressã«å¾ã£ã¦è¾¿ã£ã¦ããã¨ãæçµçã«stateæ
å ±ãä¿åããleaf nodeã«å°éããã
ãã®ãããAccountã®stateæ
å ±ãå¤æ´ãããã¨ãleaf nodeã®ãã¼(=hashå¤)ãå¤åãããã®å½±é¿ã§rootããleafã«è³ãã¾ã§ã®çµè·¯ä¸ã®branch nodeã®ä¿æããå¤ãå
¨ã¦å¤åããã
ãã®æãgo-ethereumã§ã¯å¤åããbranch, leaf nodeã«å¯¾ãã¦ã以åã®æ
å ±ãåé¤ããã«ä¿æãç¶ãã¦ããããããããããstate trieã®ã´ããã¼ã¿ã§ããã
Merkle Patricia Trieã®è©³ç´°ã«ã¤ãã¦ã¯ä»¥ä¸ã®åç»ãåèã«ãã¦æ¬²ããã
goblockchain.network
ä»ã¾ã§pruningãå®è£ ãããªãã£ãçç±
ããã¯æ¨å¯ã«ãªããã以ä¸ã®çç±ã§go-ethereumã§ã¯v1.10ã¾ã§pruningãå®è£ ãããªãã£ãã¨æãããã
- å¤ãstateæ å ±ãreorgãèæ ®ãã¦æ®ãã¦ããå¿ è¦ãããã
- fast syncãç´ããã¨ã§ãpruningã®ä»£ããã«ãªã£ã¦ããããã
ç¹ã«1. ã®çç±ã大ããã¨æããããreorgãèæ
®ããã¨å°ãå¤ãstateæ
å ±ãããã«æ¶ããã¨ã¯ã§ããªããã¾ããååã«å¤ããªã£ãæã«æ¶ãããã«ããã®ã§ããã°ãstateæ
å ±ã«blockçªå·ãä»ä¸ãã¦ç®¡çããå¿
è¦ãåºã¦ãããããçµæçã«ããå¤ãã®storageãæ¶è²»ãã¦ãã¾ãå¯è½æ§ãããã
v1.10ããpruningãå®è£ ãããçç±
v1.10ã§ã¯æ°ãã«snap syncã¨ããé«éåæã®ä»çµã¿ãå°å
¥ããããã¾ããsnap syncã®ããã«stateã®snapshotãæ°ãã«ä¿æããããã«ãªã£ãã
snap syncã«ã¤ãã¦ã¯ä»¥ä¸ã®ããã°ãåç
§ã
techmedia-think.hatenablog.com
ãã®snapshotã¯state trieã®leafæ
å ±ã®ã¿ãéãããã®ã§ããããã®snapshotããstateã®Merkle Patricia Trieãåæ§ç¯å¯è½ãªãã®ã¨ãªã£ã¦ããã
ã¤ã¾ãã¯ãsnap syncã®å®è£
ã«ä¼´ããä¸è¦ãªãã¼ã¿ãåé¤ããMerkle Patrica Trieãåæ§ç¯å¯è½ã¨ãªã£ããããpruningã®æ©è½ã追å ãããã¨æãããã
åè¿°ããéããfast syncãsnap syncãããç´ããã¨ã§pruningã®ä»£ããã«ã¯ãªããããããã®åæãã©ã®ç¨åº¦ã®æéã§å®äºãããã¯ãæ¥ç¶ããremote peerã«ä¾åãã¦ãã¾ãã
ãã®ããããã¼ã«ã«ã«ããæ
å ±ããåæ§ç¯ã§ããã®ã§ããã°ããã«è¶ãããã¨ã¯ãªãã¨ãããã¨ã ããã
å®éã«è©¦ãã¦ã¿ã
ãã¦ãåç½®ããé·ããªã£ããããããã`geth snapshot prune-state`ã試ããçµæãæ²è¼ããã
ç°å¢
AWS EC2 t3.xlarge + EBS gp2 æ±ç¨SSD 1.5 TB(ext4)
mainnetãfull syncã§ãããã12,760,000ãããã¯ç¨åº¦ã¾ã§åæå®äºãã¦ããç¶æ ã
å®è¡åæ å ±
geth db inspectã³ãã³ãã®çµæ
+-----------------+--------------------+------------+------------+ | DATABASE | CATEGORY | SIZE | ITEMS | +-----------------+--------------------+------------+------------+ | Key-Value store | Headers | 49.44 MiB | 90002 | | Key-Value store | Bodies | 4.51 GiB | 90002 | | Key-Value store | Receipt lists | 4.87 GiB | 90002 | | Key-Value store | Difficulties | 15.17 MiB | 139283 | | Key-Value store | Block number->hash | 14.19 MiB | 139447 | | Key-Value store | Block hash->number | 499.46 MiB | 12773681 | | Key-Value store | Transaction index | 14.75 GiB | 439866107 | | Key-Value store | Bloombit index | 2.16 GiB | 6388783 | | Key-Value store | Contract codes | 2.18 GiB | 437158 | | Key-Value store | Trie nodes | 677.64 GiB | 3230441862 | | Key-Value store | Trie preimages | 547.13 KiB | 8893 | | Key-Value store | Account snapshot | 6.42 GiB | 140457506 | | Key-Value store | Storage snapshot | 33.36 GiB | 466248131 | | Key-Value store | Clique snapshots | 0.00 B | 0 | | Key-Value store | Singleton metadata | 6.30 MiB | 9 | | Key-Value store | Shutdown metadata | 24.00 B | 1 | | Ancient store | Headers | 5.52 GiB | 12683680 | | Ancient store | Bodies | 146.73 GiB | 12683680 | | Ancient store | Receipt lists | 72.77 GiB | 12683680 | | Ancient store | Difficulties | 198.64 MiB | 12683680 | | Ancient store | Block number->hash | 459.65 MiB | 12683680 | | Light client | CHT trie nodes | 0.00 B | 0 | | Light client | Bloom trie nodes | 0.00 B | 0 | +-----------------+--------------------+------------+------------+ | TOTAL | 972.13 GIB | | +-----------------+--------------------+------------+------------+
duã³ãã³ãã®çµæ
16 /data/lost+found 6208 /data/ethereum/geth_full/geth/nodes 236626328 /data/ethereum/geth_full/geth/chaindata/ancient 1104669620 /data/ethereum/geth_full/geth/chaindata 212368 /data/ethereum/geth_full/geth/ethash 1106321404 /data/ethereum/geth_full/geth 4 /data/ethereum/geth_full/keystore 1106321416 /data/ethereum/geth_full 1107305528 /data/ethereum 1107305548 /data
å®è¡å¾æ å ±
geth db inspectã³ãã³ãã®çµæ
+-----------------+--------------------+------------+-----------+ | DATABASE | CATEGORY | SIZE | ITEMS | +-----------------+--------------------+------------+-----------+ | Key-Value store | Headers | 49.44 MiB | 90002 | | Key-Value store | Bodies | 4.51 GiB | 90002 | | Key-Value store | Receipt lists | 4.87 GiB | 90002 | | Key-Value store | Difficulties | 5.83 MiB | 101712 | | Key-Value store | Block number->hash | 4.88 MiB | 101807 | | Key-Value store | Block hash->number | 499.46 MiB | 12773681 | | Key-Value store | Transaction index | 14.75 GiB | 439866107 | | Key-Value store | Bloombit index | 2.16 GiB | 6388783 | | Key-Value store | Contract codes | 2.15 GiB | 412436 | | Key-Value store | Trie nodes | 82.47 GiB | 774362254 | | Key-Value store | Trie preimages | 547.13 KiB | 8893 | | Key-Value store | Account snapshot | 6.42 GiB | 140457576 | | Key-Value store | Storage snapshot | 33.36 GiB | 466249712 | | Key-Value store | Clique snapshots | 0.00 B | 0 | | Key-Value store | Singleton metadata | 308.00 B | 9 | | Key-Value store | Shutdown metadata | 24.00 B | 1 | | Ancient store | Headers | 5.52 GiB | 12683680 | | Ancient store | Bodies | 146.73 GiB | 12683680 | | Ancient store | Receipt lists | 72.77 GiB | 12683680 | | Ancient store | Difficulties | 198.64 MiB | 12683680 | | Ancient store | Block number->hash | 459.65 MiB | 12683680 | | Light client | CHT trie nodes | 0.00 B | 0 | | Light client | Bloom trie nodes | 0.00 B | 0 | +-----------------+--------------------+------------+-----------+ | TOTAL | 376.90 GIB | | +-----------------+--------------------+------------+-----------+
duã³ãã³ãã®çµæ
16 /data/lost+found 6208 /data/ethereum/geth_full/geth/nodes 236626328 /data/ethereum/geth_full/geth/chaindata/ancient 387859604 /data/ethereum/geth_full/geth/chaindata 212368 /data/ethereum/geth_full/geth/ethash 388078188 /data/ethereum/geth_full/geth 4 /data/ethereum/geth_full/keystore 388078200 /data/ethereum/geth_full 389062312 /data/ethereum 389062332 /data
å®è¡æé
INFO [07-23|02:16:09.043] State pruning successful pruned=595.22GiB elapsed=7h50m56.799s