GoQuarkChain undo 操作实现
-
实现可以undo的object–实现journalEntity接口
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state\journal.go
-
在调用这些object的时候,会将操作对应的addr和操作前的状态放入db.journal中
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state\state_object.go
-
Undo之前先调用Snapshot,之后需要的话再调用RevertToSnapshot
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\vm\evm.go
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state_processor.go
-
调用Snapshot时记录revisionid 和 journal的高度
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state\statedb.go
-
调用RevertToSnapshot时通过revid找到最小的revision(=revid),再通过revision找到journalIndex(对应的操作高度),之后用这个高度进行Undo
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state\statedb.go
-
然后将entries中的entry从高到低调用entry的revert操作,直到Snapshot(高度)
C:\GoWork\src\github.com\QuarkChain\goquarkchain\core\state\journal.go