TL;DR: he configurado un nodo Ethereum privado y quiero enviarle una transacción firmada. Al leer los documentos, sé que hay un Manager
tipo de cuenta que puede acceder a un Wallet
tipo que tiene un SignTx
método que quiero usar para este propósito. Tengo un problema al configurar el Manager
tipo de cuenta para comenzar este proceso.
El problema:
La NewManager
función requiere un tipo que implemente la Backend
interfaz. El problema aquí es que no puedo encontrar ningún documento que describa (con precisión) cómo inicializar una cuenta Manager
con un archivo Backend
. El único backend disponible en la fuente de la cuenta está SimulatedBackend
diseñ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.StandardScryptN
y accounts.StandardScryptP
no existen, y cuando se reemplaza con sus equivalentes enteros ( 2
y 1
respectivamente), el error de compilación indica que el argumento de la ruta del almacén de claves ( "/path/to/keystore"
) no implementa la Backend
interfaz, lo cual tiene sentido. Supongo que los documentos no están actualizados y, por eso, la NewManager
función no puede compilarse con estos argumentos.
Documentos para el NewManager
tipo 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?
Descubrí que Manager
no 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 keystore
está la importación "github.com/ethereum/go-ethereum/accounts/keystore"
y KEYSTORE_DIR
es el keystore
directorio para los archivos de clave privada de la cuenta.
gracias