見出し画像

deadアドレスを作ろう!(暇人用)

前提条件:
 - pythonが扱える。
- web3をinstallしている。

最近ふと思ったことがありました。アドレスの最後尾がdeadだったらかっこよくね!?って。
なので今回はdeadアドレスを作りたいと思います!!!(いつもいつもいつも言ってますがなっとうはエンジニアでも何でもない雰囲気初心者です。コードと説明が下手なのは許してください。)

アドレスの作成

evm互換のアドレスは0~9の10個の数字とa~fの6個のアルファベット計16個の文字でできています。そのうちの4つを任意の文字にできる可能性は16**4=65536です。(スロットのフリーズ確率じゃん!!!!)
これ手作業とか無理なので並列処理で総当たりしていきます。

アドレスを生成するには

アドレスは256bit (32byte) の乱数の秘密鍵をKeccak-256関数に通して32byteのハッシュ値にしたものです。(端折ってます。というかよく理解してないです。)
参考記事 : https://www.etarou.work/posts/5084927/

つまりまず秘密鍵を生成する必要があります。自分で16の文字をランダムに64個並べてもいいですが、安全性のために公式の乱数生成器を用います。

from web3 import Web3
from web3.middleware import construct_sign_and_send_raw_middleware
from eth_account import Account

RPC = 'https://bsc-dataseed.binance.org/'
web3 = Web3(Web3.HTTPProvider(RPC))


def maikAddress(i):
    acct = Account.create('KEYSMASH FJAFJKLDSKF7JKFDJ 1530')
    key = ((acct.privateKey).hex())
    web3.middleware_onion.add(construct_sign_and_send_raw_middleware(acct))
    address = (acct.address)

これで、keyとaddressを作れるようになりました。

並列化して100万単位でアドレスを生成

1スレッドだとめっちゃ時間かかるので並列化します。(よくわかってないけどとりあえず調べてコピッて使ってみた。)

import multiprocessing

def main():
    with multiprocessing.Pool(processes=6) as pool:
        r = pool.map(yourFunction, range(i))


if __name__ == "__main__":
    main()

これをさっきのアドレス生成と組み合わせて最後の文字がdeadの時だけkeyとアドレスが出力されるようにします。

import multiprocessing
from web3 import Web3
from web3.middleware import construct_sign_and_send_raw_middleware

from eth_account import Account

RPC = 'https://bsc-dataseed.binance.org/'
web3 = Web3(Web3.HTTPProvider(RPC))


def maikAddress(i):
    acct = Account.create('KEYSMASH FJAFJKLDSKF7JKFDJ 1530')
    key = ((acct.privateKey).hex())
    web3.middleware_onion.add(construct_sign_and_send_raw_middleware(acct))
    address = (acct.address)
    if address[-4:] == 'dead':
        print('key : ' + key)
        print('address : ' + address)

def main():
    with multiprocessing.Pool(processes=10) as pool:
        r = pool.map(maikAddress, range(10000000))


if __name__ == "__main__":
    main()

アドレスのアルファベットは大文字と小文字があるのでdeadを大文字小文字混同で生成したい場合はcasefold()メソッドを使います。(この場合の確率は65536)

if address.casefold()[-4:] == 'dead':

'dead'じゃないと嫌だ!の場合は16+6(A~F)で22**4=234256になります。

確率的に結構重いので1000万くらいでぶん回しましたが100万くらいでも行ける(1回ダメだったけど)

あとはdeadアドレスにあたるまでひたすら待つ!!!!(ちなみに僕は暇人なので10個くらい作りました。)

この記事が気に入ったらサポートをしてみませんか?