以下是RPC客戶端調用getBalance的時序圖:
主要流程:
1:通過區塊高度從HeaderChain中獲得header,header的數據以RLP格式保存在DatabaseReader這個接口中(實現類是。。)
2:通過header.root從Database這個接口(實現類是。。)中獲得trie,從而構造出stateDB
問題:獲得trie後,再通過address,可直接獲得此地址的account,然後便可直接獲得balance,就不需要下面這麼多步了,不知後續額外流程的用意何在...
3:通過address從stateDB中獲得stateObject,而stateobject由stateDB,address和account三個對象組成,前兩個已知,最後一個account是根據address從trie中獲得的,而trie就是第2步中構造stateDB時傳進去的(這也是上面問題所在)
4:從stateObject中的account中獲得這個address的balance。
關鍵信息解讀:
1:HeaderChain中所有header的信息保存在接口DatabaseReader的實現類中
2:trie的信息保存在DataBase接口中,通過header中的root值便可獲得對應的trie
3:trie中保存了每個賬戶的信息,通過address便可獲得trie中對應的賬戶
4:通過此調用流程,還未看出stateDB和stateObject的具體用途,留待後續分析