Wie richte ich den Kontomanagertyp ein, um Transaktionen in Go zu signieren?

TL;DR: Ich habe einen privaten Ethereum-Knoten eingerichtet und möchte eine signierte Transaktion dorthin senden. Durch das Lesen der Dokumente weiß ich, dass es einen Kontotyp gibt, der auf einen ManagerTyp zugreifen kann Wallet, der über eine SignTxMethode verfügt, die ich für diesen Zweck verwenden möchte. Ich habe ein Problem beim Einrichten des Kontotyps Manager, um diesen Vorgang zu starten.

Das Problem:

Die NewManagerFunktion benötigt einen Typ, der die BackendSchnittstelle implementiert. Das Problem hier ist, dass ich keine Dokumente finden kann, die (genau) beschreiben, wie man ein Konto Managermit einer Backend. Das einzige in der Kontoquelle verfügbare Backend ist SimulatedBackendzum Testen gedacht (Quelle: https://github.com/ethereum/go-ethereum/tree/3fa0fa713bc1508835bdecd7dea78ff09803e327/accounts/abi/bind/backends ).

Was ich versucht habe:

Die Dokumente (hier: https://github.com/ethereum/go-ethereum/wiki/Native:-Account-management#keystores-from-go ) sagen, dass man auf diese Weise initialisiert werden kann:

am := accounts.NewManager("/path/to/keystore", accounts.StandardScryptN, accounts.StandardScryptP);

Es wird jedoch nicht kompiliert, da die accounts.StandardScryptNund accounts.StandardScryptPnicht vorhanden sind, und wenn sie durch ihre ganzzahligen Äquivalente ( 2bzw. 1) ersetzt werden, gibt der Kompilierungsfehler an, dass das Schlüsselspeicherpfadargument ( "/path/to/keystore") die Schnittstelle nicht implementiert Backend, was sinnvoll ist. Meine Vermutung ist, dass die Dokumente nicht aktualisiert werden und die NewManagerFunktion daher nicht mit diesen Argumenten kompiliert werden kann.

Dokumente für den NewManagerTyp als Referenz: https://godoc.org/github.com/ethereum/go-ethereum/accounts#NewManager

Frage:

Weiß jemand, wie man den Kontomanager richtig initialisiert, um mit dem Signieren von Transaktionen in Go zu beginnen?

Habe das früher herausgefunden, wird aktualisiert

Antworten (1)

Ich habe festgestellt, dass a Managernicht benötigt wird, um mit Konten zu interagieren und Transaktionen zu signieren, sondern wir können einen Keystore erstellen und Konten und Brieftaschen mit seinen doc-Methoden finden . Wir können einen Schlüsselspeicher wie folgt erstellen:

ks := keystore.NewKeyStore(
    KEYSTORE_DIR,
    keystore.LightScryptN,
    keystore.LightScryptP)

wo keystoreist der Import "github.com/ethereum/go-ethereum/accounts/keystore"und KEYSTORE_DIRdas keystoreVerzeichnis für private Schlüsseldateien des Kontos.