Generar dirección de contrato usando nonce

Buen día, estuve mirando la forma en que se crean las direcciones de los contratos y parece que el proceso es bastante determinista (depende del nonce). ¿Hay alguna manera de obtener la dirección de un contrato que aún no se implementó para un momento específico? algo como:

contractAddress = getAddress(nonce1, data, privateKey)

Sé que solía haber una biblioteca de pyethereum que ofrecía dicha herramienta, pero no se actualizó en mucho tiempo y esperaba usar una herramienta más activa.

Como siempre, su ayuda es apreciada!

¿Qué es data? Tampoco debería ser necesario.

Respuestas (2)

Otros pueden agregar otras respuestas, pero pyethereum todavía está activo y este tipo de código no cambia:

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

de ¿Cómo se calcula la dirección de un contrato de Ethereum?

No se necesita la clave privada, solo la dirección del remitente. Sin embargo, si senderse desconoce, a partir de los OP privateKey, senderse calcula mediante:

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

En golang, use ethereum/go-ethereum/crypto.CreateAddress.

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