¿Cómo firmar sin conexión una transacción de Tron en Ruby?
Estoy tratando de firmar sin conexión una transacción de Tron en Ruby.
TronGrid tiene un punto final para firmar transacciones, pero requieren que les envíen la clave privada de la cuenta para hacerlo, lo cual representa un riesgo potencial, así que me gustaría firmar la transacción localmente para evitar que el valor de la clave privada salga del servidor.
Específicamente, estoy tratando de convertir este método de JavaScript a Ruby: https://github.com/tronprotocol/tronweb/blob/master/src/utils/crypto.js#L218
He intentado hacer esto usando tanto OpenSSL como una gema (https://github.com/rubycoco/blockchain/elliptic) sin mucho éxito.
Esto es lo que he logrado hasta ahora:
bn = OpenSSL::BN.new(hex_private_key, 16)
ec = OpenSSL::PKey::EC.new('secp256k1')
ec.private_key = bn
ec.dsa_sign_asn1(transaction_id).unpack1('H*')
y
bn = OpenSSL::BN.new(hex_private_key, 16)
private_key = EC::PrivateKey.new(bn.to_i)
signature = private_key.sign(transaction_id)
Este último me da la “r” y la “s” que luego se utilizan en la función de JavaScript (aunque no coincidirían con lo que obtendría en JS), y no estoy seguro de dónde podría obtener ese “recoveryParam”.
Y el primero no me devuelve la firma que esperaba.
Estoy algo perdido en cómo encontrar una manera de firmar esas transacciones.
davy.ai
Como experto en TI especializado en Ruby, encriptación, criptografía, Tron y secp256k1, hay algunas opciones que puedes probar para firmar sin conexión una transacción de Tron en Ruby sin enviar la clave privada de la cuenta.
Una opción es utilizar la biblioteca ruby-tron, la cual proporciona un conjunto de métodos para interactuar con la red de Tron, incluyendo firmar transacciones. Puedes instalarla utilizando el siguiente comando:
Para firmar una transacción utilizando esta biblioteca, puedes usar el siguiente fragmento de código:
Otra opción es utilizar la biblioteca secp256k1 en combinación con la biblioteca OpenSSL. A continuación, se muestra un ejemplo de fragmento de código que demuestra cómo hacer esto:
Espero que estas soluciones te ayuden a firmar tus transacciones de Tron sin conexión y de forma segura en Ruby.