世界円周率の日OKXのプライベートキーパズル大賞の解読方法 (全コード付)

作者: リン・ハーン発明者の量化, 作成日:2023-03-14 23:25:45, 更新日:2023-09-18 20:08:33

img

OKXが世界円周日解読活動をしていると隣の大神社で言われています. テーマは以下です.

img

ニュースを見ると,口先が少し上がり,MacBook Proを開け,何も言わずに,やり始めました.

分析

公式には, 61 位のキーが画像の円周率と重なる部分にあると書かれています. プライベートキーには 32 バイトの長さがあり, 64 位を hex に変換し, 0x を前置します. 66 位になります. 61 位です. 肉眼で見ると,最初の行の "0X" は明らかに円周率ではありません.

Mac 搭載ツールでシンプルな化色調処理

img

Macは画像の文字を自動的に認識し,直接コピーします:

3.141592653589793230X1D64338
А694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B3
81284
•探索,
038
永无止境
027
493
05%
0128
4756482337867831731712019091
47D9E56692346034861045432664
8213393607743749141273724587
006606315588174881BEEA209628
2925409192744436789259036001

この図は,確かに使えません. 修正したので, 確認されていない画像は*で表示されます. 確かではありません. 他の文字の文字形を見て判断できます. このとき,Pythonで2つの文字の違いを計算し,同じ文字の_'で表示します.

img = '''
3.141592653589793230X1D64338
A694502884197169399375105820
974925E123078164062862089986
28033DB034211706409914808651
32823066470ED424609550582231
8B32594081284811174502841027
0193**2*D2299964462294895493
0381960EFC8103F9365933446128
4756482337867831731712019091
47D9E56692346034861045432664
82133936077A3749141273724587
006606315588174881BEEA209628
2925409192744436789259036001
'''
# 真实圆周率
real='''
3.14159265358979323846264338
3279502884197169399375105820
9749445923078164062862089986
2803482534211706798214808651
3282306647093844609550582231
7253594081284811174502841027
0193852110555964462294895493
0381964428810975665933446128
4756482337867831652712019091
4564856692346034861045432664
8213393607260249141273724587
0066063155881748815209209628
2925409171536436789259036001
'''

items = img.strip().split('\n')
diffStr = ''
for pos, line in enumerate(real.strip().split('\n')):
    for i, c in enumerate(line):
        imgLine = list(items[pos])
        if line[i] == imgLine[i]:
            imgLine[i] = '_'
        else:
            diffStr += imgLine[i]
        items[pos] = ''.join(imgLine)
print('\n'.join(items))
print(diffStr, 'Len:', len(diffStr))

実行結果は以下の通りです.

___________________0X1D_____
A694________________________
____25E1____________________
____3DB0________4099________
___________ED42_____________
8B32________________________
____**_*D2299_______________
______0EFC___3F93___________
________________731_________
_7D9E_______________________
__________7A37______________
__________________BEEA______
________92744_______________
0X1DA69425E13DB04099ED428B32***D22990EFC3F937317D9E7A37BEEA92744 Len: 64

3つ追加して,ちょうど3つの不確実性があるので,それを削除してみましょう. 他の61つを除外しても問題ありません. 絶対的な違いだけを残し,最後に前項を考慮します.

0X1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744

PythonでOKチェーンに移動し,どのプライベートキーにどれが残っているかを比較します. 実際には314USDTの送金済みの公钥を先に選択できます.

import sys
import web3,time,logging
from eth_account import Account
from web3 import Web3
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')
w3 = Web3(Web3.HTTPProvider("https://exchainrpc.okex.org"))
logging.info(w3.clientVersion)
found = None

def get_balance_gas(key):
    global found
    _counter += 1
    address = Account.from_key(key).address
    logging.info('fetch address %s %s' % (found, address))
    while True:
        try:
            balance = w3.eth.get_balance(address)
            break
        except:
            logging.warning(traceback.format_exc())
            time.sleep(1)
            continue
    if balance != 0:
        found = key
        raise BaseException('Found balance: %s %s' % (address, balance))
    return balance

from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=50)
keys = []
prefix = '1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744'
# 无所谓优化算法了, 争分夺秒跑密钥
ch = '0123456789ABCDEF'
for a in range(0, 16):
    for b in range(0, 16):
        for c in range(0, 16):
            for d in range(0, 16):
                for e in range(0, 16):
                    keys.append("0x"+prefix+ch[a]+ch[b]+ch[c]+ch[d]+ch[e])
print('all keys:', len(keys))
tasks = [None for t in keys]
for idx, key in enumerate(keys):
    tasks[idx] = executor.submit(get_balance_gas, key)
for t in tasks:
    t.result()
    

複数のスレッドで高速化するために 104,85,76回走る必要があります.

2023-03-15 00:20:19,491 exchain-v1.6.8.5
all keys: 1048576
2023-03-15 00:20:20,372 fetch address None 0xc20C41f06F2428a0FD84ef03Ec6960992F5f8016
2023-03-15 00:20:20,473 fetch address None 0xcFa87ee54bc1c14c09a3AB3f41640bBab5C5480a
2023-03-15 00:20:20,483 fetch address None 0x126E922652f8B276F231D0eCA94d98685a26a45D
以下省略......

不安な待機の中で,悪いニュースがやってきて,退場する前も戦略はうまくいかない,すべて表示されたNone

頂点回路が回転する

ツイッターで議論を始めてみたら みんなが私と同じ段階に 辿り着いたことが分かりました しかし不思議なことに 誰も解読が成功したと語らず 正確なトップ61も公表されていなかったので 奇妙な返信が私の注意を引きましたD2299疑いの余地はない,私は確信している,しかし彼は自信を持っているように見えます.

img

しかし,この人は61桁の数字をD2290と投稿した. そして,彼は慎重にチェックした,という.

img

試すという気持ちで,他の何人かのコメントで見つけた61個を見つけました.

img

コメント欄に表示された前記をすべて集め,固いコードで表示し,基本的なコードは変更されず,重複貼り付けされません.

prefixs =[
'1DA69425E13DB04099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B320D2290EFC3F937317D9E7A37BEEA92744',
'1DA694255E3DB040990ED428B3208890EFC3F937317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B3202299EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB01099ED428B3202290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D2290EFC3F9317317D9E7A37BEEA92744',
'1DA69425E13DB04099ED428B32D22990EFC3F937317D9E7A37BEEA92744',
]

実際,後にもっと新しい投稿があります. 兄弟のPIは私と同じではありません. この2つの鍵で走ってみて,自分の目を見ても信じられないほどに,外に出た. 前にある鍵の1つが正しかったことを示すために,

1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155

D229です. しかし,この画像は明らかにD2299です. 731の後ろには7があります. しかし,それは正確な61位ですが,彼がどのように計算したかは不明で,好奇心に満ちていますが,私は自分の操作に疑いはありません. コメント欄を見て,公式客服は,円周率の別のバージョンがあると言います. 私は孤独に感じています. 私が学んだ知識と,人間の現在の宇宙の理解で,円周率という理不尽な数は,宇宙の無限を表すことができます. その微分数は,決して繰り返されず,終わらないでしょう.

この質問に対する,もう一人の大兄の回答は,

img

知識の源は

Web3の代金コード

最後に,ボーナスを転送するコードです. 今回はFMZプラットフォームのWeb3機能を直接使用しました. チェーンアドレスをOKCに設定して実行します. プライベートキーを交換に追加するときに任意に実行します.

img

証明する

破解された公開鍵のアドレス

>>> from eth_account import Account
>>> Account.from_key('0x1DA69425E13DB04099ED428B32D2290EFC3F9373177D9E7A37BEEA92744C8155').address
'0x0bd08825e05e540C9508961a32E58D14da47275A'

リンクをご覧ください:https://www.okx.com/cn/explorer/okc/address/0x0bd08825e05e540c9508961a32e58d14da47275a

ティックス: ティックス: ティックス:https://www.okx.com/cn/explorer/okc/tx/0x4211418b09571011417257201aaf10fc3c5d638809a9456eb5aba5fe8c5d4e2c

メールの送信先は

0x25f0a126be95f437ee71d7c4de725567c5f6c731

img

この住所が私のものだと証明するために 受け取る人の住所を使って ブラックホールの住所に請求書を送りました

https://www.okx.com/cn/explorer/okc/tx/0xc32b5e299064456af3eb67c34a3b153f74a1bd18a31429052e3e3c5614bcdb6e

ブラックホールの住所は0x0000000000000000005757572e464d5a2e434f4d

ブラックホールのアドレスは,

~ % python -c 'print(bytes.fromhex("0000000000000000005757572e464d5a2e434f4d"))'
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00WWW.FMZ.COM'

後に

ここまでで終わり,振り返り,自分の長年の知識に感謝する,そうでなければ,解読速度が遅いし,他の誰かが一歩先を行くでしょう. 公式の図には間違いがあることは確かで,結局のところ,答えが公開される前に解読された方が運が良かったので,OKXが次回類似のイベントを開催する際にはもっと厳格なことを期待します.


関連性

もっと

パパどれぐらい時間がかかるのか?

ジョニーZは強暴だ!

btcrobot について行動する能力は最高です

オーク量化Zは強暴だ!

発明者の量化20分ほどです

発明者の量化古い鉄が来た