Vertragsadresse mit Nonce generieren

Guten Tag, ich habe mir angesehen, wie Vertragsadressen erstellt werden, und es scheint, dass der Prozess ziemlich deterministisch ist (hängt von der Nonce ab). Gibt es eine Möglichkeit, die Adresse eines Vertrags zu erhalten, der noch nicht für eine bestimmte Nonce bereitgestellt wurde? etwas wie:

contractAddress = getAddress(nonce1, data, privateKey)

Ich weiß, dass es früher die Pyethereum-Bibliothek gab, die ein solches Tool anbot, aber sie wurde lange nicht aktualisiert und ich hatte gehofft, ein aktiveres Tool zu verwenden.

Wie immer wird Ihre Hilfe geschätzt!

Was ist data? Es sollte auch nicht benötigt werden.

Antworten (2)

Andere können andere Antworten hinzufügen, aber Pyethereum ist immer noch aktiv und dieser Typcode ändert sich nicht:

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

von Wie wird die Adresse eines Ethereum-Kontrakts berechnet?

Der private Schlüssel wird nicht benötigt, nur die Absenderadresse. Wenn senderjedoch unbekannt ist, wird aus den OPs privateKeyberechnet senderdurch:

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

Verwenden Sie in Golang ethereum/go-ethereum/crypto.CreateAddress.

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