¿Cómo configurar el tipo de administrador de cuenta para firmar transacciones en Go?

TL;DR: he configurado un nodo Ethereum privado y quiero enviarle una transacción firmada. Al leer los documentos, sé que hay un Managertipo de cuenta que puede acceder a un Wallettipo que tiene un SignTxmétodo que quiero usar para este propósito. Tengo un problema al configurar el Managertipo de cuenta para comenzar este proceso.

El problema:

La NewManagerfunción requiere un tipo que implemente la Backendinterfaz. El problema aquí es que no puedo encontrar ningún documento que describa (con precisión) cómo inicializar una cuenta Managercon un archivo Backend. El único backend disponible en la fuente de la cuenta está SimulatedBackenddiseñado para pruebas (fuente: https://github.com/ethereum/go-ethereum/tree/3fa0fa713bc1508835bdecd7dea78ff09803e327/accounts/abi/bind/backends ).

Lo que he probado:

Los documentos (aquí: https://github.com/ethereum/go-ethereum/wiki/Native:-Account-management#keystores-from-go ) dicen que uno puede inicializarse de esta manera:

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

Sin embargo, no se compila como accounts.StandardScryptNy accounts.StandardScryptPno existen, y cuando se reemplaza con sus equivalentes enteros ( 2y 1respectivamente), el error de compilación indica que el argumento de la ruta del almacén de claves ( "/path/to/keystore") no implementa la Backendinterfaz, lo cual tiene sentido. Supongo que los documentos no están actualizados y, por eso, la NewManagerfunción no puede compilarse con estos argumentos.

Documentos para el NewManagertipo de referencia: https://godoc.org/github.com/ethereum/go-ethereum/accounts#NewManager

Pregunta:

¿Alguien sabe cómo inicializar correctamente el administrador de cuentas para comenzar a firmar transacciones en Go?

Me di cuenta de esto antes, se actualizará

Respuestas (1)

Descubrí que Managerno se necesita una para interactuar con las cuentas y firmar transacciones, sino que podemos crear un almacén de claves y encontrar cuentas y billeteras usando sus métodos de documentación . Podemos crear un almacén de claves así:

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

donde keystoreestá la importación "github.com/ethereum/go-ethereum/accounts/keystore"y KEYSTORE_DIRes el keystoredirectorio para los archivos de clave privada de la cuenta.