From 3a1a4e2f0d19c354ebd46c8b1fc69d8169ff97bd Mon Sep 17 00:00:00 2001 From: corey Date: Thu, 22 Jan 2026 16:04:25 +0800 Subject: [PATCH 1/3] add progress bar --- cmd/migration-checker/main.go | 97 +++++++++++++++++++++++++++++------ go.mod | 8 +-- go.sum | 18 +++++-- 3 files changed, 100 insertions(+), 23 deletions(-) diff --git a/cmd/migration-checker/main.go b/cmd/migration-checker/main.go index 34b4cc436..a3641a201 100644 --- a/cmd/migration-checker/main.go +++ b/cmd/migration-checker/main.go @@ -9,6 +9,7 @@ import ( "runtime" "sync" "sync/atomic" + "time" "github.com/morph-l2/go-ethereum/common" "github.com/morph-l2/go-ethereum/core/types" @@ -16,11 +17,19 @@ import ( "github.com/morph-l2/go-ethereum/ethdb/leveldb" "github.com/morph-l2/go-ethereum/rlp" "github.com/morph-l2/go-ethereum/trie" + "github.com/schollz/progressbar/v3" ) var accountsDone atomic.Uint64 +var storageDone atomic.Uint64 var trieCheckers = make(chan struct{}, runtime.GOMAXPROCS(0)*4) +// Progress bar instances +var accountBar *progressbar.ProgressBar +var storageBar *progressbar.ProgressBar +var totalAccounts int64 +var totalStorage int64 + type dbs struct { zkDb *leveldb.Database mptDb *leveldb.Database @@ -28,11 +37,13 @@ type dbs struct { func main() { var ( - mptDbPath = flag.String("mpt-db", "", "path to the MPT node DB") - zkDbPath = flag.String("zk-db", "", "path to the ZK node DB") - mptRoot = flag.String("mpt-root", "", "root hash of the MPT node") - zkRoot = flag.String("zk-root", "", "root hash of the ZK node") - paranoid = flag.Bool("paranoid", false, "verifies all node contents against their expected hash") + mptDbPath = flag.String("mpt-db", "", "path to the MPT node DB") + zkDbPath = flag.String("zk-db", "", "path to the ZK node DB") + mptRoot = flag.String("mpt-root", "", "root hash of the MPT node") + zkRoot = flag.String("zk-root", "", "root hash of the ZK node") + paranoid = flag.Bool("paranoid", false, "verifies all node contents against their expected hash") + estAccounts = flag.Int64("est-accounts", 500000, "estimated total accounts (for progress bar)") + estStorageSlots = flag.Int64("est-storage", 5000000, "estimated total storage slots (for progress bar)") ) flag.Parse() @@ -42,6 +53,46 @@ func main() { os.Exit(1) } + // Initialize progress bars + totalAccounts = *estAccounts + totalStorage = *estStorageSlots + + accountBar = progressbar.NewOptions64(totalAccounts, + progressbar.OptionSetDescription("📦 Accounts "), + progressbar.OptionSetWriter(os.Stderr), + progressbar.OptionShowCount(), + progressbar.OptionShowIts(), + progressbar.OptionSetWidth(40), + progressbar.OptionThrottle(100*time.Millisecond), + progressbar.OptionShowElapsedTimeOnFinish(), + progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), + progressbar.OptionSetTheme(progressbar.Theme{ + Saucer: "█", + SaucerHead: "█", + SaucerPadding: "░", + BarStart: "[", + BarEnd: "]", + }), + ) + + storageBar = progressbar.NewOptions64(totalStorage, + progressbar.OptionSetDescription("💾 Storage "), + progressbar.OptionSetWriter(os.Stderr), + progressbar.OptionShowCount(), + progressbar.OptionShowIts(), + progressbar.OptionSetWidth(40), + progressbar.OptionThrottle(100*time.Millisecond), + progressbar.OptionShowElapsedTimeOnFinish(), + progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), + progressbar.OptionSetTheme(progressbar.Theme{ + Saucer: "█", + SaucerHead: "█", + SaucerPadding: "░", + BarStart: "[", + BarEnd: "]", + }), + ) + zkDb, err := leveldb.New(*zkDbPath, 1024, 128, "", true) panicOnError(err, "", "failed to open zk db") mptDb, err := leveldb.New(*mptDbPath, 1024, 128, "", true) @@ -50,6 +101,12 @@ func main() { zkRootHash := common.HexToHash(*zkRoot) mptRootHash := common.HexToHash(*mptRoot) + fmt.Fprintln(os.Stderr, "🚀 Starting migration checker...") + fmt.Fprintf(os.Stderr, " Estimated accounts: %d, storage slots: %d\n", totalAccounts, totalStorage) + fmt.Fprintln(os.Stderr, "") + + startTime := time.Now() + for i := 0; i < runtime.GOMAXPROCS(0)*4; i++ { trieCheckers <- struct{}{} } @@ -62,6 +119,16 @@ func main() { for i := 0; i < runtime.GOMAXPROCS(0)*4; i++ { <-trieCheckers } + + // Final summary + accountBar.Finish() + storageBar.Finish() + elapsed := time.Since(startTime) + fmt.Fprintln(os.Stderr, "") + fmt.Fprintln(os.Stderr, "✅ Migration check completed!") + fmt.Fprintf(os.Stderr, " Total accounts checked: %d\n", accountsDone.Load()) + fmt.Fprintf(os.Stderr, " Total storage slots checked: %d\n", storageDone.Load()) + fmt.Fprintf(os.Stderr, " Time elapsed: %s\n", elapsed.Round(time.Second)) } func panicOnError(err error, label, msg string) { @@ -152,12 +219,12 @@ func checkAccountEquality(label string, dbs *dbs, zkAccountBytes, mptAccountByte checkTrieEquality(dbs, zkRoot, mptRoot, label, checkStorageEquality, false, paranoid) accountsDone.Add(1) - fmt.Println("Accounts done:", accountsDone.Load()) + accountBar.Add(1) trieCheckers <- struct{}{} }() } else { accountsDone.Add(1) - fmt.Println("Accounts done:", accountsDone.Load()) + accountBar.Add(1) } } @@ -169,6 +236,8 @@ func checkStorageEquality(label string, _ *dbs, zkStorageBytes, mptStorageBytes if !bytes.Equal(zkValue[:], mptValue[:]) { panic(fmt.Sprintf("%s storage mismatch: zk: %s, mpt: %s", label, zkValue.Hex(), mptValue.Hex())) } + storageDone.Add(1) + storageBar.Add(1) } func loadMPT(mptTrie *trie.SecureTrie, parallel bool) chan map[string][]byte { @@ -205,10 +274,6 @@ func loadMPT(mptTrie *trie.SecureTrie, parallel bool) chan map[string][]byte { if parallel { mptLeafMutex.Unlock() } - - if parallel && len(mptLeafMap)%10000 == 0 { - fmt.Println("MPT Accounts Loaded:", len(mptLeafMap)) - } } }() } @@ -216,6 +281,9 @@ func loadMPT(mptTrie *trie.SecureTrie, parallel bool) chan map[string][]byte { respChan := make(chan map[string][]byte) go func() { mptWg.Wait() + if parallel { + fmt.Fprintf(os.Stderr, "📂 MPT trie loaded: %d leaves\n", len(mptLeafMap)) + } respChan <- mptLeafMap }() return respChan @@ -241,11 +309,10 @@ func loadZkTrie(zkTrie *trie.ZkTrie, parallel, paranoid bool) chan map[string][] if parallel { zkLeafMutex.Unlock() } - - if parallel && len(zkLeafMap)%10000 == 0 { - fmt.Println("ZK Accounts Loaded:", len(zkLeafMap)) - } }, parallel, paranoid) + if parallel { + fmt.Fprintf(os.Stderr, "📂 ZK trie loaded: %d leaves\n", len(zkLeafMap)) + } zkDone <- zkLeafMap }() return zkDone diff --git a/go.mod b/go.mod index a8ec4dccc..b78d0aed2 100644 --- a/go.mod +++ b/go.mod @@ -45,13 +45,14 @@ require ( github.com/julienschmidt/httprouter v1.3.0 github.com/karalabe/usb v0.0.2 github.com/mattn/go-colorable v0.1.13 - github.com/mattn/go-isatty v0.0.17 + github.com/mattn/go-isatty v0.0.20 github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 github.com/olekukonko/tablewriter v0.0.5 github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 github.com/prometheus/tsdb v0.7.1 github.com/rjeczalik/notify v0.9.1 github.com/rs/cors v1.7.0 + github.com/schollz/progressbar/v3 v3.19.0 github.com/scroll-tech/zktrie v0.8.4 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible github.com/status-im/keycard-go v0.2.0 @@ -102,7 +103,8 @@ require ( github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/mitchellh/pointerstructure v1.2.0 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect @@ -110,7 +112,7 @@ require ( github.com/opentracing/opentracing-go v1.1.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect golang.org/x/mod v0.17.0 // indirect diff --git a/go.sum b/go.sum index bdd21eb98..431a3564f 100644 --- a/go.sum +++ b/go.sum @@ -98,6 +98,8 @@ github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= +github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -357,15 +359,17 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= @@ -423,8 +427,9 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -433,6 +438,8 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= +github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/scroll-tech/zktrie v0.8.4 h1:UagmnZ4Z3ITCk+aUq9NQZJNAwnWl4gSxsLb2Nl7IgRE= github.com/scroll-tech/zktrie v0.8.4/go.mod h1:XvNo7vAk8yxNyTjBDj5WIiFzYW4bx/gJ78+NK6Zn6Uk= github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= @@ -610,6 +617,7 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= From 2136255ec130c61913633e0f260bf34ae3c30005 Mon Sep 17 00:00:00 2001 From: corey Date: Thu, 22 Jan 2026 16:21:33 +0800 Subject: [PATCH 2/3] clean default value --- cmd/migration-checker/main.go | 87 ++++++++++++++++------------------- 1 file changed, 39 insertions(+), 48 deletions(-) diff --git a/cmd/migration-checker/main.go b/cmd/migration-checker/main.go index a3641a201..f48910abe 100644 --- a/cmd/migration-checker/main.go +++ b/cmd/migration-checker/main.go @@ -37,13 +37,11 @@ type dbs struct { func main() { var ( - mptDbPath = flag.String("mpt-db", "", "path to the MPT node DB") - zkDbPath = flag.String("zk-db", "", "path to the ZK node DB") - mptRoot = flag.String("mpt-root", "", "root hash of the MPT node") - zkRoot = flag.String("zk-root", "", "root hash of the ZK node") - paranoid = flag.Bool("paranoid", false, "verifies all node contents against their expected hash") - estAccounts = flag.Int64("est-accounts", 500000, "estimated total accounts (for progress bar)") - estStorageSlots = flag.Int64("est-storage", 5000000, "estimated total storage slots (for progress bar)") + mptDbPath = flag.String("mpt-db", "", "path to the MPT node DB") + zkDbPath = flag.String("zk-db", "", "path to the ZK node DB") + mptRoot = flag.String("mpt-root", "", "root hash of the MPT node") + zkRoot = flag.String("zk-root", "", "root hash of the ZK node") + paranoid = flag.Bool("paranoid", false, "verifies all node contents against their expected hash") ) flag.Parse() @@ -53,46 +51,6 @@ func main() { os.Exit(1) } - // Initialize progress bars - totalAccounts = *estAccounts - totalStorage = *estStorageSlots - - accountBar = progressbar.NewOptions64(totalAccounts, - progressbar.OptionSetDescription("📦 Accounts "), - progressbar.OptionSetWriter(os.Stderr), - progressbar.OptionShowCount(), - progressbar.OptionShowIts(), - progressbar.OptionSetWidth(40), - progressbar.OptionThrottle(100*time.Millisecond), - progressbar.OptionShowElapsedTimeOnFinish(), - progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), - progressbar.OptionSetTheme(progressbar.Theme{ - Saucer: "█", - SaucerHead: "█", - SaucerPadding: "░", - BarStart: "[", - BarEnd: "]", - }), - ) - - storageBar = progressbar.NewOptions64(totalStorage, - progressbar.OptionSetDescription("💾 Storage "), - progressbar.OptionSetWriter(os.Stderr), - progressbar.OptionShowCount(), - progressbar.OptionShowIts(), - progressbar.OptionSetWidth(40), - progressbar.OptionThrottle(100*time.Millisecond), - progressbar.OptionShowElapsedTimeOnFinish(), - progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), - progressbar.OptionSetTheme(progressbar.Theme{ - Saucer: "█", - SaucerHead: "█", - SaucerPadding: "░", - BarStart: "[", - BarEnd: "]", - }), - ) - zkDb, err := leveldb.New(*zkDbPath, 1024, 128, "", true) panicOnError(err, "", "failed to open zk db") mptDb, err := leveldb.New(*mptDbPath, 1024, 128, "", true) @@ -102,7 +60,6 @@ func main() { mptRootHash := common.HexToHash(*mptRoot) fmt.Fprintln(os.Stderr, "🚀 Starting migration checker...") - fmt.Fprintf(os.Stderr, " Estimated accounts: %d, storage slots: %d\n", totalAccounts, totalStorage) fmt.Fprintln(os.Stderr, "") startTime := time.Now() @@ -156,6 +113,40 @@ func checkTrieEquality(dbs *dbs, zkRoot, mptRoot common.Hash, label string, leaf panic(fmt.Sprintf("%s MPT and ZK trie leaf count mismatch: MPT: %d, ZK: %d", label, len(mptLeafMap), len(zkLeafMap))) } + // Initialize progress bars with actual counts (only for top-level/account trie) + if top { + totalAccounts = int64(len(zkLeafMap)) + accountBar = progressbar.NewOptions64(totalAccounts, + progressbar.OptionSetDescription("📦 Accounts "), + progressbar.OptionSetWriter(os.Stderr), + progressbar.OptionShowCount(), + progressbar.OptionShowIts(), + progressbar.OptionSetWidth(40), + progressbar.OptionThrottle(100*time.Millisecond), + progressbar.OptionShowElapsedTimeOnFinish(), + progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), + progressbar.OptionSetTheme(progressbar.Theme{ + Saucer: "█", + SaucerHead: "█", + SaucerPadding: "░", + BarStart: "[", + BarEnd: "]", + }), + ) + // Storage bar uses -1 for unknown total (will show count only) + storageBar = progressbar.NewOptions64(-1, + progressbar.OptionSetDescription("💾 Storage "), + progressbar.OptionSetWriter(os.Stderr), + progressbar.OptionShowCount(), + progressbar.OptionShowIts(), + progressbar.OptionSetWidth(40), + progressbar.OptionThrottle(100*time.Millisecond), + progressbar.OptionSpinnerType(14), + progressbar.OptionShowElapsedTimeOnFinish(), + progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), + ) + } + for preimageKey, zkValue := range zkLeafMap { if top { // ZkTrie pads preimages with 0s to make them 32 bytes. From 1e84efdee11988f65160f1804de681be1e9a69d4 Mon Sep 17 00:00:00 2001 From: corey Date: Thu, 22 Jan 2026 17:30:12 +0800 Subject: [PATCH 3/3] fix --- cmd/migration-checker/main.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/migration-checker/main.go b/cmd/migration-checker/main.go index f48910abe..efd131f23 100644 --- a/cmd/migration-checker/main.go +++ b/cmd/migration-checker/main.go @@ -79,6 +79,8 @@ func main() { // Final summary accountBar.Finish() + // Update storage bar total to actual count so it shows 100% + storageBar.ChangeMax64(int64(storageDone.Load())) storageBar.Finish() elapsed := time.Since(startTime) fmt.Fprintln(os.Stderr, "") @@ -133,7 +135,7 @@ func checkTrieEquality(dbs *dbs, zkRoot, mptRoot common.Hash, label string, leaf BarEnd: "]", }), ) - // Storage bar uses -1 for unknown total (will show count only) + // Storage bar - start with -1 (unknown), will update to actual count at end storageBar = progressbar.NewOptions64(-1, progressbar.OptionSetDescription("💾 Storage "), progressbar.OptionSetWriter(os.Stderr), @@ -141,9 +143,15 @@ func checkTrieEquality(dbs *dbs, zkRoot, mptRoot common.Hash, label string, leaf progressbar.OptionShowIts(), progressbar.OptionSetWidth(40), progressbar.OptionThrottle(100*time.Millisecond), - progressbar.OptionSpinnerType(14), progressbar.OptionShowElapsedTimeOnFinish(), progressbar.OptionOnCompletion(func() { fmt.Fprintln(os.Stderr) }), + progressbar.OptionSetTheme(progressbar.Theme{ + Saucer: "█", + SaucerHead: "█", + SaucerPadding: "░", + BarStart: "[", + BarEnd: "]", + }), ) }