Сгенерировать адрес контракта, используя одноразовый номер

Добрый день, я смотрел, как создаются адреса контрактов, и кажется, что процесс довольно детерминирован (зависит от одноразового номера). Есть ли способ получить адрес контракта, который еще не был развернут для определенного одноразового номера? что-то типа:

contractAddress = getAddress(nonce1, data, privateKey)

Я знаю, что раньше была библиотека pyethereum, которая предлагала такой инструмент, но она давно не обновлялась, и я надеялся использовать более активный инструмент.

Как всегда, ваша помощь приветствуется!

Что такое data? Он также не должен быть нужен.

Ответы (2)

Другие могут добавлять другие ответы, но pyethereum все еще активен, и код этого типа не меняется:

def mk_contract_address(sender, nonce):
    return sha3(rlp.encode([normalize_address(sender), nonce]))[12:]

from Как вычисляется адрес контракта Ethereum?

Закрытый ключ не нужен, только адрес отправителя. Однако, если senderнеизвестно, из OP privateKeyвычисляется sender:

def privtoaddr(x, extended=False):
    if len(x) > 32:
        x = decode_hex(x)
    o = sha3(privtopub(x)[1:])[12:]
    return add_checksum(o) if extended else o

В голанге используйте ethereum/go-ethereum/crypto.CreateAddress.

func CreateAddress(creator common.Address, nonce uint64) common.Address