Добрый день, я смотрел, как создаются адреса контрактов, и кажется, что процесс довольно детерминирован (зависит от одноразового номера). Есть ли способ получить адрес контракта, который еще не был развернут для определенного одноразового номера? что-то типа:
contractAddress = getAddress(nonce1, data, privateKey)
Я знаю, что раньше была библиотека pyethereum, которая предлагала такой инструмент, но она давно не обновлялась, и я надеялся использовать более активный инструмент.
Как всегда, ваша помощь приветствуется!
Другие могут добавлять другие ответы, но 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
эт
data
? Он также не должен быть нужен.