Мне известно о возможности генерировать тщеславные адреса для обычных учетных записей. Однако как можно генерировать тщеславные адреса для внешних учетных записей (которые содержат смарт-контракты)?
Я спрашиваю, потому что служба имен Ethereum (ENS) была развернута на 0x112234455c3a32fd11230c42e7bccd4a84e02010 (Ropsten).
Генерация тщеславия — это простой процесс проб и ошибок, и тот же процесс можно использовать для поиска учетных записей, имеющих какое-либо другое свойство.
Адреса контрактов определяются учетной записью создающей учетной записи и ее одноразовым номером — в частности, они представляют собой хэш кодирования RLP этих двух значений. Таким образом, вы можете искать учетную запись, которая генерирует тщеславный адрес контракта, например:
Вот простой код, который использует pyethereum для этого:
import os
from ethereum.keys import privtoaddr
from ethereum.utils import mk_contract_address
import zlib
smallest = None
keys = {}
while True:
privkey = os.urandom(32)
addr = privtoaddr(privkey)
contractaddr = mk_contract_address(addr, 0).encode('hex')
compressedsize = len(zlib.compress(contractaddr, 9))
if compressedsize <= 42:
print "0x%s: %d" % (contractaddr, compressedsize)
keys[contractaddr] = privkey.encode('hex')
if smallest is None or long(contractaddr, 16) < long(smallest, 16):
smallest = contractaddr
print "0x%s" % smallest
keys[contractaddr] = privkey.encode('hex')
В этом случае он ищет адреса с наибольшим количеством ведущих нулей и ключи, сжимающие наименьшее — используя zlib в качестве грубой оценки Колмогоровской сложности , поскольку адреса с большим количеством повторений будут сжиматься меньше.
Конечно, вы можете заменить фитнес-функцию чем угодно — чтобы сгенерировать адрес, который в конечном итоге будет использоваться для реестра ENS, я использовал функцию, которая оценивает адреса на основе того, с какого числа строго возрастающих цифр они начинаются.
I used a function that rated addresses based on how many strictly incrementing digits they started with.
Я всегда недооцениваю то, на что готовы пойти кодеры ради новизны. Например, разве вы не должны исправлять ошибки или что-то в этом роде? 😜 Тем не менее, это потрясающе, и спасибо, что поделились.
Моисес Брисеньо Эстрелло
q9f
Марс Робертсон
эт