Un poco confundido. ¿Cómo envío ether usando Web3j a una dirección (Android)?

EDITAR: estoy usando la plataforma Android

Creo que estoy un poco confundido conceptualmente. Apreciaría si alguien pudiera responderme estas pocas preguntas, ya que estoy tratando de crear una aplicación para poder tener claro exactamente lo que está sucediendo aquí. Estoy tratando de leer y descifrar la documentación al mismo tiempo.

-He generado mi dirección y clave privada usando la clase web3j ECKeyPair

Ahora necesito poder enviar ese éter a una dirección usando esos datos y no estoy seguro de cómo se supone que debo hacerlo.

  • Creo que se supone que debo usar algo llamado transacción sin procesar, pero nuevamente mi comprensión es confusa

  • También me gustaría poder cifrar mi clave privada; sin embargo, vi que cifra los datos en un archivo de almacén de claves. ¿Hay alguna forma de borrar los datos innecesarios aquí, ya que solo intento cifrar la clave privada con una contraseña?

Si un miembro con más conocimientos que yo pudiera aclarar los pasos necesarios para "firmar una transacción" para que el éter se pueda enviar de una dirección a otra, sería de gran ayuda para mi proyecto de diseño.

Tampoco entiendo cómo se pueden firmar las transacciones sin conexión, ya que pensé que el punto de firmar una transacción era para que la red pudiera verificarla.

Gracias.

Respuestas (2)

Básicamente necesitas seguir tres pasos:

  1. Construir objeto de transacción
  2. Firmarlo con clave privada
  3. Publicar transacción firmada

Para el paso 1 haces algo como esto:

var from = "0x..."; // The address you are sending ether from
var tx = {
  nonce: web3.eth.getTransactionCount (from),
  chainId: 1, // 1 means Mainnet, more chain IDs here: https://chainid.network/
  to: "0x...", // The address you are sending ether to
  data: "",
  value: value, // The amount of ether to send (in Wei)
  gasPrice: web3.eth.getGasPrice(),
  gas: 21000 // Enough for simple transfer
};

Para el paso 2 haces:

var signedTx = web3.eth.accounts.signTransaction (tx, privateKey);

Para el paso 3 haces:

web3.eth.sendSignedTransaction(signedTx);

Consulte la documentación de Web3js para obtener más información.

Lo siento, mi respuesta es sobre Web3js, no Web3j. Pero, para Web3j, los pasos son básicamente los mismos:

  1. Preparar objeto de transacción ( RawTransaction )
  2. Firmarlo ( TransactionEncoder )
  3. Publicarlo ( ethSendRawTransaction )

Consulte la documentación oficial para obtener más detalles.

Si entiendo su pregunta correctamente, debería poder usar simplemente web3.eth.sendTransactionpasando un objeto de transacción.

var transactionObject = {
    from: web3.defaultAccount,
    to: addressToSendTo,
    value: web3.toWei(1.0, "ether"),
    gas: gasAmountInWei
};

web3.eth.sendTransaction(transactionObject, function(err, data) {
    // if no err, transaction was success
});

Para el valor del gas, puede estimar el gas necesario así

// note that `transactionObject` is the same as above but without the gas value
web3.eth.estimateGas(transactionObject, function(err, estimate) {
    transactionObject.gas = estimate;
});

Si tiene problemas con el gas que no es suficiente, experimente agregando más. Generalmente multiplico por 2, ya que solo usa lo que se necesita y no la cantidad total (ya que se supone que es solo una estimación).

Estoy trabajando en la plataforma android y java. Mis disculpas por no decir eso arriba