e82225D3B39E90e845bd9
0xa1610c7730e18806A11b6886009Ae73D716682de
0x4d6B85C0D5769FffDef7E0b948Da516803BdE333
0xe69f0D346daa5ec5591086BABe8a3be1636a43A4
0x77efDB45abC1Ac956df316AD19f4bE862976b74d
0x6A99AdC1799eF93399E6D70900567B7902984EB5
0x27472f6861Be2e94eF01c51D33227C46fEF386b9
0x486E3e141108aB339aA5aD850a216442E2d855E4
0x5109BC213202ecd2143c32e91F36929518F620d9
0x1A80Ebb8233C3516aCfe3c6293c4e791EcB3FFA5
0xCB51437e2642BdA9A544fF6e8003c24BfD4EF7bc
0xc8FD63BE87782E5dC87Dd2eBABEDEa225049B2c3
0xA6C9C23BcaE10D3cbb7b3BA71553A444bb352cd5
0x2021f4891248DbA687ACd8be77f325f65524eF8E
0xe3a36aB569621274a68c453542f11A05714E3531
0xf7E9679CCCC70cDA5C2bD57391b7F769104f2a4F
0x520b51575E9e26E6BE5ec0eA0CEF4c0AC671CA2a86150498E57b943essence account slice
aisle approve august skate surface fantasy seminar supreme crack fog
stay struggle frame unique wasp wasp salad inner lava permit vapor flat
squirrel elbow siren hire close sibling matrix song split math noble
apart device daughter glow until poet more meat kid long weekend body
pink winter icon want spoil jelly egg route essence nut book slim
ACTIVE03d8224589111848d88ce620x3aC95Df0522C9d6A03d
8224589111848d88ce620x3aC95Df0522C9d6A03d8224589111848d88ce620x3aC95Df0522C9d6
A03d8224589111848d8B831E7627xb4c58c7a4c37a346793f20691f762d027c0885471SG21Age(Bip44
Changes(change))
for i in range(n):
addr = [Link](i).PublicKey().ToAddress()
[Link](addr)
return addrs
# ---- Worker task ----
def _process_batch(batch_size, per_path, purposes):
local_hits = []
for _ in range(batch_size):
mnemonic = Bip39MnemonicGenerator().FromWordsNumber(12) # chuẩn BIP-39 12
từ
try:
addrs = derive_addresses(mnemonic, purposes=purposes, n=per_path)
for addr in addrs:
if addr in BLOOM and addr in ADDR_SET:
local_hits.append((mnemonic, addr))
except Exception:
continue
return local_hits
# ---- Load or build bloom ----
def load_or_build_bloom(bloom_path, error_rate=0.001):
log = [Link]("main")
if bloom_path.endswith(".pkl") and [Link](bloom_path):
[Link]("Tải bloom từ pickle: %s", bloom_path)
with open(bloom_path, "rb") as f:
return [Link](f)
[Link]("Tạo bloom từ file txt: %s", bloom_path)
addresses = []
with open(bloom_path, "r", encoding="latin-1", errors="ignore") as f:
for line in f:
addr = [Link]()
if addr:
[Link](addr)
bloom = BloomFilter(max_elements=len(addresses) * 2, error_rate=error_rate)
for addr in addresses:
[Link](addr)
out_pkl = "[Link]"
with open(out_pkl, "wb") as f:
[Link](bloom, f)
[Link]("Bloom đã lưu vào %s", out_pkl)
return bloom
# ---- Load full address set ----
def load_addr_set(txt_path):
log = [Link]("main")
[Link]("Đang load file địa chỉ vào RAM: %s", txt_path)
addr_set = set()
with open(txt_path, "r", encoding="latin-1", errors="ignore") as f:
for line in f:
addr = [Link]()
if addr:
addr_set.add(addr)
[Link]("Tổng địa chỉ load vào RAM: %s", f"{len(addr_set):,}")
return addr_set
# ---- Main ----
def main():
parser = [Link](description="UltraWalletScanner BIP-44 + Bloom
+ Verify RAM")
parser.add_argument('--bloom', required=True, help='Bloom pickle (.pkl) hoặc
file txt')
parser.add_argument('--workers', type=int, default=min(8, cpu_count()))
parser.add_argument('--batch-size', type=int, default=10)
parser.add_argument('--per-path', type=int, default=20)
parser.add_argument('--purposes', default="44,49,84")
parser.add_argument('--hits', default="[Link]")
parser.add_argument('--logfile', default="[Link]")
args = parser.parse_args()
[Link](
level=[Link],
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[[Link]([Link], encoding='utf-8'),
[Link]([Link])]
)
log = [Link]("main")
purposes = [int(x) for x in [Link](",") if [Link]()]
bloom = load_or_build_bloom([Link])
addr_set = load_addr_set([Link] if [Link](".txt") else
"[Link]")
pool = Pool(
processes=[Link],
initializer=_worker_init,
initargs=(bloom, [Link] if [Link](".txt") else "[Link]",
[Link]().level),
)