Vanitygen
(不應該太難) vanitygen 在哪裡檢查隨機地址是否以預期的模式開頭?
我一直在嘗試在 Vanitygen 中查找程式碼來檢查生成的地址是否以預期的模式開頭。
Vanitygen 回購:https ://github.com/samr7/vanitygen
我目前所知道的:
- 當生成的地址以預期模式開始時呼叫vg_output_match_console 。
- vg_exec_context_calc_address將地址生成為字節數組,可能會用到。
- get_prefix_ranges找到我們想要生成的地址的 bignum 的範圍,使得該範圍內的所有 bignum 都以預期的前綴開頭。
- vg_encode_address在 Base58 中生成地址,但僅在最後執行。
- vg_prefix_avl_search似乎是一個重要的部分(那是做什麼的?)
回想一下 vanitygen 允許您列出多個模式並蒐索與其中任何一個匹配的地址。在我看來,對於每個前綴,我們計算 hash160 值的範圍,在 base58 編碼之後,將匹配所需的前綴。(方便的是,校驗和只影響地址的結尾,所以我們不必擔心。)這些範圍被放入AVL 樹中。然後
vg_prefix_avl_search
獲取生成的 hash160 並蒐索樹以查看它是否匹配任何所需的範圍。請注意,這意味著對於不匹配的地址,實際上根本不需要進行 base58 編碼。如果我們改為使用正則表達式匹配模式,那麼相關程式碼
vg_regex_test
非常簡單:計算 base58 編碼並匹配給定的正則表達式。